summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java28
1 files changed, 23 insertions, 5 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java
index 82370939..d27f24f8 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java
@@ -1,6 +1,9 @@
package org.bukkit.craftbukkit.entity;
+import net.minecraft.server.BlockPosition;
import net.minecraft.server.EntityItemFrame;
+import net.minecraft.server.EnumDirection;
+import net.minecraft.server.ItemStack;
import net.minecraft.server.WorldServer;
import org.apache.commons.lang.Validate;
@@ -23,16 +26,31 @@ public class CraftItemFrame extends CraftHanging implements ItemFrame {
return false;
}
- WorldServer world = ((CraftWorld) this.getWorld()).getHandle();
- world.getTracker().untrackEntity(this.getHandle());
- world.getTracker().track(this.getHandle());
+ update();
+
return true;
}
+ private void update() {
+ EntityItemFrame old = this.getHandle();
+
+ WorldServer world = ((CraftWorld) getWorld()).getHandle();
+ BlockPosition position = old.getBlockPosition();
+ EnumDirection direction = old.getDirection();
+ ItemStack item = old.getItem() != null ? old.getItem().cloneItemStack() : null;
+
+ old.die();
+
+ EntityItemFrame frame = new EntityItemFrame(world,position,direction);
+ frame.setItem(item);
+ world.addEntity(frame);
+ this.entity = frame;
+ }
+
+
public void setItem(org.bukkit.inventory.ItemStack item) {
if (item == null || item.getTypeId() == 0) {
- getHandle().getDataWatcher().add(2, 5);
- getHandle().getDataWatcher().update(2);
+ getHandle().setItem(null);
} else {
getHandle().setItem(CraftItemStack.asNMSCopy(item));
}