From 48aa06106315ce0b31fb77b17887e6d776bdfad1 Mon Sep 17 00:00:00 2001
From: HexedHero <6012891+HexedHero@users.noreply.github.com>
Date: Thu, 6 May 2021 15:26:50 +0100
Subject: [PATCH] Add more Wandering Trader API (#5020)

---
 .../0294-Add-more-WanderingTrader-API.patch   | 41 ++++++++++++
 .../0721-Add-more-WanderingTrader-API.patch   | 65 +++++++++++++++++++
 2 files changed, 106 insertions(+)
 create mode 100644 Spigot-API-Patches/0294-Add-more-WanderingTrader-API.patch
 create mode 100644 Spigot-Server-Patches/0721-Add-more-WanderingTrader-API.patch

diff --git a/Spigot-API-Patches/0294-Add-more-WanderingTrader-API.patch b/Spigot-API-Patches/0294-Add-more-WanderingTrader-API.patch
new file mode 100644
index 000000000..99045d494
--- /dev/null
+++ b/Spigot-API-Patches/0294-Add-more-WanderingTrader-API.patch
@@ -0,0 +1,41 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: HexedHero <6012891+HexedHero@users.noreply.github.com>
+Date: Thu, 6 May 2021 14:56:26 +0100
+Subject: [PATCH] Add more WanderingTrader API
+
+
+diff --git a/src/main/java/org/bukkit/entity/WanderingTrader.java b/src/main/java/org/bukkit/entity/WanderingTrader.java
+index 55394ed5c68cb0bf4333fc918e3b4c8c4e3db0c6..da76e1ed5406322073dd8c7a89ca55aa68620ac4 100644
+--- a/src/main/java/org/bukkit/entity/WanderingTrader.java
++++ b/src/main/java/org/bukkit/entity/WanderingTrader.java
+@@ -28,4 +28,30 @@ public interface WanderingTrader extends AbstractVillager {
+      * {@link WanderingTrader} is forcibly despawned
+      */
+     public void setDespawnDelay(int despawnDelay);
++    
++    // Paper start - Add more WanderingTrader API
++    /**
++     * Set if the Wandering Trader can and will drink an invisibility potion.
++     * @param bool whether the mob will drink
++     */
++    public void setCanDrinkPotion(boolean bool);
++
++    /**
++     * Get if the Wandering Trader can and will drink an invisibility potion.
++     * @return whether the mob will drink
++     */
++    public boolean canDrinkPotion();
++
++    /**
++     * Set if the Wandering Trader can and will drink milk.
++      * @param bool whether the mob will drink
++     */
++    public void setCanDrinkMilk(boolean bool);
++
++    /**
++     * Get if the Wandering Trader can and will drink milk.
++     * @return whether the mob will drink
++     */
++    public boolean canDrinkMilk();
++    // Paper end
+ }
diff --git a/Spigot-Server-Patches/0721-Add-more-WanderingTrader-API.patch b/Spigot-Server-Patches/0721-Add-more-WanderingTrader-API.patch
new file mode 100644
index 000000000..4679f25de
--- /dev/null
+++ b/Spigot-Server-Patches/0721-Add-more-WanderingTrader-API.patch
@@ -0,0 +1,65 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: HexedHero <6012891+HexedHero@users.noreply.github.com>
+Date: Thu, 6 May 2021 14:56:43 +0100
+Subject: [PATCH] Add more WanderingTrader API
+
+
+diff --git a/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java b/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java
+index 37e1b2bf33510c3603efadf219b462e667f573c2..69044827ed6b34924ffd89a977afa06df0dcefc3 100644
+--- a/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java
++++ b/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java
+@@ -58,6 +58,10 @@ public class EntityVillagerTrader extends EntityVillagerAbstract {
+     @Nullable
+     private BlockPosition bp;
+     private int despawnDelay;
++    // Paper start - Add more WanderingTrader API
++    public boolean canDrinkPotion = true;
++    public boolean canDrinkMilk = true;
++    // Paper end
+ 
+     public EntityVillagerTrader(EntityTypes<? extends EntityVillagerTrader> entitytypes, World world) {
+         super(entitytypes, world);
+@@ -69,10 +73,10 @@ public class EntityVillagerTrader extends EntityVillagerAbstract {
+     protected void initPathfinder() {
+         this.goalSelector.a(0, new PathfinderGoalFloat(this));
+         this.goalSelector.a(0, new PathfinderGoalUseItem<>(this, PotionUtil.a(new ItemStack(Items.POTION), Potions.INVISIBILITY), SoundEffects.ENTITY_WANDERING_TRADER_DISAPPEARED, (entityvillagertrader) -> {
+-            return this.world.isNight() && !entityvillagertrader.isInvisible();
++            return canDrinkPotion && this.world.isNight() && !entityvillagertrader.isInvisible(); // Paper - Add more WanderingTrader API
+         }));
+         this.goalSelector.a(0, new PathfinderGoalUseItem<>(this, new ItemStack(Items.MILK_BUCKET), SoundEffects.ENTITY_WANDERING_TRADER_REAPPEARED, (entityvillagertrader) -> {
+-            return this.world.isDay() && entityvillagertrader.isInvisible();
++            return canDrinkMilk && this.world.isDay() && entityvillagertrader.isInvisible(); // Paper - Add more WanderingTrader API
+         }));
+         this.goalSelector.a(1, new PathfinderGoalTradeWithPlayer(this));
+         this.goalSelector.a(1, new PathfinderGoalAvoidTarget<>(this, EntityZombie.class, 8.0F, 0.5D, 0.5D));
+diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java
+index c8344ce0a85030b12139d0b2bbe45acdcd33e1e7..6dad8ca649a2fa0a80a4b88c8a3e284fe218f31f 100644
+--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java
++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java
+@@ -35,4 +35,26 @@ public class CraftWanderingTrader extends CraftAbstractVillager implements Wande
+     public void setDespawnDelay(int despawnDelay) {
+         getHandle().setDespawnDelay(despawnDelay);
+     }
++
++    // Paper start - Add more WanderingTrader API
++    @Override
++    public void setCanDrinkPotion(boolean bool) {
++        getHandle().canDrinkPotion = bool;
++    }
++
++    @Override
++    public boolean canDrinkPotion() {
++        return getHandle().canDrinkPotion;
++    }
++
++    @Override
++    public void setCanDrinkMilk(boolean bool) {
++        getHandle().canDrinkMilk = bool;
++    }
++
++    @Override
++    public boolean canDrinkMilk() {
++        return getHandle().canDrinkMilk;
++    }
++    // Paper end
+ }