Files
Purpur/patches/server/0299-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch
2023-12-07 16:04:02 -08:00

67 lines
3.5 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: granny <contact@granny.dev>
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 372d084609216d5437b92ee60810a9efbb0b6f31..a5a7ea0ddad31e3633647f823df86ddbb5fbbcc5 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
@@ -598,20 +598,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<net.minecraft.world.item.armortrim.ArmorTrim> optionalArmorTrim = net.minecraft.world.item.armortrim.ArmorTrim.getTrim(entity.level().registryAccess(), itemstack, true);
+
+ 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 637c70fda2d3a82db8e6d831ff13160a05ab2008..4f3f16e90362fb08cfa20441fdc3b7220d10dbb4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2196,6 +2196,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);
@@ -2211,6 +2212,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;