mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-18 12:48:53 +01:00
da9d110d5b
This patch does not appear to be doing anything useful, and may hide errors. Currently, the save logic does not run through this path either so it did not do anything. Additionally, properly implement support for handling RegionFileSizeException in Moonrise.
75 lines
3.9 KiB
Diff
75 lines
3.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com>
|
|
Date: Sun, 16 Oct 2022 16:12:49 +0200
|
|
Subject: [PATCH] More vanilla friendly methods to update trades
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
|
index f51078e4b9e6267fa43795d009f5d149b86acb5a..a573aa4d387ad3a4e1017890f2b50b83a3c27ff4 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
|
@@ -895,6 +895,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
|
|
|
@Override
|
|
protected void updateTrades() {
|
|
+ // Paper start - More vanilla friendly methods to update trades
|
|
+ updateTrades(TRADES_PER_LEVEL);
|
|
+ }
|
|
+
|
|
+ public boolean updateTrades(int amount) {
|
|
+ // Paper end - More vanilla friendly methods to update trades
|
|
VillagerData villagerdata = this.getVillagerData();
|
|
Int2ObjectMap int2objectmap;
|
|
|
|
@@ -912,9 +918,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
|
if (avillagertrades_imerchantrecipeoption != null) {
|
|
MerchantOffers merchantrecipelist = this.getOffers();
|
|
|
|
- this.addOffersFromItemListings(merchantrecipelist, avillagertrades_imerchantrecipeoption, 2);
|
|
+ this.addOffersFromItemListings(merchantrecipelist, avillagertrades_imerchantrecipeoption, amount); // Paper - More vanilla friendly methods to update trades
|
|
+ return true; // Paper - More vanilla friendly methods to update trades
|
|
}
|
|
}
|
|
+ return false; // Paper - More vanilla friendly methods to update trades
|
|
}
|
|
|
|
public void gossip(ServerLevel world, Villager villager, long time) {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
|
index 45c44c46edee9f46b8e197f1f54ea2779bf1184c..8e895d6f84f7d84b219f2424909dd42e5f08dec4 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
|
@@ -98,6 +98,34 @@ public class CraftVillager extends CraftAbstractVillager implements Villager {
|
|
}
|
|
|
|
// Paper start
|
|
+ @Override
|
|
+ public boolean increaseLevel(int amount) {
|
|
+ Preconditions.checkArgument(amount > 0, "Level earned must be positive");
|
|
+ int supposedFinalLevel = this.getVillagerLevel() + amount;
|
|
+ Preconditions.checkArgument(net.minecraft.world.entity.npc.VillagerData.MIN_VILLAGER_LEVEL <= supposedFinalLevel && supposedFinalLevel <= net.minecraft.world.entity.npc.VillagerData.MAX_VILLAGER_LEVEL,
|
|
+ "Final level reached after the donation (%d) must be between [%d, %d]".formatted(supposedFinalLevel, net.minecraft.world.entity.npc.VillagerData.MIN_VILLAGER_LEVEL, net.minecraft.world.entity.npc.VillagerData.MAX_VILLAGER_LEVEL));
|
|
+
|
|
+ it.unimi.dsi.fastutil.ints.Int2ObjectMap<net.minecraft.world.entity.npc.VillagerTrades.ItemListing[]> trades =
|
|
+ net.minecraft.world.entity.npc.VillagerTrades.TRADES.get(this.getHandle().getVillagerData().getProfession());
|
|
+
|
|
+ if (trades == null || trades.isEmpty()) {
|
|
+ this.getHandle().setVillagerData(this.getHandle().getVillagerData().setLevel(supposedFinalLevel));
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ while (amount > 0) {
|
|
+ this.getHandle().increaseMerchantCareer();
|
|
+ amount--;
|
|
+ }
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean addTrades(int amount) {
|
|
+ Preconditions.checkArgument(amount > 0, "Number of trades unlocked must be positive");
|
|
+ return this.getHandle().updateTrades(amount);
|
|
+ }
|
|
+
|
|
@Override
|
|
public int getRestocksToday() {
|
|
return getHandle().numberOfRestocksToday;
|