summaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
authormd_5 <git@md-5.net>2017-01-02 15:29:11 +1100
committermd_5 <git@md-5.net>2017-01-02 15:29:11 +1100
commita6d8fa2eac1d7a51c70229f84edea9ea90ba4fd0 (patch)
treea3d24d62a27e83c75dd98282ae17dfc9b94a4888 /src/main
parentbf8303f25d6dade92fa287831f0c4d888635e1a1 (diff)
downloadcraftbukkit-a6d8fa2eac1d7a51c70229f84edea9ea90ba4fd0.tar
craftbukkit-a6d8fa2eac1d7a51c70229f84edea9ea90ba4fd0.tar.gz
craftbukkit-a6d8fa2eac1d7a51c70229f84edea9ea90ba4fd0.tar.lz
craftbukkit-a6d8fa2eac1d7a51c70229f84edea9ea90ba4fd0.tar.xz
craftbukkit-a6d8fa2eac1d7a51c70229f84edea9ea90ba4fd0.zip
Recover spawn egg data from UNSPECIFIC meta.
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java14
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java16
2 files changed, 26 insertions, 4 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
index bb764444..09e2d246 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
@@ -224,6 +224,7 @@ class CraftMetaItem implements ItemMeta, Repairable {
private static final Set<String> HANDLED_TAGS = Sets.newHashSet();
+ private NBTTagCompound internalTag;
private final Map<String, NBTBase> unhandledTags = new HashMap<String, NBTBase>();
CraftMetaItem(CraftMetaItem meta) {
@@ -245,6 +246,11 @@ class CraftMetaItem implements ItemMeta, Repairable {
this.hideFlag = meta.hideFlag;
this.unbreakable = meta.unbreakable;
this.unhandledTags.putAll(meta.unhandledTags);
+
+ this.internalTag = meta.internalTag;
+ if (this.internalTag != null) {
+ deserializeInternal(internalTag);
+ }
}
CraftMetaItem(NBTTagCompound tag) {
@@ -388,12 +394,12 @@ class CraftMetaItem implements ItemMeta, Repairable {
if (internal != null) {
ByteArrayInputStream buf = new ByteArrayInputStream(Base64.decodeBase64(internal));
try {
- NBTTagCompound tag = NBTCompressedStreamTools.a(buf);
- deserializeInternal(tag);
- Set<String> keys = tag.c();
+ internalTag = NBTCompressedStreamTools.a(buf);
+ deserializeInternal(internalTag);
+ Set<String> keys = internalTag.c();
for (String key : keys) {
if (!getHandledTags().contains(key)) {
- unhandledTags.put(key, tag.get(key));
+ unhandledTags.put(key, internalTag.get(key));
}
}
} catch (IOException ex) {
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java
index 22199ed7..b98c02ff 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSpawnEgg.java
@@ -3,7 +3,9 @@ package org.bukkit.craftbukkit.inventory;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap.Builder;
import java.util.Map;
+import net.minecraft.server.DataConverterTypes;
import net.minecraft.server.MinecraftKey;
+import net.minecraft.server.MinecraftServer;
import net.minecraft.server.NBTTagCompound;
import org.bukkit.Material;
import org.bukkit.configuration.serialization.DelegateDeserialization;
@@ -51,6 +53,20 @@ public class CraftMetaSpawnEgg extends CraftMetaItem implements SpawnEggMeta {
}
@Override
+ void deserializeInternal(NBTTagCompound tag) {
+ super.deserializeInternal(tag);
+
+ if (tag.hasKey(ENTITY_TAG.NBT)) {
+ entityTag = tag.getCompound(ENTITY_TAG.NBT);
+ MinecraftServer.getServer().getDataConverterManager().a(DataConverterTypes.ENTITY, entityTag); // PAIL: convert
+
+ if (entityTag.hasKey(ENTITY_ID.NBT)) {
+ this.spawnedType = EntityType.fromName(new MinecraftKey(entityTag.getString(ENTITY_ID.NBT)).a()); // PAIL: rename
+ }
+ }
+ }
+
+ @Override
void applyToItem(NBTTagCompound tag) {
super.applyToItem(tag);