9147456fc9
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes: ab8ace685 SPIGOT-7236: Bone meal doesn't increase use statistic 7dcb59b8e Avoid switch on material in previous commit Spigot Changes: 19641c75 SPIGOT-7235: World.Spigot#strikeLightningEffect doesn't do anything
76 Zeilen
3.8 KiB
Diff
76 Zeilen
3.8 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 105f8fcbbc5c7c384b77ca8eb768f1147d6ce4b2..18eac340386a396c9850f53f30d20a41c1437788 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
|
@@ -923,6 +923,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
|
|
|
@Override
|
|
protected void updateTrades() {
|
|
+ // Paper start
|
|
+ updateTrades(TRADES_PER_LEVEL);
|
|
+ }
|
|
+
|
|
+ public boolean updateTrades(int amount) {
|
|
+ // Paper end
|
|
VillagerData villagerdata = this.getVillagerData();
|
|
Int2ObjectMap<VillagerTrades.ItemListing[]> int2objectmap = (Int2ObjectMap) VillagerTrades.TRADES.get(villagerdata.getProfession());
|
|
|
|
@@ -932,9 +938,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
|
|
+ return true; // Paper
|
|
}
|
|
}
|
|
+ return false; // Paper
|
|
}
|
|
|
|
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 1fa8026ca63b7e38870daac59936a10b1950561e..a1a8ac55e572156671e47317ba061855be79e5ac 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
|
@@ -99,6 +99,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;
|