From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 3 Oct 2019 18:08:03 -0500 Subject: [PATCH] Allow leashing villagers diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java index fe5e8009d16fe9292312e37538b02b92b9fea9ed..7b017806dde98a33b64223f098cc63c286dac02b 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -3115,6 +3115,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (this.isAlive() && this instanceof Leashable leashable) { if (leashable.getLeashHolder() == player) { if (!this.level().isClientSide()) { + if (hand == InteractionHand.OFF_HAND && (level().purpurConfig.villagerCanBeLeashed || level().purpurConfig.wanderingTraderCanBeLeashed) && this instanceof net.minecraft.world.entity.npc.AbstractVillager) return InteractionResult.CONSUME; // Purpur - Allow leashing villagers // CraftBukkit start - fire PlayerUnleashEntityEvent // Paper start - Expand EntityUnleashEvent org.bukkit.event.player.PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.hasInfiniteMaterials()); diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java index 129833b7ecd644e4180fadca15015276961725c6..f89c82db6333dc64ac57e225f5522943eb959f46 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java @@ -187,6 +187,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler this.getAttribute(Attributes.TEMPT_RANGE).setBaseValue(this.level().purpurConfig.villagerTemptRange); // Purpur - Villagers follow emerald blocks } // Purpur end - Configurable entity base attributes + // Purpur start - Allow leashing villagers + @Override + public boolean canBeLeashed() { + return level().purpurConfig.villagerCanBeLeashed; + } + // Purpur end - Allow leashing villagers @Override public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error diff --git a/net/minecraft/world/entity/npc/WanderingTrader.java b/net/minecraft/world/entity/npc/WanderingTrader.java index c307aa1153d6a17ee8624453fc9303ac5749b6ef..0066e413d1fa92ecd5573c00195aa2f1412e665e 100644 --- a/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/WanderingTrader.java @@ -101,6 +101,12 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill return Mob.createMobAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.TEMPT_RANGE, 10.0D); } // Purpur end - Villagers follow emerald blocks + // Purpur start - Allow leashing villagers + @Override + public boolean canBeLeashed() { + return level().purpurConfig.wanderingTraderCanBeLeashed; + } + // Purpur end - Allow leashing villagers @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index b81790ec5a7e4b73fbef52229844506b072dfa0d..1b96a84a1c81c075aa5f7308b89d396a4578be33 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1590,6 +1590,7 @@ public class PurpurWorldConfig { public double villagerScale = 1.0D; public boolean villagerFollowEmeraldBlock = false; public double villagerTemptRange = 10.0D; + public boolean villagerCanBeLeashed = false; private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); @@ -1603,6 +1604,7 @@ public class PurpurWorldConfig { villagerScale = Mth.clamp(getDouble("mobs.villager.attributes.scale", villagerScale), 0.0625D, 16.0D); villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); villagerTemptRange = getDouble("mobs.villager.attributes.tempt_range", villagerTemptRange); + villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); } public boolean vindicatorRidable = false; @@ -1630,6 +1632,7 @@ public class PurpurWorldConfig { public double wanderingTraderScale = 1.0D; public boolean wanderingTraderFollowEmeraldBlock = false; public double wanderingTraderTemptRange = 10.0D; + public boolean wanderingTraderCanBeLeashed = false; private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); @@ -1643,6 +1646,7 @@ public class PurpurWorldConfig { wanderingTraderScale = Mth.clamp(getDouble("mobs.wandering_trader.attributes.scale", wanderingTraderScale), 0.0625D, 16.0D); wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); wanderingTraderTemptRange = getDouble("mobs.wandering_trader.attributes.tempt_range", wanderingTraderTemptRange); + wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); } public boolean wardenRidable = false;