package com.carpentersblocks.block;
import java.util.Random;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import com.carpentersblocks.CarpentersBlocks;
import com.carpentersblocks.data.Hinge;
import com.carpentersblocks.tileentity.TEBase;
import com.carpentersblocks.util.registry.BlockRegistry;
import com.carpentersblocks.util.registry.IconRegistry;
import com.carpentersblocks.util.registry.ItemRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class BlockCarpentersDoor extends BlockHinged {
public final static String type[] = { "glassTop", "glassTall", "panel", "screenTall", "french", "hidden" };
public BlockCarpentersDoor(Material material)
{
super(material);
}
@SideOnly(Side.CLIENT)
@Override
/**
* When this method is called, your block should register all the icons it needs with the given IconRegister. This
* is the only chance you get to register icons.
*/
public void registerBlockIcons(IIconRegister iconRegister)
{
IconRegistry.icon_door_screen_tall = iconRegister.registerIcon(CarpentersBlocks.MODID + ":" + "door/door_screen_tall" );
IconRegistry.icon_door_glass_tall_top = iconRegister.registerIcon(CarpentersBlocks.MODID + ":" + "door/door_glass_tall_top" );
IconRegistry.icon_door_glass_tall_bottom = iconRegister.registerIcon(CarpentersBlocks.MODID + ":" + "door/door_glass_tall_bottom" );
IconRegistry.icon_door_glass_top = iconRegister.registerIcon(CarpentersBlocks.MODID + ":" + "door/door_glass_top" );
IconRegistry.icon_door_french_glass_top = iconRegister.registerIcon(CarpentersBlocks.MODID + ":" + "door/door_french_glass_top" );
IconRegistry.icon_door_french_glass_bottom = iconRegister.registerIcon(CarpentersBlocks.MODID + ":" + "door/door_french_glass_bottom");
}
@Override
/**
* Alters hinge type and redstone behavior.
*/
protected boolean onHammerRightClick(TEBase TE, EntityPlayer entityPlayer)
{
if (!entityPlayer.isSneaking()) {
int temp = Hinge.getType(TE);
if (++temp >= type.length) {
temp = 0;
}
setHingeType(TE, temp);
super.onHammerRightClick(TE, entityPlayer);
return true;
}
return super.onHammerRightClick(TE, entityPlayer);
}
@Override
/**
* Returns the ID of the items to drop on destruction.
*/
public Item getItemDropped(int metadata, Random random, int par3)
{
return ItemRegistry.itemCarpentersDoor;
}
@Override
@SideOnly(Side.CLIENT)
/**
* only called by clickMiddleMouseButton , and passed to inventory.setCurrentItem (along with isCreative)
*/
public Item getItem(World world, int x, int y, int z)
{
return ItemRegistry.itemCarpentersDoor;
}
@Override
/**
* The type of render function that is called for this block
*/
public int getRenderType()
{
return BlockRegistry.carpentersDoorRenderID;
}
@Override
public ForgeDirection[] getValidRotations(World worldObj, int x, int y,int z)
{
ForgeDirection[] axises = {ForgeDirection.UP, ForgeDirection.DOWN};
return axises;
}
@Override
public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis)
{
// to correctly support archimedes' ships mod:
// if Axis is DOWN, block rotates to the left, north -> west -> south -> east
// if Axis is UP, block rotates to the right: north -> east -> south -> west
TileEntity tile = world.getTileEntity(x, y, z);
if (tile != null && tile instanceof TEBase)
{
TEBase cbTile = (TEBase)tile;
int direction = Hinge.getFacing(cbTile);
switch (axis)
{
case UP:
{
switch (direction)
{
case 0:{Hinge.setFacing(cbTile, 1); break;}
case 1:{Hinge.setFacing(cbTile, 2); break;}
case 2:{Hinge.setFacing(cbTile, 3); break;}
case 3:{Hinge.setFacing(cbTile, 0); break;}
default: return false;
}
break;
}
case DOWN:
{
switch (direction)
{
case 0:{Hinge.setFacing(cbTile, 3); break;}
case 1:{Hinge.setFacing(cbTile, 0); break;}
case 2:{Hinge.setFacing(cbTile, 1); break;}
case 3:{Hinge.setFacing(cbTile, 2); break;}
default: return false;
}
break;
}
default: return false;
}
return true;
}
return false;
}
}