From ad7894cde5981fbf78387bdd55786b3bfe166846 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 29 Nov 2019 22:11:28 -0600 Subject: [PATCH] Villagers follow emerald blocks --- docs/source/configuration.rst | 3 + ...0083-Villagers-follow-emerald-blocks.patch | 58 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 patches/server/0083-Villagers-follow-emerald-blocks.patch diff --git a/docs/source/configuration.rst b/docs/source/configuration.rst index e6ebf8185..8b820ed2b 100644 --- a/docs/source/configuration.rst +++ b/docs/source/configuration.rst @@ -237,6 +237,9 @@ mobs * allow-leashing - **default**: false - **description**: Allow players to use leads on villagers (trader not included) + * follow-emerald-blocks + - **default:** false + - **description:** Villagers will be tempted by emerald blocks and follow players holding them * zombie * target-turtle-eggs diff --git a/patches/server/0083-Villagers-follow-emerald-blocks.patch b/patches/server/0083-Villagers-follow-emerald-blocks.patch new file mode 100644 index 000000000..a7cce55ad --- /dev/null +++ b/patches/server/0083-Villagers-follow-emerald-blocks.patch @@ -0,0 +1,58 @@ +From 133184a0864f4daec4b4b5752b620781176bf117 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Fri, 29 Nov 2019 22:10:12 -0600 +Subject: [PATCH] Villagers follow emerald blocks + +--- + src/main/java/net/minecraft/server/EntityVillager.java | 10 ++++++++++ + src/main/java/net/pl3x/purpur/PurpurConfig.java | 2 ++ + 2 files changed, 12 insertions(+) + +diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java +index 2a848304df..f9da2f1058 100644 +--- a/src/main/java/net/minecraft/server/EntityVillager.java ++++ b/src/main/java/net/minecraft/server/EntityVillager.java +@@ -29,6 +29,7 @@ import org.bukkit.event.entity.VillagerReplenishTradeEvent; + + public class EntityVillager extends EntityVillagerAbstract implements ReputationHandler, VillagerDataHolder { + ++ private static final RecipeItemStack TEMPT_ITEMS = RecipeItemStack.a(Blocks.EMERALD_BLOCK.getItem()); // Purpur + private static final DataWatcherObject bC = DataWatcher.a(EntityVillager.class, DataWatcherRegistry.q); + public static final Map bA = ImmutableMap.of(Items.BREAD, 4, Items.POTATO, 1, Items.CARROT, 1, Items.BEETROOT, 1); + private static final Set bD = ImmutableSet.of(Items.BREAD, Items.POTATO, Items.CARROT, Items.WHEAT, Items.WHEAT_SEEDS, Items.BEETROOT, new Item[]{Items.BEETROOT_SEEDS}); +@@ -70,6 +71,15 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation + brainTickOffset = getRandom().nextInt(100); // Purpur + } + ++ // Purpur start ++ @Override ++ protected void initPathfinder() { ++ if (net.pl3x.purpur.PurpurConfig.villagersFollowEmeraldBlocks) { ++ this.goalSelector.a(3, new PathfinderGoalTempt(this, 1.0D, false, TEMPT_ITEMS)); ++ } ++ } ++ // Purpur end ++ + @Override + public BehaviorController getBehaviorController() { + return (BehaviorController) super.getBehaviorController(); // CraftBukkit - decompile error +diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java +index 68db82759d..4bf208b35c 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java +@@ -280,10 +280,12 @@ public class PurpurConfig { + public static boolean useVillagerBrainTicksOnlyWhenLagging = true; + public static int villagerBrainTicks = 20; + public static boolean allowLeashingVillagers = false; ++ public static boolean villagersFollowEmeraldBlocks = false; + private static void villagerSettings() { + useVillagerBrainTicksOnlyWhenLagging = getBoolean("settings.mobs.villager.use-brain-ticks-only-when-lagging", useVillagerBrainTicksOnlyWhenLagging); + villagerBrainTicks = getInt("settings.mobs.villager.brain-ticks", villagerBrainTicks); + allowLeashingVillagers = getBoolean("settings.mobs.villager.allow-leashing", allowLeashingVillagers); ++ villagersFollowEmeraldBlocks = getBoolean("settings.mobs.villager.follow-emerald-blocks", villagersFollowEmeraldBlocks); + } + + public static boolean zombieTargetsTurtleEggs = true; +-- +2.24.0.rc1 +