summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
authormd_5 <git@md-5.net>2016-12-07 10:44:57 +1100
committermd_5 <git@md-5.net>2016-12-07 10:44:57 +1100
commit0fa1ad23ed52d1d5b8bcc8ca73783d11a56b93cb (patch)
tree68e4c095992fc2fdba35aab0524e0d4a35efca8b /src/main/java
parent58bff62b2dc68da958f2e90371582a13aa3c9355 (diff)
downloadcraftbukkit-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/java')
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java20
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;
}