diff --git a/build-data/paper.at b/build-data/paper.at index f7bc3ced1cf..52c3bc70fae 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 02b86d9615f..4d88bb2eaa4 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 258e149a4c2..8523cadccc6 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(); + } }