From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: BillyGalbreath Date: Tue, 20 Sep 2022 17:56:21 -0500 Subject: [PATCH] Allay respect item NBT diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java index c233533fdacb4f5e635267b5fc9fe21bc8b3c51a..4e77bb2be5a35bc6b002e2eae4af41937187ba0d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java +++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java @@ -15,6 +15,7 @@ import net.minecraft.core.Vec3i; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; +import net.minecraft.nbt.Tag; import net.minecraft.network.protocol.game.DebugPackets; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; @@ -411,9 +412,31 @@ public class Allay extends PathfinderMob implements InventoryCarrier { @Override public boolean wantsToPickUp(ItemStack stack) { - ItemStack itemstack1 = this.getItemInHand(InteractionHand.MAIN_HAND); - - return !itemstack1.isEmpty() && itemstack1.sameItemStackIgnoreDurability(stack) && this.inventory.canAddItem(stack) && this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); + // Purpur start + if (!this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { + return false; + } + ItemStack itemStack = this.getItemInHand(InteractionHand.MAIN_HAND); + if (itemStack.isEmpty()) { + return false; + } + if (!itemStack.sameItemStackIgnoreDurability(stack)) { + return false; + } + if (!this.inventory.canAddItem(stack)) { + return false; + } + for (String tag : this.level.purpurConfig.allayRespectNBT) { + if (stack.hasTag() && itemStack.hasTag()) { + Tag tag1 = stack.getTag().get(tag); + Tag tag2 = itemStack.getTag().get(tag); + if (!Objects.equals(tag1, tag2)) { + return false; + } + } + } + return true; + // Purpur end } @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 3cf1451569128640fe5d6d9fc0fdc550de75c091..c622cbe7104d0d107116d711de06b3653e3bfd1a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1073,10 +1073,13 @@ public class PurpurWorldConfig { public boolean allayRidable = false; public boolean allayRidableInWater = false; public boolean allayControllable = true; + public List allayRespectNBT = new ArrayList<>(); private void allaySettings() { allayRidable = getBoolean("mobs.allay.ridable", allayRidable); allayRidableInWater = getBoolean("mobs.allay.ridable-in-water", allayRidableInWater); allayControllable = getBoolean("mobs.allay.controllable", allayControllable); + allayRespectNBT.clear(); + getList("mobs.allay.respect-nbt", new ArrayList<>()).forEach(key -> allayRespectNBT.add(key.toString())); } public boolean axolotlRidable = false;