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;