From b83bd96847e21f4e8016b938099d267c1fbfe054 Mon Sep 17 00:00:00 2001 From: fullwall Date: Sun, 28 Oct 2012 12:54:18 +0800 Subject: [PATCH] Use the persistent field instead of overriding bh --- .../npc/entity/CitizensBatNPC.java | 13 +++--- .../npc/entity/CitizensBlazeNPC.java | 8 +--- .../npc/entity/CitizensCaveSpiderNPC.java | 8 +--- .../npc/entity/CitizensChickenNPC.java | 1 + .../npc/entity/CitizensCowNPC.java | 1 + .../npc/entity/CitizensCreeperNPC.java | 8 +--- .../npc/entity/CitizensEnderDragonNPC.java | 28 ++++++------- .../npc/entity/CitizensEndermanNPC.java | 26 +++++------- .../npc/entity/CitizensGhastNPC.java | 8 +--- .../npc/entity/CitizensGiantNPC.java | 12 +++--- .../npc/entity/CitizensIronGolemNPC.java | 12 +++--- .../npc/entity/CitizensMagmaCubeNPC.java | 7 +--- .../npc/entity/CitizensMushroomCowNPC.java | 1 + .../npc/entity/CitizensOcelotNPC.java | 8 +--- .../npc/entity/CitizensPigNPC.java | 1 + .../npc/entity/CitizensPigZombieNPC.java | 8 +--- .../npc/entity/CitizensSheepNPC.java | 1 + .../npc/entity/CitizensSilverfishNPC.java | 8 +--- .../npc/entity/CitizensSkeletonNPC.java | 8 +--- .../npc/entity/CitizensSlimeNPC.java | 8 +--- .../npc/entity/CitizensSnowmanNPC.java | 12 +++--- .../npc/entity/CitizensSpiderNPC.java | 8 +--- .../npc/entity/CitizensSquidNPC.java | 8 +--- .../npc/entity/CitizensVillagerNPC.java | 8 +--- .../npc/entity/CitizensWitchNPC.java | 29 ++++++------- .../npc/entity/CitizensWitherNPC.java | 35 ++++++++-------- .../npc/entity/CitizensWolfNPC.java | 8 +--- .../npc/entity/CitizensZombieNPC.java | 8 +--- .../npc/entity/EntityHumanNPC.java | 42 +++++++++---------- .../java/net/citizensnpcs/trait/Anchors.java | 5 ++- .../java/net/citizensnpcs/util/Messages.java | 1 + src/main/java/net/citizensnpcs/util/NMS.java | 12 ++++++ src/main/resources/messages_en.properties | 39 ++++++++--------- 33 files changed, 155 insertions(+), 235 deletions(-) diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensBatNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensBatNPC.java index 6537842a6..8f5cc9c2f 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensBatNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensBatNPC.java @@ -53,6 +53,7 @@ public class CitizensBatNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } @@ -63,12 +64,6 @@ public class CitizensBatNPC extends CitizensMobNPC { npc.update(); } - @Override - public void j_() { - if (npc == null) - super.j_(); - } - @Override public void collide(net.minecraft.server.Entity entity) { // this method is called by both the entities involved - cancelling @@ -111,5 +106,11 @@ public class CitizensBatNPC extends CitizensMobNPC { public NPC getNPC() { return npc; } + + @Override + public void j_() { + if (npc == null) + super.j_(); + } } } \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensBlazeNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensBlazeNPC.java index 2ebcfc7c9..9cebf125e 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensBlazeNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensBlazeNPC.java @@ -54,16 +54,10 @@ public class CitizensBlazeNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bb(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bk() { if (npc != null) diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensCaveSpiderNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensCaveSpiderNPC.java index fcd5e1d42..e93720c19 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensCaveSpiderNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensCaveSpiderNPC.java @@ -53,16 +53,10 @@ public class CitizensCaveSpiderNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bi() { super.bi(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensChickenNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensChickenNPC.java index 1859755e2..00d1780b7 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensChickenNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensChickenNPC.java @@ -53,6 +53,7 @@ public class CitizensChickenNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensCowNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensCowNPC.java index 47fef160a..b64270e15 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensCowNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensCowNPC.java @@ -54,6 +54,7 @@ public class CitizensCowNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensCreeperNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensCreeperNPC.java index 718c0eb95..eb239371e 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensCreeperNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensCreeperNPC.java @@ -55,6 +55,7 @@ public class CitizensCreeperNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } @@ -64,13 +65,6 @@ public class CitizensCreeperNPC extends CitizensMobNPC { super.a(entitylightning); } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bi() { super.bi(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensEnderDragonNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensEnderDragonNPC.java index b4d806582..12360d20c 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensEnderDragonNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensEnderDragonNPC.java @@ -45,27 +45,33 @@ public class CitizensEnderDragonNPC extends CitizensMobNPC { public static class EntityEnderDragonNPC extends EntityEnderDragon implements NPCHolder { private final CitizensNPC npc; + public EntityEnderDragonNPC(World world) { + this(world, null); + } + public EntityEnderDragonNPC(World world, NPC npc) { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bk() { if (npc == null) super.bk(); } + @Override + public void c() { + if (npc != null) + npc.update(); + else + super.c(); + } + @Override public void collide(net.minecraft.server.Entity entity) { // this method is called by both the entities involved - cancelling @@ -75,14 +81,6 @@ public class CitizensEnderDragonNPC extends CitizensMobNPC { Util.callCollisionEvent(npc, entity); } - @Override - public void c() { - if (npc != null) - npc.update(); - else - super.c(); - } - @Override public void g(double x, double y, double z) { if (npc == null) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensEndermanNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensEndermanNPC.java index ce18c3780..7f9577eb6 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensEndermanNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensEndermanNPC.java @@ -87,16 +87,10 @@ public class CitizensEndermanNPC extends CitizensMobNPC implements Equipable { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bi() { super.bi(); @@ -114,15 +108,6 @@ public class CitizensEndermanNPC extends CitizensMobNPC implements Equipable { } } - @Override - public void collide(net.minecraft.server.Entity entity) { - // this method is called by both the entities involved - cancelling - // it will not stop the NPC from moving. - super.collide(entity); - if (npc != null) - Util.callCollisionEvent(npc, entity); - } - @Override public void c() { if (npc == null) @@ -133,6 +118,15 @@ public class CitizensEndermanNPC extends CitizensMobNPC implements Equipable { } } + @Override + public void collide(net.minecraft.server.Entity entity) { + // this method is called by both the entities involved - cancelling + // it will not stop the NPC from moving. + super.collide(entity); + if (npc != null) + Util.callCollisionEvent(npc, entity); + } + @Override public void g(double x, double y, double z) { if (npc == null) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensGhastNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensGhastNPC.java index f4f28fd03..ed2236d92 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensGhastNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensGhastNPC.java @@ -40,16 +40,10 @@ public class CitizensGhastNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bk() { if (npc != null) diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensGiantNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensGiantNPC.java index a10f1cde2..154d8d654 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensGiantNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensGiantNPC.java @@ -31,21 +31,19 @@ public class CitizensGiantNPC extends CitizensMobNPC { public static class EntityGiantNPC extends EntityGiantZombie implements NPCHolder { private final CitizensNPC npc; + public EntityGiantNPC(World world) { + this(world, null); + } + public EntityGiantNPC(World world, NPC npc) { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bk() { if (npc == null) diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensIronGolemNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensIronGolemNPC.java index 78205e214..04e3cbf30 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensIronGolemNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensIronGolemNPC.java @@ -31,21 +31,19 @@ public class CitizensIronGolemNPC extends CitizensMobNPC { public static class EntityIronGolemNPC extends EntityIronGolem implements NPCHolder { private final CitizensNPC npc; + public EntityIronGolemNPC(World world) { + this(world, null); + } + public EntityIronGolemNPC(World world, NPC npc) { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bi() { super.bi(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensMagmaCubeNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensMagmaCubeNPC.java index 03e8285df..9d5702f6b 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensMagmaCubeNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensMagmaCubeNPC.java @@ -41,15 +41,10 @@ public class CitizensMagmaCubeNPC extends CitizensMobNPC { if (npc != null) { setSize(3); NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } @Override public void bi() { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensMushroomCowNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensMushroomCowNPC.java index 7ee378f69..2ebb78ecd 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensMushroomCowNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensMushroomCowNPC.java @@ -40,6 +40,7 @@ public class CitizensMushroomCowNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensOcelotNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensOcelotNPC.java index 61e62e581..7854bc7b0 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensOcelotNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensOcelotNPC.java @@ -40,16 +40,10 @@ public class CitizensOcelotNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bi() { super.bi(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensPigNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensPigNPC.java index 8e4655450..3f16a5287 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensPigNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensPigNPC.java @@ -64,6 +64,7 @@ public class CitizensPigNPC extends CitizensMobNPC implements Equipable { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensPigZombieNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensPigZombieNPC.java index 1a2e54ac4..193ea0f57 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensPigZombieNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensPigZombieNPC.java @@ -40,16 +40,10 @@ public class CitizensPigZombieNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bi() { super.bi(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensSheepNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensSheepNPC.java index c4c21ff82..9e19adcb1 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensSheepNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensSheepNPC.java @@ -69,6 +69,7 @@ public class CitizensSheepNPC extends CitizensMobNPC implements Equipable { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensSilverfishNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensSilverfishNPC.java index 50d3f4396..b262da526 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensSilverfishNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensSilverfishNPC.java @@ -40,16 +40,10 @@ public class CitizensSilverfishNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bi() { super.bi(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensSkeletonNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensSkeletonNPC.java index ea4472ccb..66ed7406d 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensSkeletonNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensSkeletonNPC.java @@ -40,16 +40,10 @@ public class CitizensSkeletonNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bi() { super.bi(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensSlimeNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensSlimeNPC.java index 687fcc8ea..98bd3cecf 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensSlimeNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensSlimeNPC.java @@ -41,16 +41,10 @@ public class CitizensSlimeNPC extends CitizensMobNPC { if (npc != null) { setSize(3); NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bi() { super.bi(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensSnowmanNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensSnowmanNPC.java index 79e49834b..b03d80332 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensSnowmanNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensSnowmanNPC.java @@ -31,21 +31,19 @@ public class CitizensSnowmanNPC extends CitizensMobNPC { public static class EntitySnowmanNPC extends EntitySnowman implements NPCHolder { private final CitizensNPC npc; + public EntitySnowmanNPC(World world) { + this(world, null); + } + public EntitySnowmanNPC(World world, NPC npc) { super(world); this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bi() { super.bi(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensSpiderNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensSpiderNPC.java index 9a2fe68f7..3f555f851 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensSpiderNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensSpiderNPC.java @@ -39,16 +39,10 @@ public class CitizensSpiderNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bi() { super.bi(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensSquidNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensSquidNPC.java index 24d01df5b..942b1523c 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensSquidNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensSquidNPC.java @@ -40,16 +40,10 @@ public class CitizensSquidNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bk() { if (npc != null) diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensVillagerNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensVillagerNPC.java index 4331b2b34..48334578d 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensVillagerNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensVillagerNPC.java @@ -41,16 +41,10 @@ public class CitizensVillagerNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bi() { super.bi(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensWitchNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensWitchNPC.java index c94c8a6f1..b5e0e9f0d 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensWitchNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensWitchNPC.java @@ -27,20 +27,6 @@ public class CitizensWitchNPC extends CitizensMobNPC { return (Witch) super.getBukkitEntity(); } - public static class WitchNPC extends CraftWitch implements NPCHolder { - private final CitizensNPC npc; - - public WitchNPC(EntityWitchNPC entity) { - super((CraftServer) Bukkit.getServer(), entity); - this.npc = entity.npc; - } - - @Override - public NPC getNPC() { - return npc; - } - } - public static class EntityWitchNPC extends EntityWitch implements NPCHolder { private final CitizensNPC npc; @@ -53,6 +39,7 @@ public class CitizensWitchNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } @@ -106,4 +93,18 @@ public class CitizensWitchNPC extends CitizensMobNPC { return npc; } } + + public static class WitchNPC extends CraftWitch implements NPCHolder { + private final CitizensNPC npc; + + public WitchNPC(EntityWitchNPC entity) { + super((CraftServer) Bukkit.getServer(), entity); + this.npc = entity.npc; + } + + @Override + public NPC getNPC() { + return npc; + } + } } diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensWitherNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensWitherNPC.java index f17eaf2b9..6f1b6da7f 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensWitherNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensWitherNPC.java @@ -27,20 +27,6 @@ public class CitizensWitherNPC extends CitizensMobNPC { return (Wither) super.getBukkitEntity(); } - public static class WitherNPC extends CraftWither implements NPCHolder { - private final CitizensNPC npc; - - public WitherNPC(EntityWitherNPC entity) { - super((CraftServer) Bukkit.getServer(), entity); - this.npc = entity.npc; - } - - @Override - public NPC getNPC() { - return npc; - } - } - public static class EntityWitherNPC extends EntityWither implements NPCHolder { private final CitizensNPC npc; @@ -53,6 +39,7 @@ public class CitizensWitherNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } @@ -63,6 +50,12 @@ public class CitizensWitherNPC extends CitizensMobNPC { npc.update(); } + @Override + public void c() { + if (npc == null) + super.c(); + } + @Override public void collide(net.minecraft.server.Entity entity) { // this method is called by both the entities involved - cancelling @@ -105,11 +98,19 @@ public class CitizensWitherNPC extends CitizensMobNPC { public NPC getNPC() { return npc; } + } + + public static class WitherNPC extends CraftWither implements NPCHolder { + private final CitizensNPC npc; + + public WitherNPC(EntityWitherNPC entity) { + super((CraftServer) Bukkit.getServer(), entity); + this.npc = entity.npc; + } @Override - public void c() { - if (npc == null) - super.c(); + public NPC getNPC() { + return npc; } } } \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensWolfNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensWolfNPC.java index b415156eb..b980ccbe8 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensWolfNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensWolfNPC.java @@ -40,16 +40,10 @@ public class CitizensWolfNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bi() { super.bi(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensZombieNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensZombieNPC.java index afa26d95e..f2b6f3bf7 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensZombieNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensZombieNPC.java @@ -40,16 +40,10 @@ public class CitizensZombieNPC extends CitizensMobNPC { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); + NMS.setPersistent(this); } } - @Override - public void bh() { - if (npc == null) - super.bh(); - // check despawn method, we only want to despawn on chunk unload. - } - @Override public void bi() { super.bi(); diff --git a/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java b/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java index bf450b02c..83e07006d 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java @@ -84,27 +84,6 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder { return npc; } - @Override - public void j_() { - super.j_(); - if (npc == null) - return; - Navigation navigation = getNavigation(); - if (Math.abs(motX) < EPSILON && Math.abs(motY) < EPSILON && Math.abs(motZ) < EPSILON) - motX = motY = motZ = 0; - - if (!navigation.f()) { - navigation.e(); - moveOnCurrentHeading(); - } else if (motX != 0 || motZ != 0 || motY != 0) - e(0, 0); // is this necessary? it does gravity/controllable but - // sometimes players sink into the ground - - if (noDamageTicks > 0) - --noDamageTicks; - npc.update(); - } - private void initialise(MinecraftServer minecraftServer) { Socket socket = new EmptySocket(); NetworkManager netMgr = null; @@ -131,6 +110,27 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder { } } + @Override + public void j_() { + super.j_(); + if (npc == null) + return; + Navigation navigation = getNavigation(); + if (Math.abs(motX) < EPSILON && Math.abs(motY) < EPSILON && Math.abs(motZ) < EPSILON) + motX = motY = motZ = 0; + + if (!navigation.f()) { + navigation.e(); + moveOnCurrentHeading(); + } else if (motX != 0 || motZ != 0 || motY != 0) + e(0, 0); // is this necessary? it does gravity/controllable but + // sometimes players sink into the ground + + if (noDamageTicks > 0) + --noDamageTicks; + npc.update(); + } + private void moveOnCurrentHeading() { getControllerMove().c(); getControllerLook().a(); diff --git a/src/main/java/net/citizensnpcs/trait/Anchors.java b/src/main/java/net/citizensnpcs/trait/Anchors.java index 0a31ec933..2b77e731c 100644 --- a/src/main/java/net/citizensnpcs/trait/Anchors.java +++ b/src/main/java/net/citizensnpcs/trait/Anchors.java @@ -6,9 +6,9 @@ import java.util.List; import net.citizensnpcs.api.exception.NPCLoadException; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.util.DataKey; +import net.citizensnpcs.util.Anchor; import net.citizensnpcs.util.Messages; import net.citizensnpcs.util.Messaging; -import net.citizensnpcs.util.Anchor; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -44,7 +44,8 @@ public class Anchors extends Trait { for (DataKey sub : key.getRelative("list").getIntegerSubKeys()) try { String[] parts = sub.getString("").split(";"); - anchors.add(new Anchor(parts[0], new Location(Bukkit.getServer().getWorld(parts[1]), Double.valueOf(parts[2]), Double.valueOf(parts[3]), Double.valueOf(parts[4])))); + anchors.add(new Anchor(parts[0], new Location(Bukkit.getServer().getWorld(parts[1]), Double + .valueOf(parts[2]), Double.valueOf(parts[3]), Double.valueOf(parts[4])))); } catch (NumberFormatException e) { Messaging.logTr(Messages.SKIPPING_INVALID_ANCHOR, sub.name(), e.getMessage()); } diff --git a/src/main/java/net/citizensnpcs/util/Messages.java b/src/main/java/net/citizensnpcs/util/Messages.java index d650c1aa4..4a1d6510f 100644 --- a/src/main/java/net/citizensnpcs/util/Messages.java +++ b/src/main/java/net/citizensnpcs/util/Messages.java @@ -60,6 +60,7 @@ public class Messages { public static final String ERROR_GETTING_ID_MAPPING = "citizens.nms-errors.getting-id-mapping"; public static final String ERROR_INITALISING_SUB_PLUGIN = "citizens.sub-plugins.error-on-load"; public static final String ERROR_LOADING_ECONOMY = "citizens.economy.error-loading"; + public static final String ERROR_SETTING_ENTITY_PERSISTENT = "citizens.nms-errors.error-setting-persistent"; public static final String ERROR_SPAWNING_CUSTOM_ENTITY = "citizens.nms-errors.spawning-custom-entity"; public static final String ERROR_STOPPING_NETWORK_THREADS = "citizens.nms-errors.stopping-network-threads"; public static final String ERROR_UPDATING_NAVIGATION_WORLD = "citizens.nms-errors.updating-navigation-world"; diff --git a/src/main/java/net/citizensnpcs/util/NMS.java b/src/main/java/net/citizensnpcs/util/NMS.java index 1f8242308..302095c6f 100644 --- a/src/main/java/net/citizensnpcs/util/NMS.java +++ b/src/main/java/net/citizensnpcs/util/NMS.java @@ -42,6 +42,7 @@ public class NMS { private static final Map MOVEMENT_SPEEDS = Maps.newEnumMap(EntityType.class); private static Field NAVIGATION_WORLD_FIELD; private static Field PATHFINDING_RANGE; + private static Field PERSISTENT_FIELD; private static Field SPEED_FIELD; private static Field THREAD_STOPPER; @@ -171,6 +172,16 @@ public class NMS { } } + public static void setPersistent(EntityLiving entity) { + if (PERSISTENT_FIELD == null) + return; + try { + PERSISTENT_FIELD.set(entity, true); + } catch (Exception e) { + Messaging.logTr(Messages.ERROR_SETTING_ENTITY_PERSISTENT, e.getMessage()); + } + } + public static org.bukkit.entity.Entity spawnCustomEntity(org.bukkit.World world, Location at, Class clazz, EntityType type) { World handle = ((CraftWorld) world).getHandle(); @@ -259,6 +270,7 @@ public class NMS { NAVIGATION_WORLD_FIELD = getField(Navigation.class, "b"); PATHFINDING_RANGE = getField(Navigation.class, "e"); GOAL_FIELD = getField(PathfinderGoalSelector.class, "a"); + PERSISTENT_FIELD = getField(EntityLiving.class, "persistent"); try { Field field = getField(EntityTypes.class, "d"); diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties index 3e40312f2..8f30a2354 100644 --- a/src/main/resources/messages_en.properties +++ b/src/main/resources/messages_en.properties @@ -1,6 +1,7 @@ citizens.changed-implementation=Citizens implementation changed, disabling plugin. citizens.commands.citizens.save.help=Use the -a flag to save async (off the main server thread). citizens.commands.console-error=Please report this error: [See console] +citizens.commands.errors.missing-world=World not found. citizens.commands.help.command-missing=Command /{0} not found. citizens.commands.help.header=Help citizens.commands.id-not-found=Couldn''t find any NPC with ID {0}. @@ -41,7 +42,6 @@ citizens.commands.npc.lookclose.set=[[{0}]] will now rotate when players are nea citizens.commands.npc.lookclose.stopped=[[{0}]] will no longer rotate when players are nearby. citizens.commands.npc.mount.failed=Couldn''t mount [[{0}]]. citizens.commands.npc.moveto.format=Format is x:y:z(:world) or x y z( world). -citizens.commands.errors.missing-world=World not found. citizens.commands.npc.moveto.teleported=[[{0}]] teleported to {1}. citizens.commands.npc.owner.already-owner={0} is already the owner of {1}. citizens.commands.npc.owner.owner=[[{0}]]''s owner is [[{1}]]. @@ -77,14 +77,14 @@ citizens.commands.npc.tphere.teleported=[[{0}]] was teleported to your location. citizens.commands.npc.vulnerable.set=[[{0}]] is now vulnerable. citizens.commands.npc.vulnerable.stopped=[[{0}]] is no longer vulnerable. citizens.commands.page-missing=The page [[{0}]] does not exist. -citizens.commands.requirements.too-few-arguments=Too few arguments. -citizens.commands.requirements.too-many-arguments=Too many arguments. -citizens.commands.requirements.missing-permission=You don't have permission to execute that command. citizens.commands.requirements.disallowed-mobtype=The NPC cannot be the mob type {0} to use that command. +citizens.commands.requirements.missing-permission=You don't have permission to execute that command. citizens.commands.requirements.missing-required-trait=Missing required trait {0}. citizens.commands.requirements.must-be-ingame=You must be ingame to use that command. citizens.commands.requirements.must-be-owner=You must be the owner of this NPC to execute that command. citizens.commands.requirements.must-have-selected=You must have an NPC selected to execute that command. +citizens.commands.requirements.too-few-arguments=Too few arguments. +citizens.commands.requirements.too-many-arguments=Too many arguments. citizens.commands.script.compiled=Script compiled. citizens.commands.script.compiling=Script compiling... citizens.commands.script.file-missing=The file {0} doesn''t exist! @@ -134,21 +134,6 @@ citizens.editors.text.realistic-looking-set=[[Realistic looking]] set to [[{0}]] citizens.editors.text.remove-prompt=Enter the index of the entry you wish to remove or [[page]] to view more pages. citizens.editors.text.removed-entry=[[Removed]] entry at index [[{0}]]. citizens.editors.text.start-prompt=Type [[add]] to add an entry, [[edit]] to edit entries, [[remove]] to remove entries, [[close]] to toggle the NPC as a close talker, and [[random]] to toggle the NPC as a random talker. Type [[help]] to show this again. -citizens.editors.waypoints.triggers.chat.prompt=Enter in chat lines to say.
Type in [[radius (radius)]] to set the block radius to broadcast the messages.
Type [[finish]] to finish the chat trigger or [[back]] to return to the previous prompt. -citizens.editors.waypoints.triggers.remove.not-a-number=Index must be a number. -citizens.editors.waypoints.triggers.chat.missing-radius=No radius supplied. -citizens.editors.waypoints.triggers.chat.invalid-radius=The radius must be a number. -citizens.editors.waypoints.triggers.remove.removed=Successfully removed trigger {0}. -citizens.editors.waypoints.triggers.remove.index-out-of-range=Index must be in the range [[1-{0}]]. -citizens.editors.waypoints.triggers.remove.prompt=Enter in the index of the trigger to delete or [[back]] to return to the edit prompt. Current triggers are: -citizens.editors.waypoints.triggers.teleport.prompt=Enter the destination in the format world:x:y:z. Type [[here]] to use your current location. Type [[back]] to return to the edit prompt. -citizens.editors.waypoints.triggers.teleport.invalid-format=Invalid location given. Format is [[world]]:[[x]]:[[y]]:[[z]]. -citizens.editors.waypoints.triggers.delay.prompt=Enter the delay in [[server ticks]] to use. (20 ticks = 1 second) -citizens.editors.waypoints.triggers.main.prompt=Entered the waypoint trigger editor.
Type [[add]] to begin adding triggers and [[remove]] to remove triggers.

Current triggers are: -citizens.editors.waypoints.triggers.main.missing-waypoint=Not editing a waypoint. -citizens.editors.waypoints.triggers.add.added=[[Added]] waypoint trigger successfully ({0}). -citizens.editors.waypoints.triggers.add.invalid-trigger=Couldn''t create a trigger by the name [[{0}]]. -citizens.editors.waypoints.triggers.add.prompt=Enter in a trigger name to add or type [[back]] to return to the edit prompt. Valid trigger names are {0}. citizens.editors.waypoints.linear.added-waypoint=[[Added]] a waypoint at ({0}) ([[{1}]], [[{2}]]) citizens.editors.waypoints.linear.begin=Entered the linear waypoint editor!
[[Left click]] to add a waypoint, [[right click]] to remove.
Type [[toggle path]] to toggle showing entities at waypoints. citizens.editors.waypoints.linear.edit-slot-set=Editing slot set to [[{0}]] ({1}). @@ -157,9 +142,25 @@ citizens.editors.waypoints.linear.not-showing-markers=[[Stopped]] showing waypoi citizens.editors.waypoints.linear.range-exceeded=Previous waypoint is {0} blocks away but the distance limit is {1}. citizens.editors.waypoints.linear.removed-waypoint=[[Removed]] a waypoint ([[{0}]] remaining) ([[{1}]]) citizens.editors.waypoints.linear.showing-markers=[[Showing]] waypoint markers. +citizens.editors.waypoints.triggers.add.added=[[Added]] waypoint trigger successfully ({0}). +citizens.editors.waypoints.triggers.add.invalid-trigger=Couldn''t create a trigger by the name [[{0}]]. +citizens.editors.waypoints.triggers.add.prompt=Enter in a trigger name to add or type [[back]] to return to the edit prompt. Valid trigger names are {0}. +citizens.editors.waypoints.triggers.chat.invalid-radius=The radius must be a number. +citizens.editors.waypoints.triggers.chat.missing-radius=No radius supplied. +citizens.editors.waypoints.triggers.chat.prompt=Enter in chat lines to say.
Type in [[radius (radius)]] to set the block radius to broadcast the messages.
Type [[finish]] to finish the chat trigger or [[back]] to return to the previous prompt. +citizens.editors.waypoints.triggers.delay.prompt=Enter the delay in [[server ticks]] to use. (20 ticks = 1 second) +citizens.editors.waypoints.triggers.main.missing-waypoint=Not editing a waypoint. +citizens.editors.waypoints.triggers.main.prompt=Entered the waypoint trigger editor.
Type [[add]] to begin adding triggers and [[remove]] to remove triggers.

Current triggers are: +citizens.editors.waypoints.triggers.remove.index-out-of-range=Index must be in the range [[1-{0}]]. +citizens.editors.waypoints.triggers.remove.not-a-number=Index must be a number. +citizens.editors.waypoints.triggers.remove.prompt=Enter in the index of the trigger to delete or [[back]] to return to the edit prompt. Current triggers are: +citizens.editors.waypoints.triggers.remove.removed=Successfully removed trigger {0}. +citizens.editors.waypoints.triggers.teleport.invalid-format=Invalid location given. Format is [[world]]:[[x]]:[[y]]:[[z]]. +citizens.editors.waypoints.triggers.teleport.prompt=Enter the destination in the format world:x:y:z. Type [[here]] to use your current location. Type [[back]] to return to the edit prompt. citizens.limits.over-npc-limt=Over the NPC limit of {0}. citizens.load-task-error=NPC load task couldn''t be scheduled, disabling... citizens.nms-errors.clearing-goals=Could not clear goals: {0}. +citizens.nms-errors.error-setting-persistent=Could not set NPC as persistent: {0}. NPC entity may despawn. citizens.nms-errors.getting-field=Could not fetch field {0}: {1}. citizens.nms-errors.getting-id-mapping=Could not fetch entity id mapping fields: {0}. citizens.nms-errors.spawning-custom-entity=Could not spawn custom entity: {0}.