package net.minecraft.server;
public class BlockShulkerBox extends BlockTileEntity {
public static final BlockStateEnum<EnumDirection> a = BlockStateDirection.of("facing");
public final EnumColor b; // PAIL: public, rename
public BlockShulkerBox(EnumColor enumcolor) {
super(Material.STONE, MaterialMapColor.b);
this.b = enumcolor;
this.a(CreativeModeTab.c);
this.y(this.blockStateList.getBlockData().set(BlockShulkerBox.a, EnumDirection.UP));
}
public TileEntity a(World world, int i) {
return new TileEntityShulkerBox(this.b);
}
public boolean b(IBlockData iblockdata) {
return false;
}
public boolean u(IBlockData iblockdata) {
return true;
}
public boolean c(IBlockData iblockdata) {
return false;
}
public EnumRenderType a(IBlockData iblockdata) {
return EnumRenderType.ENTITYBLOCK_ANIMATED;
}
public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumHand enumhand, EnumDirection enumdirection, float f, float f1, float f2) {
if (world.isClientSide) {
return true;
} else if (entityhuman.isSpectator()) {
return true;
} else {
TileEntity tileentity = world.getTileEntity(blockposition);
if (tileentity instanceof TileEntityShulkerBox) {
EnumDirection enumdirection1 = (EnumDirection) iblockdata.get(BlockShulkerBox.a);
boolean flag;
if (((TileEntityShulkerBox) tileentity).p() == TileEntityShulkerBox.AnimationPhase.CLOSED) {
AxisAlignedBB axisalignedbb = BlockShulkerBox.j.b((double) (0.5F * (float) enumdirection1.getAdjacentX()), (double) (0.5F * (float) enumdirection1.getAdjacentY()), (double) (0.5F * (float) enumdirection1.getAdjacentZ())).a((double) enumdirection1.getAdjacentX(), (double) enumdirection1.getAdjacentY(), (double) enumdirection1.getAdjacentZ());
flag = !world.a(axisalignedbb.a(blockposition.shift(enumdirection1)));
} else {
flag = true;
}
if (flag) {
entityhuman.b(StatisticList.ac);
entityhuman.openContainer((IInventory) tileentity);
}
return true;
} else {
return false;
}
}
}
public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) {
return this.getBlockData().set(BlockShulkerBox.a, enumdirection);
}
protected BlockStateList getStateList() {
return new BlockStateList(this, new IBlockState[] { BlockShulkerBox.a});
}
public int toLegacyData(IBlockData iblockdata) {
return ((EnumDirection) iblockdata.get(BlockShulkerBox.a)).a();
}
public IBlockData fromLegacyData(int i) {
EnumDirection enumdirection = EnumDirection.fromType1(i);
return this.getBlockData().set(BlockShulkerBox.a, enumdirection);
}
public void a(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman) {
TileEntityShulkerBox tileentityshulkerbox = (TileEntityShulkerBox) world.getTileEntity(blockposition);
tileentityshulkerbox.a(entityhuman.abilities.canInstantlyBuild);
tileentityshulkerbox.d(entityhuman);
}
// CraftBukkit start - override to prevent duplication when dropping
public void dropNaturally(World world, BlockPosition blockposition, IBlockData iblockdata, float f, int i) {
TileEntity tileentity = world.getTileEntity(blockposition);
if (tileentity instanceof TileEntityShulkerBox) {
TileEntityShulkerBox tileentityshulkerbox = (TileEntityShulkerBox) tileentity;
if (!tileentityshulkerbox.r() && tileentityshulkerbox.F()) {
ItemStack itemstack = new ItemStack(Item.getItemOf(this));
NBTTagCompound nbttagcompound = new NBTTagCompound();
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
nbttagcompound.set("BlockEntityTag", ((TileEntityShulkerBox) tileentity).f(nbttagcompound1));
itemstack.setTag(nbttagcompound);
if (tileentityshulkerbox.hasCustomName()) {
itemstack.g(tileentityshulkerbox.getName());
tileentityshulkerbox.a("");
}
a(world, blockposition, itemstack);
tileentityshulkerbox.clear(); // Paper - This was intended to be called in Vanilla (is checked in the if statement above if has been called) - Fixes dupe issues
}
world.updateAdjacentComparators(blockposition, iblockdata.getBlock());
}
}
// CraftBukkit end
public void postPlace(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving, ItemStack itemstack) {
if (itemstack.hasName()) {
TileEntity tileentity = world.getTileEntity(blockposition);
if (tileentity instanceof TileEntityShulkerBox) {
((TileEntityShulkerBox) tileentity).a(itemstack.getName());
}
}
}
public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) {
TileEntity tileentity = world.getTileEntity(blockposition);
if (false && tileentity instanceof TileEntityShulkerBox) { // CraftBukkit - moved up
TileEntityShulkerBox tileentityshulkerbox = (TileEntityShulkerBox) tileentity;
if (!tileentityshulkerbox.r() && tileentityshulkerbox.F()) {
ItemStack itemstack = new ItemStack(Item.getItemOf(this));
NBTTagCompound nbttagcompound = new NBTTagCompound();
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
nbttagcompound.set("BlockEntityTag", ((TileEntityShulkerBox) tileentity).f(nbttagcompound1));
itemstack.setTag(nbttagcompound);
if (tileentityshulkerbox.hasCustomName()) {
itemstack.g(tileentityshulkerbox.getName());
tileentityshulkerbox.a("");
}
a(world, blockposition, itemstack);
}
}
world.updateAdjacentComparators(blockposition, iblockdata.getBlock()); // CraftBukkit - moved down
super.remove(world, blockposition, iblockdata);
}
public EnumPistonReaction h(IBlockData iblockdata) {
return EnumPistonReaction.DESTROY;
}
public AxisAlignedBB b(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) {
TileEntity tileentity = iblockaccess.getTileEntity(blockposition);
return tileentity instanceof TileEntityShulkerBox ? ((TileEntityShulkerBox) tileentity).a(iblockdata) : BlockShulkerBox.j;
}
public boolean isComplexRedstone(IBlockData iblockdata) {
return true;
}
public int c(IBlockData iblockdata, World world, BlockPosition blockposition) {
return Container.b((IInventory) world.getTileEntity(blockposition));
}
public ItemStack a(World world, BlockPosition blockposition, IBlockData iblockdata) {
ItemStack itemstack = super.a(world, blockposition, iblockdata);
TileEntityShulkerBox tileentityshulkerbox = (TileEntityShulkerBox) world.getTileEntity(blockposition);
NBTTagCompound nbttagcompound = tileentityshulkerbox.f(new NBTTagCompound());
if (!nbttagcompound.isEmpty()) {
itemstack.a("BlockEntityTag", (NBTBase) nbttagcompound);
}
return itemstack;
}
public static Block a(EnumColor enumcolor) {
switch (enumcolor) {
case WHITE:
return Blocks.WHITE_SHULKER_BOX;
case ORANGE:
return Blocks.dm;
case MAGENTA:
return Blocks.dn;
case LIGHT_BLUE:
return Blocks.LIGHT_BLUE_SHULKER_BOX;
case YELLOW:
return Blocks.dp;
case LIME:
return Blocks.dq;
case PINK:
return Blocks.dr;
case GRAY:
return Blocks.ds;
case SILVER:
return Blocks.dt;
case CYAN:
return Blocks.du;
case PURPLE:
default:
return Blocks.dv;
case BLUE:
return Blocks.dw;
case BROWN:
return Blocks.dx;
case GREEN:
return Blocks.dy;
case RED:
return Blocks.dz;
case BLACK:
return Blocks.dA;
}
}
public static ItemStack b(EnumColor enumcolor) {
return new ItemStack(a(enumcolor));
}
public IBlockData a(IBlockData iblockdata, EnumBlockRotation enumblockrotation) {
return iblockdata.set(BlockShulkerBox.a, enumblockrotation.a((EnumDirection) iblockdata.get(BlockShulkerBox.a)));
}
public IBlockData a(IBlockData iblockdata, EnumBlockMirror enumblockmirror) {
return iblockdata.a(enumblockmirror.a((EnumDirection) iblockdata.get(BlockShulkerBox.a)));
}
}