Files
refinedstorage/src/main/java/storagecraft/tile/TileMachine.java
2016-02-03 17:46:39 +01:00

161 lines
2.9 KiB
Java

package storagecraft.tile;
import io.netty.buffer.ByteBuf;
import net.minecraft.block.Block;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.BlockPos;
import storagecraft.block.BlockMachine;
import storagecraft.tile.settings.IRedstoneModeSetting;
import storagecraft.tile.settings.RedstoneMode;
public abstract class TileMachine extends TileBase implements INetworkTile, IRedstoneModeSetting
{
protected boolean connected = false;
protected boolean redstoneControlled = true;
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
private BlockPos controllerPosition;
private Block originalBlock;
public void onConnected(TileController controller)
{
if (worldObj.getBlockState(pos).getBlock() == originalBlock)
{
markDirty();
connected = true;
worldObj.setBlockState(pos, worldObj.getBlockState(pos).withProperty(BlockMachine.CONNECTED, true));
controllerPosition = controller.getPos();
}
}
public void onDisconnected()
{
if (worldObj.getBlockState(pos).getBlock() == originalBlock)
{
markDirty();
connected = false;
worldObj.setBlockState(pos, worldObj.getBlockState(pos).withProperty(BlockMachine.CONNECTED, false));
}
}
@Override
public void update()
{
if (ticks == 0)
{
originalBlock = worldObj.getBlockState(pos).getBlock();
}
super.update();
if (!worldObj.isRemote && isConnected())
{
updateMachine();
}
}
public boolean isConnected()
{
return connected;
}
@Override
public RedstoneMode getRedstoneMode()
{
return redstoneMode;
}
@Override
public void setRedstoneMode(RedstoneMode mode)
{
if (redstoneControlled)
{
markDirty();
this.redstoneMode = mode;
}
}
@Override
public BlockPos getMachinePos()
{
return pos;
}
@Override
public BlockPos getTilePos()
{
return pos;
}
public TileController getController()
{
return (TileController) worldObj.getTileEntity(controllerPosition);
}
@Override
public void fromBytes(ByteBuf buf)
{
boolean lastConnected = connected;
connected = buf.readBoolean();
if (connected)
{
controllerPosition = new BlockPos(buf.readInt(), buf.readInt(), buf.readInt());
}
redstoneMode = RedstoneMode.getById(buf.readInt());
if (lastConnected != connected)
{
worldObj.markBlockForUpdate(pos);
}
}
@Override
public void toBytes(ByteBuf buf)
{
buf.writeBoolean(connected);
if (connected)
{
buf.writeInt(controllerPosition.getX());
buf.writeInt(controllerPosition.getY());
buf.writeInt(controllerPosition.getZ());
}
buf.writeInt(redstoneMode.id);
}
@Override
public void readFromNBT(NBTTagCompound nbt)
{
super.readFromNBT(nbt);
if (nbt.hasKey(RedstoneMode.NBT))
{
redstoneMode = RedstoneMode.getById(nbt.getInteger(RedstoneMode.NBT));
}
}
@Override
public void writeToNBT(NBTTagCompound nbt)
{
super.writeToNBT(nbt);
nbt.setInteger(RedstoneMode.NBT, redstoneMode.id);
}
public abstract int getEnergyUsage();
public abstract void updateMachine();
}