package shedar.mods.ic2.nuclearcontrol.network.message; import cpw.mods.fml.common.network.ByteBufUtils; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChunkCoordinates; import shedar.mods.ic2.nuclearcontrol.api.CardState; import shedar.mods.ic2.nuclearcontrol.api.IPanelDataSource; import shedar.mods.ic2.nuclearcontrol.api.IRemoteSensor; import shedar.mods.ic2.nuclearcontrol.containers.ContainerRemoteMonitor; import shedar.mods.ic2.nuclearcontrol.crossmod.RF.ItemCardRFEnergyLocation; import shedar.mods.ic2.nuclearcontrol.items.ItemCardBase; import shedar.mods.ic2.nuclearcontrol.items.ItemCardEnergySensorLocation; import shedar.mods.ic2.nuclearcontrol.panel.CardWrapperImpl; import shedar.mods.ic2.nuclearcontrol.utils.NCLog; public class PacketServerUpdate implements IMessage{ //private Map<String, Object> tag; public ItemStack itemstack; public PacketServerUpdate(){ //DO NOTHING... } public PacketServerUpdate(ItemStack card){ this.itemstack = card; //NCLog.error(card); } @Override public void fromBytes(ByteBuf buf) { itemstack = ByteBufUtils.readItemStack(buf); } @Override public void toBytes(ByteBuf buf) { ByteBufUtils.writeItemStack(buf, itemstack); } public static class Handler implements IMessageHandler<PacketServerUpdate, IMessage> { @Override public IMessage onMessage(PacketServerUpdate message, MessageContext ctx) { ItemStack stack = message.itemstack; // NCLog.error(stack); if(stack != null && stack.getItem() instanceof ItemCardBase){ CardWrapperImpl helper = this.processCard(stack, 10, 0); //CardState state = ((IPanelDataSource) stack.getItem()).update(ContainerRemoteMonitor.panel, helper, 100); if(helper != null) { //NCLog.fatal(helper.getUpdateSet().entrySet()); return new PacketClientRemoteMonitor(helper.getUpdateSet()); } } return null; } private CardWrapperImpl processCard(ItemStack card, int upgradeCountRange, int slot) { if (card == null) { return null; } Item item = card.getItem(); if (item instanceof IPanelDataSource) { boolean needUpdate = true; if (upgradeCountRange > 7) { upgradeCountRange = 7; } int range = 100 * (int) Math.pow(2, upgradeCountRange); CardWrapperImpl cardHelper = new CardWrapperImpl(card, slot); if (item instanceof IRemoteSensor) { ChunkCoordinates target = cardHelper.getTarget(); if (target == null) { needUpdate = false; cardHelper.setState(CardState.INVALID_CARD); } else { cardHelper.setState(CardState.OUT_OF_RANGE); } } if (needUpdate) { CardState state = null; state = ((IPanelDataSource) item).update(MinecraftServer.getServer().worldServers[0], cardHelper, range); cardHelper.setInt("state", state.getIndex()); } return cardHelper; } return null; } } }