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/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java index f605b87f8d0ea0f3646ab856e8fbf12a25c24594..0cbc90a8c1277a0f35e6636ca73b134b22544db3 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -47,6 +47,7 @@ import net.minecraft.world.entity.decoration.HangingEntity; import net.minecraft.world.entity.decoration.LeashFenceKnotEntity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.monster.Enemy; +import net.minecraft.world.entity.npc.AbstractVillager; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.vehicle.Boat; import net.minecraft.world.item.ArmorItem; @@ -1209,6 +1210,7 @@ public abstract class Mob extends LivingEntity { if (!this.isAlive()) { return InteractionResult.PASS; } else if (this.getLeashHolder() == player) { + if (hand == InteractionHand.OFF_HAND && (level.purpurConfig.villagerCanBeLeashed || level.purpurConfig.villagerTraderCanBeLeashed) && this instanceof AbstractVillager) return InteractionResult.CONSUME; // Purpur // CraftBukkit start - fire PlayerUnleashEntityEvent // Paper start - drop leash variable org.bukkit.event.player.PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(this, player, !player.getAbilities().instabuild); diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java index 897dcb4eb6e5530fb612e16551eb9e4f457985f5..20cb368076017e6dfc28ef4c2af778c0971e8462 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -76,6 +76,7 @@ import net.minecraft.world.entity.ai.village.poi.PoiManager; import net.minecraft.world.entity.ai.village.poi.PoiType; import net.minecraft.world.entity.animal.IronGolem; import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.monster.Enemy; import net.minecraft.world.entity.monster.Witch; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.raid.Raid; @@ -163,6 +164,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler protected void registerGoals() { if (level.purpurConfig.villagerFollowEmeraldBlock) this.goalSelector.addGoal(3, new TemptGoal(this, 1.0D, TEMPT_ITEMS, false)); } + + @Override + public boolean canBeLeashed(Player player) { + return level.purpurConfig.villagerCanBeLeashed && !this.isLeashed(); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java index 05fc739b8dfe2ec74a2b070f5cdcd945f5b04b1a..f879faf7ebe01697ab36247dacdd46d4b4fbb77e 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java @@ -95,6 +95,13 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 8.0F)); } + // Purpur start + @Override + public boolean canBeLeashed(Player player) { + return level.purpurConfig.wanderingTraderCanBeLeashed && !this.isLeashed(); + } + // Purpur end + @Nullable @Override public AgeableMob getBreedOffspring(ServerLevel world, AgeableMob entity) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java index a53f827843407ae4c8c6252796af66da41683caa..ab902dc191c7bb0d90e7f3e6b045a017c8b50577 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -718,6 +718,7 @@ public class PurpurWorldConfig { public boolean villagerUseBrainTicksOnlyWhenLagging = true; public boolean villagerFarmingBypassMobGriefing = false; public boolean villagerFollowEmeraldBlock = false; + public boolean villagerCanBeLeashed = false; private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); @@ -725,6 +726,7 @@ public class PurpurWorldConfig { villagerUseBrainTicksOnlyWhenLagging = getBoolean("mobs.villager.use-brain-ticks-only-when-lagging", villagerUseBrainTicksOnlyWhenLagging); villagerFarmingBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerFarmingBypassMobGriefing); villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); + villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); } public boolean vindicatorRidable = false; @@ -737,10 +739,12 @@ public class PurpurWorldConfig { public boolean wanderingTraderRidable = false; public boolean wanderingTraderRidableInWater = false; public boolean wanderingTraderFollowEmeraldBlock = false; + public boolean wanderingTraderCanBeLeashed = false; private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); + wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); } public boolean witchRidable = false;