From 4bf7275588f3cac7d0ecf7a7609cb664c77abe4c Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 28 Dec 2016 00:19:58 -0500 Subject: [PATCH] Activation Range Improvements Fixes and adds new Immunities to improve gameplay behavior --- .../0195-Activation-Range-Improvements.patch | 159 ++++++++++++++++++ scripts/importmcdev.sh | 2 + 2 files changed, 161 insertions(+) create mode 100644 Spigot-Server-Patches/0195-Activation-Range-Improvements.patch diff --git a/Spigot-Server-Patches/0195-Activation-Range-Improvements.patch b/Spigot-Server-Patches/0195-Activation-Range-Improvements.patch new file mode 100644 index 000000000..ecb49e21c --- /dev/null +++ b/Spigot-Server-Patches/0195-Activation-Range-Improvements.patch @@ -0,0 +1,159 @@ +From b95753f18647c5c5a8b753fbba6d57361a9448ff Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Tue, 27 Dec 2016 22:38:06 -0500 +Subject: [PATCH] Activation Range Improvements + +Fixes and adds new Immunities to improve gameplay behavior + +diff --git a/src/main/java/net/minecraft/server/EntityCreature.java b/src/main/java/net/minecraft/server/EntityCreature.java +index fdfe5b9ed..ce3907438 100644 +--- a/src/main/java/net/minecraft/server/EntityCreature.java ++++ b/src/main/java/net/minecraft/server/EntityCreature.java +@@ -10,6 +10,7 @@ public abstract class EntityCreature extends EntityInsentient { + + public static final UUID bu = UUID.fromString("E199AD21-BA8A-4C53-8D13-6182D5C69D3A"); + public static final AttributeModifier bv = (new AttributeModifier(EntityCreature.bu, "Fleeing speed bonus", 2.0D, 2)).a(false); ++ public BlockPosition movingTarget = null; public BlockPosition getMovingTarget() { return movingTarget; } // Paper + private BlockPosition a; + private float b; + private float c; +diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java +index 132e03f40..f7b005938 100644 +--- a/src/main/java/net/minecraft/server/EntityLiving.java ++++ b/src/main/java/net/minecraft/server/EntityLiving.java +@@ -73,7 +73,7 @@ public abstract class EntityLiving extends Entity { + public float aQ; + public float aR; + public EntityHuman killer; +- protected int lastDamageByPlayerTime; ++ public int lastDamageByPlayerTime; // Paper - public + protected boolean aU; + protected int ticksFarFromPlayer; + protected float aW; +diff --git a/src/main/java/net/minecraft/server/EntityLlama.java b/src/main/java/net/minecraft/server/EntityLlama.java +index 13ae7a030..7e3aa6ee6 100644 +--- a/src/main/java/net/minecraft/server/EntityLlama.java ++++ b/src/main/java/net/minecraft/server/EntityLlama.java +@@ -363,7 +363,7 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn + return this.bL != null; + } + +- public boolean dR() { ++ public boolean inCaravan() { return dR(); } public boolean dR() { // Paper - OBFHELPER + return this.bK != null; + } + +diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java +index ac6e2a9aa..e6c190d43 100644 +--- a/src/main/java/net/minecraft/server/EntityVillager.java ++++ b/src/main/java/net/minecraft/server/EntityVillager.java +@@ -20,7 +20,7 @@ public class EntityVillager extends EntityAgeable implements NPC, IMerchant { + private static final Logger bx = LogManager.getLogger(); + private static final DataWatcherObject by = DataWatcher.a(EntityVillager.class, DataWatcherRegistry.b); + private int profession; +- private boolean bA; ++ private boolean bA;public boolean isMating() { return bA; } // Paper - OBFHELPER + private boolean bB; + Village village; + private EntityHuman tradingPlayer; +diff --git a/src/main/java/net/minecraft/server/PathfinderGoal.java b/src/main/java/net/minecraft/server/PathfinderGoal.java +index 83d9c43f3..1cb6652c2 100644 +--- a/src/main/java/net/minecraft/server/PathfinderGoal.java ++++ b/src/main/java/net/minecraft/server/PathfinderGoal.java +@@ -18,7 +18,10 @@ public abstract class PathfinderGoal { + + public void c() {} + +- public void d() {} ++ public void d() { ++ onTaskReset(); // Paper ++ } ++ public void onTaskReset() {} // Paper + + public void e() {} + +diff --git a/src/main/java/net/minecraft/server/PathfinderGoalGotoTarget.java b/src/main/java/net/minecraft/server/PathfinderGoalGotoTarget.java +index e5b5e9887..e3781f3a8 100644 +--- a/src/main/java/net/minecraft/server/PathfinderGoalGotoTarget.java ++++ b/src/main/java/net/minecraft/server/PathfinderGoalGotoTarget.java +@@ -2,12 +2,21 @@ package net.minecraft.server; + + public abstract class PathfinderGoalGotoTarget extends PathfinderGoal { + +- private final EntityCreature c; ++ private final EntityCreature c; public EntityCreature getEntity() { return c; } // Paper - OBFHELPER + private final double d; + protected int a; + private int e; + private int f; +- protected BlockPosition b; ++ protected BlockPosition b; public BlockPosition getTarget() { return b; } public void setTarget(BlockPosition pos) { this.b = pos; getEntity().movingTarget = pos != BlockPosition.ZERO ? pos : null; } // Paper - OBFHELPER ++ ++ // Paper start ++ @Override ++ public void onTaskReset() { ++ super.onTaskReset(); ++ setTarget(BlockPosition.ZERO); ++ } ++ // Paper end ++ + private boolean g; + private final int h; + +@@ -69,7 +78,7 @@ public abstract class PathfinderGoalGotoTarget extends PathfinderGoal { + BlockPosition blockposition1 = blockposition.a(l, j - 1, i1); + + if (this.c.f(blockposition1) && this.a(this.c.world, blockposition1)) { +- this.b = blockposition1; ++ setTarget(blockposition1); // Paper + return true; + } + } +diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java +index c8a6ff3d4..428912cbc 100644 +--- a/src/main/java/org/spigotmc/ActivationRange.java ++++ b/src/main/java/org/spigotmc/ActivationRange.java +@@ -20,6 +20,7 @@ import net.minecraft.server.EntityFireball; + import net.minecraft.server.EntityFireworks; + import net.minecraft.server.EntityHuman; + import net.minecraft.server.EntityLiving; ++import net.minecraft.server.EntityLlama; + import net.minecraft.server.EntityMonster; + import net.minecraft.server.EntityProjectile; + import net.minecraft.server.EntitySheep; +@@ -210,18 +211,29 @@ public class ActivationRange + if ( entity instanceof EntityLiving ) + { + EntityLiving living = (EntityLiving) entity; +- if ( /*TODO: Missed mapping? living.attackTicks > 0 || */ living.hurtTicks > 0 || living.effects.size() > 0 ) ++ if ( living.lastDamageByPlayerTime > 0 || living.hurtTicks > 0 || living.effects.size() > 0 ) // Paper + { + return true; + } +- if ( entity instanceof EntityCreature && ( (EntityCreature) entity ).getGoalTarget() != null ) ++ if ( entity instanceof EntityCreature ) ++ { ++ // Paper start ++ EntityCreature creature = (EntityCreature) entity; ++ if (creature.getGoalTarget() != null || creature.getMovingTarget() != null) { ++ return true; ++ } ++ // Paper end ++ } ++ if ( entity instanceof EntityVillager && ( (EntityVillager) entity ).isMating() ) // Paper + { + return true; + } +- if ( entity instanceof EntityVillager && ( (EntityVillager) entity ).df()/* Getter for first boolean */ ) ++ // Paper start ++ if ( entity instanceof EntityLlama && ( (EntityLlama ) entity ).inCaravan() ) + { + return true; + } ++ // Paper end + if ( entity instanceof EntityAnimal ) + { + EntityAnimal animal = (EntityAnimal) entity; +-- +2.11.0 + diff --git a/scripts/importmcdev.sh b/scripts/importmcdev.sh index 7b842dc72..7afb66102 100755 --- a/scripts/importmcdev.sh +++ b/scripts/importmcdev.sh @@ -75,7 +75,9 @@ import PacketPlayOutScoreboardTeam import PacketPlayOutTitle import PacketPlayOutUpdateTime import PathfinderAbstract +import PathfinderGoal import PathfinderGoalFloat +import PathfinderGoalGotoTarget import PathfinderWater import PersistentVillage import RemoteControlListener