161 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			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();
 | |
| }
 | 
