From cf3dca9776afbdf8a9568689eca4e66281d0e0bf Mon Sep 17 00:00:00 2001 From: granny Date: Sun, 13 Aug 2023 06:32:25 -0700 Subject: [PATCH] add an option for piglins to ignore gold-trimmed armor --- ...r-piglins-to-ignore-gold-trimmed-arm.patch | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 patches/server/0306-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch diff --git a/patches/server/0306-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch b/patches/server/0306-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch new file mode 100644 index 000000000..3940b339a --- /dev/null +++ b/patches/server/0306-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch @@ -0,0 +1,82 @@ +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/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java +index d98c526676202741e628d5e317b8cdd3f4d3be0a..edf9208ed49a179dc15308dd72ee47367c0a9ded 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java ++++ b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java +@@ -597,20 +597,33 @@ public class PiglinAi { + Iterator iterator = iterable.iterator(); + + Item item; ++ ItemStack itemstack; // Purpur + + do { + if (!iterator.hasNext()) { + return false; + } + +- ItemStack itemstack = (ItemStack) iterator.next(); ++ itemstack = (ItemStack) iterator.next(); // Purpur + + item = itemstack.getItem(); +- } while (!(item instanceof ArmorItem) || ((ArmorItem) item).getMaterial() != ArmorMaterials.GOLD); ++ } while (!(item instanceof ArmorItem) || ((ArmorItem) item).getMaterial() != ArmorMaterials.GOLD && (!entity.level().purpurConfig.piglinIgnoresArmorWithGoldTrim || !isWearingGoldTrim(entity, itemstack))); // Purpur + + return true; + } + ++ // Purpur start ++ private static boolean isWearingGoldTrim(LivingEntity entity, ItemStack itemstack) { ++ Optional optionalArmorTrim = net.minecraft.world.item.armortrim.ArmorTrim.getTrim(entity.level().registryAccess(), itemstack); ++ ++ if (optionalArmorTrim.isEmpty()) return false; ++ ++ net.minecraft.world.item.armortrim.ArmorTrim armorTrim = optionalArmorTrim.get(); ++ ++ return armorTrim.material().is(net.minecraft.world.item.armortrim.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 0e97df2f51d45655034402d09a4bdaff23a44211..ec6c29638935835d590823c5cc35141a7f4d32f2 100644 +--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java ++++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +@@ -8,7 +8,6 @@ import net.minecraft.world.entity.EntityType; + import net.minecraft.world.item.DyeColor; + import net.minecraft.world.item.Item; + import net.minecraft.world.item.Items; +-import net.minecraft.world.level.Explosion; + import net.minecraft.world.level.block.Block; + import net.minecraft.world.level.block.Blocks; + import net.minecraft.world.level.block.state.properties.Tilt; +@@ -24,7 +23,6 @@ import org.bukkit.configuration.ConfigurationSection; + import java.util.ArrayList; + import java.util.HashMap; + import java.util.List; +-import java.util.Locale; + import java.util.Map; + import java.util.function.Predicate; + import java.util.logging.Level; +@@ -2211,6 +2209,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); +@@ -2226,6 +2225,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;