diff --git a/patches/server/0298-Allay-respect-item-NBT.patch b/patches/server/0298-Allay-respect-item-NBT.patch new file mode 100644 index 000000000..377e675fe --- /dev/null +++ b/patches/server/0298-Allay-respect-item-NBT.patch @@ -0,0 +1,71 @@ +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;