From 909313501c8e5c449f46fe612937628dce310008 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 29 Nov 2019 20:36:01 -0600 Subject: [PATCH] Phantoms only attack insomniacs --- docs/source/configuration.rst | 3 + ...0082-Phantoms-only-attack-insomniacs.patch | 61 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 patches/server/0082-Phantoms-only-attack-insomniacs.patch diff --git a/docs/source/configuration.rst b/docs/source/configuration.rst index 506374b55..e6ebf8185 100644 --- a/docs/source/configuration.rst +++ b/docs/source/configuration.rst @@ -201,6 +201,9 @@ mobs * spawn-in-the-end - **default**: false - **description**: Set whether phantoms spawn naturally in the end + * only-attack-insomniacs + - **default:** false + - **description:** Make phantoms only attack insomniac players. Players that have slept recently will be ignored. * pigmen * dont-target-unless-hit diff --git a/patches/server/0082-Phantoms-only-attack-insomniacs.patch b/patches/server/0082-Phantoms-only-attack-insomniacs.patch new file mode 100644 index 000000000..624ea2ff9 --- /dev/null +++ b/patches/server/0082-Phantoms-only-attack-insomniacs.patch @@ -0,0 +1,61 @@ +From e4857b12fbb38db43e72a82ad6d9182619557d00 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Fri, 29 Nov 2019 20:33:41 -0600 +Subject: [PATCH] Phantoms only attack insomniacs + +--- + src/main/java/net/minecraft/server/EntityPhantom.java | 7 +++++-- + src/main/java/net/minecraft/server/IEntitySelector.java | 1 + + src/main/java/net/pl3x/purpur/PurpurConfig.java | 2 ++ + 3 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/src/main/java/net/minecraft/server/EntityPhantom.java b/src/main/java/net/minecraft/server/EntityPhantom.java +index 69a1c79e74..02cd96f64e 100644 +--- a/src/main/java/net/minecraft/server/EntityPhantom.java ++++ b/src/main/java/net/minecraft/server/EntityPhantom.java +@@ -391,8 +391,11 @@ public class EntityPhantom extends EntityFlying implements IMonster { + EntityHuman entityhuman = (EntityHuman) iterator.next(); + + if (EntityPhantom.this.a((EntityLiving) entityhuman, PathfinderTargetCondition.a)) { +- EntityPhantom.this.setGoalTarget(entityhuman, org.bukkit.event.entity.EntityTargetEvent.TargetReason.CLOSEST_PLAYER, true); // CraftBukkit - reason +- return true; ++ // Purpur start ++ if (!net.pl3x.purpur.PurpurConfig.phantomsOnlyAttackInsomniacs || IEntitySelector.isInsomniac.test(entityhuman)) { ++ return EntityPhantom.this.setGoalTarget(entityhuman, org.bukkit.event.entity.EntityTargetEvent.TargetReason.CLOSEST_PLAYER, true); // CraftBukkit - reason ++ } ++ // Purpur end + } + } + } +diff --git a/src/main/java/net/minecraft/server/IEntitySelector.java b/src/main/java/net/minecraft/server/IEntitySelector.java +index df79e4af9d..7312e1586b 100644 +--- a/src/main/java/net/minecraft/server/IEntitySelector.java ++++ b/src/main/java/net/minecraft/server/IEntitySelector.java +@@ -25,6 +25,7 @@ public final class IEntitySelector { + return !entity.isSpectator(); + }; + public static Predicate notAfk = (player) -> !player.isAfk(); // Purpur ++ public static Predicate isInsomniac = (player) -> MathHelper.clamp(((EntityPlayer) player).getStatisticManager().getStatisticValue(StatisticList.CUSTOM.b(StatisticList.TIME_SINCE_REST)), 1, Integer.MAX_VALUE) >= 72000; // Purpur + + public static Predicate a(double d0, double d1, double d2, double d3) { + double d4 = d3 * d3; +diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java +index 37e9d13886..68db82759d 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java +@@ -250,10 +250,12 @@ public class PurpurConfig { + public static double crystalsAttackPhantomsRadius = 0.0D; + public static float crystalsAttackPhantomDamage = 1.0F; + public static double phantomsOrbitCrystalsRadius = 0.0D; ++ public static boolean phantomsOnlyAttackInsomniacs = false; + private static void phantomSettings() { + crystalsAttackPhantomsRadius = getDouble("settings.mobs.phantom.crystals-attack-range", crystalsAttackPhantomsRadius); + crystalsAttackPhantomDamage = (float) getDouble("settings.mobs.phantom.crystals-attack-damage", crystalsAttackPhantomDamage); + phantomsOrbitCrystalsRadius = getDouble("settings.mobs.phantom.orbit-crystal-radius", phantomsOrbitCrystalsRadius); ++ phantomsOnlyAttackInsomniacs = getBoolean("settings.mobs.phantom.only-attack-insomniacs", phantomsOnlyAttackInsomniacs); + } + + public static boolean pigmenDontTargetUnlessHit = false; +-- +2.24.0.rc1 +