Fix persistence on tamed pets. Fixes BUKKIT-3300

With the persistence api introduced, pets did not have their
persistence flag updated to reflect their persistence. This caused
tame ocelots to not persist under specific conditions.
This commit is contained in:
feildmaster 2012-12-28 20:27:41 -06:00
parent 509e3d2a32
commit 538de63a03
3 changed files with 10 additions and 2 deletions

View File

@ -30,7 +30,7 @@ import org.bukkit.plugin.PluginManager;
public abstract class Entity {
// CraftBukkit start
private static final int CURRENT_LEVEL = 1;
private static final int CURRENT_LEVEL = 2;
static boolean isLevelAtLeast(NBTTagCompound tag, int level) {
return tag.hasKey("Bukkit.updateLevel") && tag.getInt("Bukkit.updateLevel") >= level;
}
@ -1162,6 +1162,11 @@ public abstract class Entity {
if (!nbttagcompound.hasKey("Bukkit.MaxHealth")) {
entity.maxHealth = entity.getMaxHealth();
}
// Reset the persistence for tamed animals
if (entity instanceof EntityTameableAnimal && !isLevelAtLeast(nbttagcompound, 2) && !nbttagcompound.getBoolean("PersistenceRequired")) {
entity.persistent = !entity.bj();
}
}
// CraftBukkit end

View File

@ -76,7 +76,8 @@ public class EntityWolf extends EntityTameableAnimal {
}
protected boolean bj() {
return this.isAngry();
// CraftBukkit - added && !this.isTamed()
return this.isAngry() && !this.isTamed();
}
protected String aY() {

View File

@ -236,6 +236,8 @@ public class CraftEventFactory {
org.bukkit.entity.AnimalTamer bukkitTamer = (tamer != null ? (AnimalTamer) tamer.getBukkitEntity() : null);
CraftServer craftServer = (CraftServer) bukkitEntity.getServer();
entity.persistent = true;
EntityTameEvent event = new EntityTameEvent((LivingEntity) bukkitEntity, bukkitTamer);
craftServer.getPluginManager().callEvent(event);
return event;