diff options
author | md_5 <git@md-5.net> | 2016-12-07 10:44:57 +1100 |
---|---|---|
committer | md_5 <git@md-5.net> | 2016-12-07 10:44:57 +1100 |
commit | 0fa1ad23ed52d1d5b8bcc8ca73783d11a56b93cb (patch) | |
tree | 68e4c095992fc2fdba35aab0524e0d4a35efca8b /src/main | |
parent | 58bff62b2dc68da958f2e90371582a13aa3c9355 (diff) | |
download | craftbukkit-0fa1ad23ed52d1d5b8bcc8ca73783d11a56b93cb.tar craftbukkit-0fa1ad23ed52d1d5b8bcc8ca73783d11a56b93cb.tar.gz craftbukkit-0fa1ad23ed52d1d5b8bcc8ca73783d11a56b93cb.tar.lz craftbukkit-0fa1ad23ed52d1d5b8bcc8ca73783d11a56b93cb.tar.xz craftbukkit-0fa1ad23ed52d1d5b8bcc8ca73783d11a56b93cb.zip |
SPIGOT-2894: Preserve unreadable spawn egg data in memory
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java index fed91832..22199ed7 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java @@ -18,6 +18,7 @@ public class CraftMetaSpawnEgg extends CraftMetaItem implements SpawnEggMeta { static final ItemMetaKey ENTITY_ID = new ItemMetaKey("id"); private EntityType spawnedType; + private NBTTagCompound entityTag; CraftMetaSpawnEgg(CraftMetaItem meta) { super(meta); @@ -34,7 +35,7 @@ public class CraftMetaSpawnEgg extends CraftMetaItem implements SpawnEggMeta { super(tag); if (tag.hasKey(ENTITY_TAG.NBT)) { - NBTTagCompound entityTag = tag.getCompound(ENTITY_TAG.NBT); + entityTag = tag.getCompound(ENTITY_TAG.NBT); if (entityTag.hasKey(ENTITY_ID.NBT)) { this.spawnedType = EntityType.fromName(new MinecraftKey(entityTag.getString(ENTITY_ID.NBT)).a()); // PAIL: rename @@ -53,12 +54,15 @@ public class CraftMetaSpawnEgg extends CraftMetaItem implements SpawnEggMeta { void applyToItem(NBTTagCompound tag) { super.applyToItem(tag); + if (entityTag == null) { + entityTag = new NBTTagCompound(); + } + if (hasSpawnedType()) { - NBTTagCompound entityTag = new NBTTagCompound(); entityTag.setString(ENTITY_ID.NBT, new MinecraftKey(spawnedType.getName()).toString()); - - tag.set(ENTITY_TAG.NBT, entityTag); } + + tag.set(ENTITY_TAG.NBT, entityTag); } @Override @@ -77,7 +81,7 @@ public class CraftMetaSpawnEgg extends CraftMetaItem implements SpawnEggMeta { } boolean isSpawnEggEmpty() { - return !hasSpawnedType(); + return !(hasSpawnedType() || entityTag != null); } boolean hasSpawnedType() { @@ -104,7 +108,8 @@ public class CraftMetaSpawnEgg extends CraftMetaItem implements SpawnEggMeta { if (meta instanceof CraftMetaSpawnEgg) { CraftMetaSpawnEgg that = (CraftMetaSpawnEgg) meta; - return hasSpawnedType() ? that.hasSpawnedType() && this.spawnedType.equals(that.spawnedType) : !that.hasSpawnedType(); + return hasSpawnedType() ? that.hasSpawnedType() && this.spawnedType.equals(that.spawnedType) : !that.hasSpawnedType() + && entityTag != null ? that.entityTag != null && this.entityTag.equals(that.entityTag) : entityTag == null; } return true; } @@ -122,6 +127,9 @@ public class CraftMetaSpawnEgg extends CraftMetaItem implements SpawnEggMeta { if (hasSpawnedType()) { hash = 73 * hash + spawnedType.hashCode(); } + if (entityTag != null) { + hash = 73 * hash + entityTag.hashCode(); + } return original != hash ? CraftMetaSpawnEgg.class.hashCode() ^ hash : hash; } |