BloodMagic/1.7.10/main/java/WayofTime/alchemicalWizardry/common/block/BlockOrientable.java
2014-10-13 22:33:20 +02:00

206 lines
5.8 KiB
Java

package WayofTime.alchemicalWizardry.common.block;
import WayofTime.alchemicalWizardry.AlchemicalWizardry;
import WayofTime.alchemicalWizardry.common.tileEntity.TEOrientable;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockOrientable extends BlockContainer
{
public BlockOrientable()
{
super(Material.rock);
setHardness(2.0F);
setResistance(5.0F);
setCreativeTab(AlchemicalWizardry.tabBloodMagic);
}
@Override
public TileEntity createNewTileEntity(World world, int dunno)
{
return new TEOrientable();
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float what, float these, float are)
{
//Right-click orients the output face. Shift-right-click orients the input face.
if (world.isRemote)
{
return false;
}
ForgeDirection sideClicked = ForgeDirection.getOrientation(side);
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TEOrientable)
{
TEOrientable newTile = (TEOrientable) tile;
if (player.isSneaking())
{
int nextSide = TEOrientable.getIntForForgeDirection(newTile.getInputDirection()) + 1;
if (nextSide > 5)
{
nextSide = 0;
}
if (ForgeDirection.getOrientation(nextSide) == newTile.getOutputDirection())
{
nextSide++;
if (nextSide > 5)
{
nextSide = 0;
}
}
newTile.setInputDirection(ForgeDirection.getOrientation(nextSide));
} else
{
int nextSide = TEOrientable.getIntForForgeDirection(newTile.getOutputDirection()) + 1;
if (nextSide > 5)
{
nextSide = 0;
}
if (ForgeDirection.getOrientation(nextSide) == newTile.getInputDirection())
{
nextSide++;
if (nextSide > 5)
{
nextSide = 0;
}
}
newTile.setOutputDirection(ForgeDirection.getOrientation(nextSide));
}
}
world.markBlockForUpdate(x, y, z);
return true;
}
public int getTextureIndexForSideAndOrientation(int side, ForgeDirection input, ForgeDirection output)
{
if (ForgeDirection.getOrientation(side) == input)
{
return 0;
}
if (ForgeDirection.getOrientation(side) == output)
{
return 1;
}
if (ForgeDirection.getOrientation(side) == output.getOpposite())
{
return 6;
}
switch (side)
{
case 0: //BOTTOM
switch (output)
{
case NORTH:
return 2; //UP
case SOUTH:
return 3; //DOWN
case EAST:
return 4; //LEFT
case WEST:
return 5; //RIGHT
default:
break;
}
break;
case 1: //TOP
switch (output)
{
case NORTH:
return 2; //UP
case SOUTH:
return 3; //DOWN
case EAST:
return 5;
case WEST:
return 4;
default:
break;
}
break;
case 2: //NORTH
switch (output)
{
case DOWN:
return 3;
case UP:
return 2;
case EAST:
return 4;
case WEST:
return 5;
default:
break;
}
break;
case 3: //SOUTH
switch (output)
{
case DOWN:
return 3;
case UP:
return 2;
case EAST:
return 5;
case WEST:
return 4;
default:
break;
}
break;
case 4: //WEST
switch (output)
{
case DOWN:
return 3;
case UP:
return 2;
case NORTH:
return 5;
case SOUTH:
return 4;
default:
break;
}
break;
case 5: //EAST
switch (output)
{
case DOWN:
return 3;
case UP:
return 2;
case NORTH:
return 4;
case SOUTH:
return 5;
default:
break;
}
break;
}
return 0;
}
@Override
public int damageDropped(int metadata)
{
return metadata;
}
}