From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Totorewa <76272501+totorewa@users.noreply.github.com> Date: Fri, 7 Jan 2022 21:34:57 +1300 Subject: [PATCH] Configurable minimum demand for trades Addresses MC-163962 where villager demand decreases indefinitely. Paper adds a patch to fix this by preventing demand from going below zero. This patch adds a config option to allow the minimum demand to instead be configurable. 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 17a247455dd853ae98e2f82f64a99bccc4d27438..4fa66af33ede3949f4e0236c806e3373f9dea730 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -545,7 +545,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler while (iterator.hasNext()) { MerchantOffer merchantrecipe = (MerchantOffer) iterator.next(); - merchantrecipe.updateDemand(); + merchantrecipe.updateDemand(this.level().purpurConfig.villagerMinimumDemand); // Purpur } } diff --git a/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java b/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java index 0efc8d997b34302c3e0a5d7ec73a11a940dbeefe..af157881d440b34cfe79fbc9b03cc9ef28515eb8 100644 --- a/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java +++ b/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java @@ -131,7 +131,12 @@ public class MerchantOffer { } public void updateDemand() { - this.demand = Math.max(0, this.demand + this.uses - (this.maxUses - this.uses)); // Paper - Fix MC-163962 + // Purpur start + this.updateDemand(0); + } + public void updateDemand(int minimumDemand) { + this.demand = Math.max(minimumDemand, this.demand + this.uses - (this.maxUses - this.uses)); // Paper - Fix MC-163962 + // Purpur end } public ItemStack assemble() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index c751331118e37df2bab7d8e05e4a3dc9ee95dee4..0af1661cd5e8b803430a4adcdeb2275ab4876776 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2817,6 +2817,7 @@ public class PurpurWorldConfig { public boolean villagerTakeDamageFromWater = false; public boolean villagerAllowTrading = true; public boolean villagerAlwaysDropExp = false; + public int villagerMinimumDemand = 0; private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); @@ -2837,6 +2838,7 @@ public class PurpurWorldConfig { villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); villagerAlwaysDropExp = getBoolean("mobs.villager.always-drop-exp", villagerAlwaysDropExp); + villagerMinimumDemand = getInt("mobs.villager.minimum-demand", villagerMinimumDemand); } public boolean vindicatorRidable = false;