package mods.ocminecart.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 io.netty.buffer.ByteBuf; import mods.ocminecart.common.container.RemoteModuleContainer; import mods.ocminecart.common.entityextend.RemoteCartExtender; import mods.ocminecart.common.minecart.ComputerCart; import mods.ocminecart.common.tileentity.NetworkRailBaseTile; import net.minecraft.entity.Entity; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.DimensionManager; //Message from Client to send Server a GuiButton event if the Inventory is a Entity public class GuiButtonClick implements IMessage { public int uiID; public int buttonid; public NBTTagCompound dat; public GuiButtonClick(){} public static GuiButtonClick entityButtonClick(Entity e, int button, int guiID){ NBTTagCompound data = new NBTTagCompound(); data.setInteger("en", e.getEntityId()); data.setInteger("dim", e.worldObj.provider.dimensionId); return new GuiButtonClick(guiID,button,data); } public static GuiButtonClick tileButtonClick(TileEntity entity, int button, int guiID){ NBTTagCompound data = new NBTTagCompound(); data.setInteger("x", entity.xCoord); data.setInteger("y", entity.yCoord); data.setInteger("z", entity.zCoord); data.setInteger("dim",entity.getWorldObj().provider.dimensionId); return new GuiButtonClick(guiID,button,data); } public GuiButtonClick(int guiID, int button, NBTTagCompound data){ uiID = guiID; buttonid = button; dat = data; } @Override public void fromBytes(ByteBuf buf) { uiID = buf.readInt(); buttonid = buf.readInt(); if(buf.isReadable()) dat = ByteBufUtils.readTag(buf); if(dat==null) dat = new NBTTagCompound(); } @Override public void toBytes(ByteBuf buf) { buf.writeInt(uiID); buf.writeInt(buttonid); if(dat!=null) ByteBufUtils.writeTag(buf, dat); } public static class Handler implements IMessageHandler<GuiButtonClick, IMessage>{ @Override public IMessage onMessage(GuiButtonClick message, MessageContext ctx) { switch(message.uiID){ case 0: TileEntity tile = DimensionManager.getWorld(message.dat.getInteger("dim")).getTileEntity(message.dat.getInteger("x"), message.dat.getInteger("y"), message.dat.getInteger("z")); if(tile!=null){ if(tile instanceof NetworkRailBaseTile) ((NetworkRailBaseTile) tile).onButtonPress(message.buttonid); } break; case 1: Entity entity = DimensionManager.getWorld(message.dat.getInteger("dim")).getEntityByID(message.dat.getInteger("en")); if(entity!=null){ if(entity instanceof ComputerCart && message.buttonid == 0) ((ComputerCart) entity).setRunning(!((ComputerCart) entity).getRunning()); } break; case 2: if(ctx.getServerHandler().playerEntity==null) break; Container c = ctx.getServerHandler().playerEntity.openContainer; if(c!=null && (c instanceof RemoteModuleContainer)){ if(message.buttonid==0){ RemoteCartExtender module = ((RemoteModuleContainer)c).getModule(); String pw = message.dat.getString("password"); int stat = (module.editableByPlayer(ctx.getServerHandler().playerEntity ,true)) ? 1 : 2; if(pw==null || pw.length()>10) stat=2; if(stat==1) module.setPassword(pw); ((RemoteModuleContainer)c).sendPassState(ctx.getServerHandler().playerEntity, stat); } else if(message.buttonid==1){ RemoteCartExtender module = ((RemoteModuleContainer)c).getModule(); if(!module.editableByPlayer(ctx.getServerHandler().playerEntity ,true)) break; module.setLocked(!module.isLocked()); if(module.isLocked()) ((RemoteModuleContainer)c).lockGui(); } else if(message.buttonid==2){ RemoteCartExtender module = ((RemoteModuleContainer)c).getModule(); if(!module.editableByPlayer(ctx.getServerHandler().playerEntity ,false)) break; module.setEnabled(false); if(module.getRemoteItem()!=null && !ctx.getServerHandler().playerEntity.inventory.addItemStackToInventory(module.getRemoteItem())) module.dropItem(); } } break; } return null; } } }