From 3527ccdf2efc9d456b763736473f9851e94c1036 Mon Sep 17 00:00:00 2001 From: Mart Date: Sat, 7 Jun 2025 06:42:11 -0400 Subject: [PATCH] feat: expose updateDemand and restock on Villager (#12608) --- build-data/paper.at | 1 + .../main/java/org/bukkit/entity/Villager.java | 17 +++++++++++++++++ .../craftbukkit/entity/CraftVillager.java | 10 ++++++++++ 3 files changed, 28 insertions(+) diff --git a/build-data/paper.at b/build-data/paper.at index f7bc3ced1c..52c3bc70fa 100644 --- a/build-data/paper.at +++ b/build-data/paper.at @@ -419,6 +419,7 @@ public net.minecraft.world.entity.npc.Villager increaseMerchantCareer()V public net.minecraft.world.entity.npc.Villager numberOfRestocksToday public net.minecraft.world.entity.npc.Villager releaseAllPois()V public net.minecraft.world.entity.npc.Villager setUnhappy()V +public net.minecraft.world.entity.npc.Villager updateDemand()V public net.minecraft.world.entity.npc.WanderingTrader getWanderTarget()Lnet/minecraft/core/BlockPos; public net.minecraft.world.entity.player.Abilities flyingSpeed public net.minecraft.world.entity.player.Abilities walkingSpeed diff --git a/paper-api/src/main/java/org/bukkit/entity/Villager.java b/paper-api/src/main/java/org/bukkit/entity/Villager.java index 02b86d9615..4d88bb2eaa 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Villager.java +++ b/paper-api/src/main/java/org/bukkit/entity/Villager.java @@ -391,4 +391,21 @@ public interface Villager extends AbstractVillager { * reputation regardless of its impact and the player associated. */ public void clearReputations(); + + /** + * Updates the demand for Villager offers. + * Demand can rise and fall based on how often offers are traded. + * They can fall when an item is not traded for a while, or rise when the item is resupplied next. + * Demand is used to calculate the price of items in the Villager's offers. + *
+ * Note: Demand is stored per item and not per Villager. + */ + public void updateDemand(); + + /** + * Resets uses of all offers for the Villager. This also internally calls {@link #updateDemand()}. + * Calling this will trigger a {@link org.bukkit.event.entity.VillagerReplenishTradeEvent} for each offer that is restocked. + * Demand is still updated even if all events are canceled. + */ + public void restock(); } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java index 258e149a4c..8523cadccc 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java @@ -380,4 +380,14 @@ public class CraftVillager extends CraftAbstractVillager implements Villager { public void clearReputations() { getHandle().getGossips().gossips.clear(); } + + @Override + public void updateDemand() { + getHandle().updateDemand(); + } + + @Override + public void restock() { + getHandle().restock(); + } }