mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-18 08:36:13 +01:00
b62dfa0bf9
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 39ce5d3a SPIGOT-4399: ItemMeta.equals broken with AttributeModifiers CraftBukkit Changes:1cf8b5dc
SPIGOT-4400: Populators running on existing chunks116cb9a1
SPIGOT-4399: Add attribute modifier equality test5ee1c18a
SPIGOT-4398: Set ASM7_EXPERIMENTAL flag
174 lines
7.9 KiB
Diff
174 lines
7.9 KiB
Diff
From 41be89ac350a161565254c71c675b9b3f06d6021 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
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 4fe91b5a2f..91f831326c 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 f9bb19fed6..03ca577b4c 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.19.0
|
|
|