package org.bukkit.craftbukkit.entity;
import org.apache.commons.lang.Validate;
import org.bukkit.Rotation;
import org.bukkit.block.BlockFace;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.ItemFrame;
public class CraftItemFrame extends CraftHanging implements ItemFrame
{
public CraftItemFrame(CraftServer server, net.minecraft.entity.item.EntityItemFrame entity)
{
super(server, entity);
}
public boolean setFacingDirection(BlockFace face, boolean force)
{
if(!super.setFacingDirection(face, force))
{
return false;
}
net.minecraft.world.WorldServer world = ((CraftWorld) this.getWorld()).getHandle();
world.getEntityTracker().removeEntityFromAllTrackingPlayers(this.getHandle());
world.getEntityTracker().addEntityToTracker(this.getHandle());
return true;
}
public void setItem(org.bukkit.inventory.ItemStack item)
{
if(item == null || item.getTypeId() == 0)
{
getHandle().getDataWatcher().addObjectByDataType(2, 5);
getHandle().getDataWatcher().setObjectWatched(2);
}
else
{
getHandle().setDisplayedItem(CraftItemStack.asNMSCopy(item));
}
}
public org.bukkit.inventory.ItemStack getItem()
{
return CraftItemStack.asBukkitCopy(getHandle().getDisplayedItem());
}
public Rotation getRotation()
{
return toBukkitRotation(getHandle().getRotation());
}
Rotation toBukkitRotation(int value)
{
// Translate NMS rotation integer to Bukkit API
switch(value)
{
case 0:
return Rotation.NONE;
case 1:
return Rotation.CLOCKWISE;
case 2:
return Rotation.FLIPPED;
case 3:
return Rotation.COUNTER_CLOCKWISE;
default:
throw new AssertionError("Unknown rotation " + value + " for " + getHandle());
}
}
public void setRotation(Rotation rotation)
{
Validate.notNull(rotation, "Rotation cannot be null");
getHandle().setItemRotation(toInteger(rotation));
}
static int toInteger(Rotation rotation)
{
// Translate Bukkit API rotation to NMS integer
switch(rotation)
{
case NONE:
return 0;
case CLOCKWISE:
return 1;
case FLIPPED:
return 2;
case COUNTER_CLOCKWISE:
return 3;
default:
throw new IllegalArgumentException(rotation + " is not applicable to an ItemFrame");
}
}
@Override
public net.minecraft.entity.item.EntityItemFrame getHandle()
{
return (net.minecraft.entity.item.EntityItemFrame) entity;
}
@Override
public String toString()
{
return "CraftItemFrame{item=" + getItem() + ", rotation=" + getRotation() + "}";
}
public EntityType getType()
{
return EntityType.ITEM_FRAME;
}
}