From 895a9dfe4cd2344f0c266b0df00084b794219ce5 Mon Sep 17 00:00:00 2001 From: granny Date: Sun, 12 Jan 2025 17:54:35 -0800 Subject: [PATCH] add an option for piglins to ignore gold-trimmed armor --- ...r-piglins-to-ignore-gold-trimmed-arm.patch | 50 ------------------- .../entity/monster/piglin/PiglinAi.java.patch | 32 ++++++++++++ .../purpurmc/purpur/PurpurWorldConfig.java | 2 + 3 files changed, 34 insertions(+), 50 deletions(-) delete mode 100644 patches/server/0280-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch create mode 100644 purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch diff --git a/patches/server/0280-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch b/patches/server/0280-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch deleted file mode 100644 index e249d89dd..000000000 --- a/patches/server/0280-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: granny -Date: Sun, 13 Aug 2023 06:26:08 -0700 -Subject: [PATCH] add an option for piglins to ignore gold-trimmed armor - - -diff --git a/net/minecraft/world/entity/monster/piglin/PiglinAi.java b/net/minecraft/world/entity/monster/piglin/PiglinAi.java -index e283b1296c1e831376bfe9491cbf02ed4b3fffe4..27a6de70530c2a1cbe2f77a7fb493038121710ea 100644 ---- a/net/minecraft/world/entity/monster/piglin/PiglinAi.java -+++ b/net/minecraft/world/entity/monster/piglin/PiglinAi.java -@@ -605,11 +605,18 @@ public class PiglinAi { - } - - itemstack = (ItemStack) iterator.next(); -- } while (!itemstack.is(ItemTags.PIGLIN_SAFE_ARMOR)); -+ } while (!itemstack.is(ItemTags.PIGLIN_SAFE_ARMOR) && (!entity.level().purpurConfig.piglinIgnoresArmorWithGoldTrim || !isWearingGoldTrim(itemstack.getItem()))); // Purpur - - return true; - } - -+ // Purpur start -+ private static boolean isWearingGoldTrim(Item itemstack) { -+ net.minecraft.world.item.equipment.trim.ArmorTrim armorTrim = itemstack.components().get(net.minecraft.core.component.DataComponents.TRIM); -+ return armorTrim != null && armorTrim.material().is(net.minecraft.world.item.equipment.trim.TrimMaterials.GOLD); -+ } -+ // Purpur end -+ - private static void stopWalking(Piglin piglin) { - piglin.getBrain().eraseMemory(MemoryModuleType.WALK_TARGET); - piglin.getNavigation().stop(); -diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8031960ec1d83a26cac92f6f01d76b9e328624e2..3308e2ce5bf49996c7dd75bb604989225cabd16d 100644 ---- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2336,6 +2336,7 @@ public class PurpurWorldConfig { - public int piglinPortalSpawnModifier = 2000; - public boolean piglinAlwaysDropExp = false; - public double piglinHeadVisibilityPercent = 0.5D; -+ public boolean piglinIgnoresArmorWithGoldTrim = false; - private void piglinSettings() { - piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); - piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2352,6 +2353,7 @@ public class PurpurWorldConfig { - piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); - piglinAlwaysDropExp = getBoolean("mobs.piglin.always-drop-exp", piglinAlwaysDropExp); - piglinHeadVisibilityPercent = getDouble("mobs.piglin.head-visibility-percent", piglinHeadVisibilityPercent); -+ piglinIgnoresArmorWithGoldTrim = getBoolean("mobs.piglin.ignores-armor-with-gold-trim", piglinIgnoresArmorWithGoldTrim); - } - - public boolean piglinBruteRidable = false; diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch new file mode 100644 index 000000000..c7ccb700d --- /dev/null +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch @@ -0,0 +1,32 @@ +--- a/net/minecraft/world/entity/monster/piglin/PiglinAi.java ++++ b/net/minecraft/world/entity/monster/piglin/PiglinAi.java +@@ -4,6 +_,7 @@ + import com.google.common.collect.ImmutableSet; + import com.mojang.datafixers.util.Pair; + import java.util.Collections; ++import java.util.Iterator; + import java.util.List; + import java.util.Optional; + import net.minecraft.server.level.ServerLevel; +@@ -666,13 +_,20 @@ + + public static boolean isWearingSafeArmor(LivingEntity entity) { + for (ItemStack itemStack : entity.getArmorAndBodyArmorSlots()) { +- if (itemStack.is(ItemTags.PIGLIN_SAFE_ARMOR)) { ++ if (itemStack.is(ItemTags.PIGLIN_SAFE_ARMOR) || (entity.level().purpurConfig.piglinIgnoresArmorWithGoldTrim && isWearingGoldTrim(itemStack.getItem()))) { // Purpur - piglins ignore gold-trimmed armor + return true; + } + } + + return false; + } ++ ++ // Purpur start - piglins ignore gold-trimmed armor ++ private static boolean isWearingGoldTrim(Item itemstack) { ++ net.minecraft.world.item.equipment.trim.ArmorTrim armorTrim = itemstack.components().get(net.minecraft.core.component.DataComponents.TRIM); ++ return armorTrim != null && armorTrim.material().is(net.minecraft.world.item.equipment.trim.TrimMaterials.GOLD); ++ } ++ // Purpur end - piglins ignore gold-trimmed armor + + private static void stopWalking(Piglin piglin) { + piglin.getBrain().eraseMemory(MemoryModuleType.WALK_TARGET); diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 128c90d9f..4374ba8b2 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2335,6 +2335,7 @@ public class PurpurWorldConfig { public int piglinPortalSpawnModifier = 2000; public boolean piglinAlwaysDropExp = false; public double piglinHeadVisibilityPercent = 0.5D; + public boolean piglinIgnoresArmorWithGoldTrim = false; private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); @@ -2351,6 +2352,7 @@ public class PurpurWorldConfig { piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); piglinAlwaysDropExp = getBoolean("mobs.piglin.always-drop-exp", piglinAlwaysDropExp); piglinHeadVisibilityPercent = getDouble("mobs.piglin.head-visibility-percent", piglinHeadVisibilityPercent); + piglinIgnoresArmorWithGoldTrim = getBoolean("mobs.piglin.ignores-armor-with-gold-trim", piglinIgnoresArmorWithGoldTrim); } public boolean piglinBruteRidable = false;