87 lines
3.0 KiB
Java
Executable File
87 lines
3.0 KiB
Java
Executable File
/*******************************************************************************
|
|
* Copyright (c) 2012 cpw.
|
|
* All rights reserved. This program and the accompanying materials
|
|
* are made available under the terms of the GNU Public License v3.0
|
|
* which accompanies this distribution, and is available at
|
|
* http://www.gnu.org/licenses/gpl.html
|
|
*
|
|
* Contributors:
|
|
* cpw - initial API and implementation
|
|
******************************************************************************/
|
|
package cpw.mods.ironchest;
|
|
|
|
import net.minecraft.creativetab.CreativeTabs;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraft.tileentity.TileEntityChest;
|
|
import net.minecraft.util.BlockPos;
|
|
import net.minecraft.util.EnumFacing;
|
|
import net.minecraft.world.World;
|
|
|
|
public class ItemChestChanger extends Item
|
|
{
|
|
private ChestChangerType type;
|
|
|
|
public ItemChestChanger(ChestChangerType type)
|
|
{
|
|
this.type = type;
|
|
|
|
this.setMaxStackSize(1);
|
|
this.setUnlocalizedName("ironchest:" + type.name());
|
|
this.setCreativeTab(CreativeTabs.tabMisc);
|
|
}
|
|
|
|
@Override
|
|
public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ)
|
|
{
|
|
if (world.isRemote) return false;
|
|
TileEntity te = world.getTileEntity(pos);
|
|
TileEntityIronChest newchest = new TileEntityIronChest();
|
|
ItemStack[] chestContents = new ItemStack[27];
|
|
if (te != null) {
|
|
if (te instanceof TileEntityIronChest) {
|
|
chestContents = ((TileEntityIronChest) te).chestContents;
|
|
newchest = IronChestType.makeEntity(this.getTargetChestOrdinal(this.type.ordinal()));
|
|
if (newchest == null) return false;
|
|
} else if (te instanceof TileEntityChest) {
|
|
if (((TileEntityChest) te).numPlayersUsing > 0) return false;
|
|
if (!getType().canUpgrade(IronChestType.WOOD)) return false;
|
|
chestContents = new ItemStack[((TileEntityChest) te).getSizeInventory()];
|
|
for (int i = 0; i < chestContents.length; i ++) chestContents[i] = ((TileEntityChest) te).getStackInSlot(i);
|
|
newchest = IronChestType.makeEntity(IronChestType.IRON.ordinal());
|
|
}
|
|
}
|
|
|
|
te.updateContainingBlockInfo();
|
|
if (te instanceof TileEntityChest) ((TileEntityChest) te).checkForAdjacentChests();
|
|
|
|
world.removeTileEntity(pos);
|
|
world.setBlockToAir(pos);
|
|
|
|
world.setTileEntity(pos, newchest);
|
|
world.setBlockState(pos, IronChest.ironChestBlock.getStateFromMeta(newchest.getType().ordinal()), 3);
|
|
|
|
world.markBlockForUpdate(pos);
|
|
|
|
TileEntity te2 = world.getTileEntity(pos);
|
|
if (te2 instanceof TileEntityIronChest) {
|
|
((TileEntityIronChest) te2).setContents(chestContents);
|
|
}
|
|
|
|
stack.stackSize = player.capabilities.isCreativeMode ? stack.stackSize : stack.stackSize - 1;
|
|
return true;
|
|
}
|
|
|
|
public int getTargetChestOrdinal(int sourceOrdinal)
|
|
{
|
|
return type.getTarget();
|
|
}
|
|
|
|
public ChestChangerType getType()
|
|
{
|
|
return type;
|
|
}
|
|
}
|