package mcjty.rftools.blocks.dimlets; import mcjty.lib.entity.GenericTileEntity; import mcjty.lib.network.Argument; import mcjty.lib.varia.BlockTools; import mcjty.rftools.dimension.DimensionStorage; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import java.util.Map; public class DimensionMonitorTileEntity extends GenericTileEntity { public static final String CMD_SETALARM = "setAlarm"; private int alarmLevel = 0; private int ticker = 10; private boolean redstoneOut = false; public DimensionMonitorTileEntity() { } public int getAlarmLevel() { return alarmLevel; } public void setAlarmLevel(int level) { this.alarmLevel = level; worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); } @Override protected void checkStateServer() { super.checkStateServer(); ticker--; if (ticker > 0) { return; } ticker = 10; DimensionStorage storage = DimensionStorage.getDimensionStorage(worldObj); int energy = storage.getEnergyLevel(worldObj.provider.dimensionId); int pct = energy / (DimletConfiguration.MAX_DIMENSION_POWER / 100); boolean newout = pct < alarmLevel; if (newout != redstoneOut) { redstoneOut = newout; notifyBlockUpdate(); } } @Override protected int updateMetaData(int meta) { meta = super.updateMetaData(meta); return BlockTools.setRedstoneSignalOut(meta, redstoneOut); } @Override public void readFromNBT(NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); redstoneOut = tagCompound.getBoolean("rs"); } @Override public void readRestorableFromNBT(NBTTagCompound tagCompound) { super.readRestorableFromNBT(tagCompound); alarmLevel = tagCompound.getInteger("level"); } @Override public void writeToNBT(NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); tagCompound.setBoolean("rs", redstoneOut); } @Override public void writeRestorableToNBT(NBTTagCompound tagCompound) { super.writeRestorableToNBT(tagCompound); tagCompound.setInteger("level", alarmLevel); } @Override public boolean execute(EntityPlayerMP playerMP, String command, Map<String, Argument> args) { boolean rc = super.execute(playerMP, command, args); if (rc) { return true; } if (CMD_SETALARM.equals(command)) { setAlarmLevel(args.get("level").getInteger()); return true; } return false; } }