From 72bce6d458aca14f046057789fab8e114d6060a1 Mon Sep 17 00:00:00 2001 From: Encode42 Date: Tue, 9 Mar 2021 16:25:10 -0500 Subject: [PATCH] Various Enderman AI configuration options (#190) --- ...Enderman-to-aggro-spawned-Endermites.patch | 40 +++++++++++++++++ ...-Dragon-Head-wearers-and-stare-aggro.patch | 43 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 patches/server/0178-Config-for-Enderman-to-aggro-spawned-Endermites.patch create mode 100644 patches/server/0179-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch diff --git a/patches/server/0178-Config-for-Enderman-to-aggro-spawned-Endermites.patch b/patches/server/0178-Config-for-Enderman-to-aggro-spawned-Endermites.patch new file mode 100644 index 000000000..2e902a6ed --- /dev/null +++ b/patches/server/0178-Config-for-Enderman-to-aggro-spawned-Endermites.patch @@ -0,0 +1,40 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Encode42 +Date: Tue, 9 Mar 2021 16:10:39 -0500 +Subject: [PATCH] Config for Enderman to aggro spawned Endermites + +By default, Enderman do not attack Endermites unless spawned by an Ender Pearl. + +diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java +index b884addf2ce6f1ef7394658078deb2e75370654f..6c60253fee2098889292837033396f0dcd75c4b7 100644 +--- a/src/main/java/net/minecraft/server/EntityEnderman.java ++++ b/src/main/java/net/minecraft/server/EntityEnderman.java +@@ -16,7 +16,7 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable { + private static final DataWatcherObject bo = DataWatcher.a(EntityEnderman.class, DataWatcherRegistry.i); + private static final DataWatcherObject bp = DataWatcher.a(EntityEnderman.class, DataWatcherRegistry.i); + private static final Predicate bq = (entityliving) -> { +- return entityliving instanceof EntityEndermite && ((EntityEndermite) entityliving).isPlayerSpawned(); ++ return entityliving instanceof EntityEndermite && (((EntityEndermite) entityliving).isPlayerSpawned() || entityliving.world.purpurConfig.endermanAggroSpawnedEndermites); // Purpur + }; + private int br = Integer.MIN_VALUE; + private int bs; +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 839b76e406d9374c1b3aff7adee82acaa7d89dc9..28814c8b5ecab56fca113e741305ac5dc4f49e8c 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -821,6 +821,7 @@ public class PurpurWorldConfig { + public boolean endermanDespawnEvenWithBlock = false; + public double endermanMaxHealth = 40.0D; + public boolean endermanTakeDamageFromWater = true; ++ public boolean endermanAggroSpawnedEndermites = false; + private void endermanSettings() { + endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); + endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); +@@ -834,6 +835,7 @@ public class PurpurWorldConfig { + } + endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth); + endermanTakeDamageFromWater = getBoolean("mobs.enderman.takes-damage-from-water", endermanTakeDamageFromWater); ++ endermanAggroSpawnedEndermites = getBoolean("mobs.enderman.aggressive-towards-spawned-endermites", endermanAggroSpawnedEndermites); + } + + public boolean endermiteRidable = false; diff --git a/patches/server/0179-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch b/patches/server/0179-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch new file mode 100644 index 000000000..b7188141b --- /dev/null +++ b/patches/server/0179-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch @@ -0,0 +1,43 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Encode42 +Date: Tue, 9 Mar 2021 16:16:01 -0500 +Subject: [PATCH] Config to ignore Dragon Head wearers and stare aggro + +Prevents Enderman from becoming aggresive towards players that are wearing a Dragon Head. +Adds functionality to a useless item! + +diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java +index 6c60253fee2098889292837033396f0dcd75c4b7..df4d5ed5957658ee9ca083ac79b38a1202fe7015 100644 +--- a/src/main/java/net/minecraft/server/EntityEnderman.java ++++ b/src/main/java/net/minecraft/server/EntityEnderman.java +@@ -197,7 +197,7 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable { + // Paper end + ItemStack itemstack = (ItemStack) entityhuman.inventory.armor.get(3); + +- if (itemstack.getItem() == Blocks.CARVED_PUMPKIN.getItem()) { ++ if (world.purpurConfig.endermanDisableStareAggro || itemstack.getItem() == Blocks.CARVED_PUMPKIN.getItem() || (world.purpurConfig.endermanIgnorePlayerDragonHead && itemstack.getItem() == Items.DRAGON_HEAD)) { // Purpur + return false; + } else { + Vec3D vec3d = entityhuman.f(1.0F).d(); +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 28814c8b5ecab56fca113e741305ac5dc4f49e8c..45c5b7b9e7b207e25d80c008a87b06b91e81668b 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -822,6 +822,8 @@ public class PurpurWorldConfig { + public double endermanMaxHealth = 40.0D; + public boolean endermanTakeDamageFromWater = true; + public boolean endermanAggroSpawnedEndermites = false; ++ public boolean endermanIgnorePlayerDragonHead = false; ++ public boolean endermanDisableStareAggro = false; + private void endermanSettings() { + endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); + endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); +@@ -836,6 +838,8 @@ public class PurpurWorldConfig { + endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth); + endermanTakeDamageFromWater = getBoolean("mobs.enderman.takes-damage-from-water", endermanTakeDamageFromWater); + endermanAggroSpawnedEndermites = getBoolean("mobs.enderman.aggressive-towards-spawned-endermites", endermanAggroSpawnedEndermites); ++ endermanIgnorePlayerDragonHead = getBoolean("mobs.enderman.ignore-players-wearing-dragon-head", endermanIgnorePlayerDragonHead); ++ endermanDisableStareAggro = getBoolean("mobs.enderman.disable-player-stare-aggression", endermanDisableStareAggro); + } + + public boolean endermiteRidable = false;