package blusunrize.immersiveengineering.common.blocks.wooden;
import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IDirectionalTile;
import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IHammerInteraction;
import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.INeighbourChangeTile;
import blusunrize.immersiveengineering.common.blocks.TileEntityIEBase;
import blusunrize.immersiveengineering.common.util.RotationUtil;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
public class TileEntityTurntable extends TileEntityIEBase implements IDirectionalTile, INeighbourChangeTile, IHammerInteraction
{
private EnumFacing facing = EnumFacing.UP;
private boolean redstone = false;
public boolean invert = false;
@Override
public void readCustomNBT(NBTTagCompound nbt, boolean descPacket)
{
facing = EnumFacing.getFront(nbt.getInteger("facing"));
redstone = nbt.getBoolean("redstone");
invert = nbt.getBoolean("invert");
}
@Override
public void writeCustomNBT(NBTTagCompound nbt, boolean descPacket)
{
nbt.setInteger("facing", facing.ordinal());
nbt.setBoolean("redstone", redstone);
nbt.setBoolean("invert", invert);
}
@Override
public void onNeighborBlockChange(BlockPos pos)
{
boolean r = this.worldObj.isBlockPowered(pos);
if(r!=this.redstone)
{
this.redstone = r;
if(this.redstone)
{
BlockPos target = pos.offset(facing);
RotationUtil.rotateBlock(this.worldObj, target, invert?facing:facing.getOpposite());
}
}
}
@Override
public EnumFacing getFacing()
{
return facing;
}
@Override
public void setFacing(EnumFacing facing)
{
this.facing = facing;
}
@Override
public int getFacingLimitation()
{
return 1;
}
@Override
public boolean mirrorFacingOnPlacement(EntityLivingBase placer)
{
return placer.isSneaking();
}
@Override
public boolean canHammerRotate(EnumFacing side, float hitX, float hitY, float hitZ, EntityLivingBase entity)
{
return !entity.isSneaking();
}
@Override
public boolean canRotate(EnumFacing axis)
{
return true;
}
@Override
public boolean hammerUseSide(EnumFacing side, EntityPlayer player, float hitX, float hitY, float hitZ)
{
if(player.isSneaking())
{
invert = !invert;
markDirty();
worldObj.addBlockEvent(getPos(), this.getBlockType(), 254, 0);
return true;
}
return false;
}
}