From 9a2fb172b54d40c416117cb3c658adcb7d9a86fd 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/BlockPosition.java b/src/main/java/net/minecraft/server/BlockPosition.java index f4ed98d2d9..1dfd71df0a 100644 --- a/src/main/java/net/minecraft/server/BlockPosition.java +++ b/src/main/java/net/minecraft/server/BlockPosition.java @@ -326,6 +326,7 @@ public class BlockPosition extends BaseBlockPosition { this.c = i; } + public BlockPosition toBlockPosition() { return h(); } // Paper - OBFHELPER public BlockPosition h() { return new BlockPosition(this); } diff --git a/src/main/java/net/minecraft/server/EntityCreature.java b/src/main/java/net/minecraft/server/EntityCreature.java index a5c147b989..9e88897a07 100644 --- a/src/main/java/net/minecraft/server/EntityCreature.java +++ b/src/main/java/net/minecraft/server/EntityCreature.java @@ -7,6 +7,7 @@ import org.bukkit.event.entity.EntityUnleashEvent; public abstract class EntityCreature extends EntityInsentient { public org.bukkit.craftbukkit.entity.CraftCreature getBukkitCreature() { return (org.bukkit.craftbukkit.entity.CraftCreature) super.getBukkitEntity(); } // Paper + public BlockPosition movingTarget = null; public BlockPosition getMovingTarget() { return movingTarget; } // Paper private BlockPosition a; private float b; diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java index fd59710b2b..426c6ac68f 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -74,7 +74,7 @@ public abstract class EntityLiving extends Entity { public float aT; public float aU; public EntityHuman killer; - protected int lastDamageByPlayerTime; + public int lastDamageByPlayerTime; // Paper - public protected boolean aX; protected int ticksFarFromPlayer; protected float aZ; diff --git a/src/main/java/net/minecraft/server/EntityLlama.java b/src/main/java/net/minecraft/server/EntityLlama.java index b661a86901..26184f463a 100644 --- a/src/main/java/net/minecraft/server/EntityLlama.java +++ b/src/main/java/net/minecraft/server/EntityLlama.java @@ -340,6 +340,7 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn return this.bR != null; } + public boolean inCaravan() { return this.em(); } // Paper - OBFHELPER public boolean em() { return this.bQ != null; } diff --git a/src/main/java/net/minecraft/server/PathfinderGoal.java b/src/main/java/net/minecraft/server/PathfinderGoal.java index acc099e955..339c78eec9 100644 --- a/src/main/java/net/minecraft/server/PathfinderGoal.java +++ b/src/main/java/net/minecraft/server/PathfinderGoal.java @@ -20,7 +20,9 @@ public abstract class PathfinderGoal { } 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 9a75cb63ba..cf10605aaa 100644 --- a/src/main/java/net/minecraft/server/PathfinderGoalGotoTarget.java +++ b/src/main/java/net/minecraft/server/PathfinderGoalGotoTarget.java @@ -1,12 +1,12 @@ package net.minecraft.server; public abstract class PathfinderGoalGotoTarget extends PathfinderGoal { - private final EntityCreature f; + private final EntityCreature f; public EntityCreature getEntity() { return f; } // Paper - OBFHELPER public double a; protected int b; protected int c; private int g; - protected BlockPosition d; + protected BlockPosition d; public BlockPosition getTarget() { return d; } public void setTarget(BlockPosition pos) { this.d = pos; getEntity().movingTarget = pos != BlockPosition.ZERO ? pos : null; } // Paper - OBFHELPER private boolean h; private final int i; private final int j; @@ -15,6 +15,13 @@ public abstract class PathfinderGoalGotoTarget extends PathfinderGoal { public PathfinderGoalGotoTarget(EntityCreature entitycreature, double d0, int ix) { this(entitycreature, d0, ix, 1); } + // Paper start - activation range improvements + @Override + public void onTaskReset() { + super.onTaskReset(); + setTarget(BlockPosition.ZERO); + } + // Paper end public PathfinderGoalGotoTarget(EntityCreature entitycreature, double d0, int ix, int jx) { this.d = BlockPosition.ZERO; @@ -93,6 +100,7 @@ public abstract class PathfinderGoalGotoTarget extends PathfinderGoal { blockposition$mutableblockposition.g(blockposition).d(i1, k - 1, j1); if (this.f.f(blockposition$mutableblockposition) && this.a(this.f.world, blockposition$mutableblockposition)) { this.d = blockposition$mutableblockposition; + setTarget(blockposition$mutableblockposition.toBlockPosition()); // Paper return true; } } diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java index 34d2f11f4f..958d15a6ba 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; @@ -212,18 +213,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 ) { - return true; + // Paper start + EntityCreature creature = (EntityCreature) entity; + if (creature.getGoalTarget() != null || creature.getMovingTarget() != null) { + return true; + } + // Paper end } if ( entity instanceof EntityVillager && ( (EntityVillager) entity ).isInLove() ) { return true; } + // Paper start + if ( entity instanceof EntityLlama && ( (EntityLlama ) entity ).inCaravan() ) + { + return true; + } + // Paper end if ( entity instanceof EntityAnimal ) { EntityAnimal animal = (EntityAnimal) entity; @@ -276,10 +288,10 @@ public class ActivationRange { isActive = false; } - int x = MathHelper.floor( entity.locX ); - int z = MathHelper.floor( entity.locZ ); + //int x = MathHelper.floor( entity.locX ); // Paper + //int z = MathHelper.floor( entity.locZ ); // Paper // Make sure not on edge of unloaded chunk - Chunk chunk = entity.world.getChunkIfLoaded( x >> 4, z >> 4 ); + Chunk chunk = entity.getChunkAtLocation(); // Paper if ( isActive && !( chunk != null && chunk.areNeighborsLoaded( 1 ) ) ) { isActive = false; -- 2.18.0