package fi.dy.masa.enderutilities.network.message; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; import net.minecraftforge.fml.relauncher.Side; import fi.dy.masa.enderutilities.EnderUtilities; import fi.dy.masa.enderutilities.inventory.container.base.ContainerEnderUtilities; import fi.dy.masa.enderutilities.item.ItemHandyBag; import fi.dy.masa.enderutilities.item.ItemInventorySwapper; import fi.dy.masa.enderutilities.item.ItemNullifier; import fi.dy.masa.enderutilities.item.ItemPickupManager; import fi.dy.masa.enderutilities.item.ItemQuickStacker; import fi.dy.masa.enderutilities.reference.ReferenceGuiIds; import fi.dy.masa.enderutilities.tileentity.TileEntityEnderUtilities; import io.netty.buffer.ByteBuf; public class MessageGuiAction implements IMessage { private int guiId; private int action; private int elementId; private int dimension; private int posX; private int posY; private int posZ; public MessageGuiAction() { } public MessageGuiAction(int dim, BlockPos pos, int guiId, int action, int elementId) { this.dimension = dim; this.posX = pos.getX(); this.posY = pos.getY(); this.posZ = pos.getZ(); this.guiId = guiId; this.action = action; this.elementId = elementId; } @Override public void fromBytes(ByteBuf buf) { this.dimension = buf.readInt(); this.posX = buf.readInt(); this.posY = buf.readInt(); this.posZ = buf.readInt(); this.guiId = buf.readInt(); this.action = buf.readInt(); this.elementId = buf.readInt(); } @Override public void toBytes(ByteBuf buf) { buf.writeInt(this.dimension); buf.writeInt(this.posX); buf.writeInt(this.posY); buf.writeInt(this.posZ); buf.writeInt(this.guiId); buf.writeInt(this.action); buf.writeInt(this.elementId); } public static class Handler implements IMessageHandler<MessageGuiAction, IMessage> { @Override public IMessage onMessage(final MessageGuiAction message, MessageContext ctx) { if (ctx.side != Side.SERVER) { EnderUtilities.logger.error("Wrong side in MessageGuiAction: " + ctx.side); return null; } final EntityPlayerMP sendingPlayer = ctx.getServerHandler().player; if (sendingPlayer == null) { EnderUtilities.logger.error("Sending player was null in MessageGuiAction"); return null; } final WorldServer playerWorldServer = sendingPlayer.getServerWorld(); if (playerWorldServer == null) { EnderUtilities.logger.error("World was null in MessageGuiAction"); return null; } playerWorldServer.addScheduledTask(new Runnable() { public void run() { processMessage(message, sendingPlayer); } }); return null; } protected void processMessage(final MessageGuiAction message, EntityPlayer player) { World world = FMLCommonHandler.instance().getMinecraftServerInstance().getWorld(message.dimension); if (world != null) { switch(message.guiId) { case ReferenceGuiIds.GUI_ID_TILE_ENTITY_GENERIC: BlockPos pos = new BlockPos(message.posX, message.posY, message.posZ); if (world.isBlockLoaded(pos)) { TileEntity te = world.getTileEntity(pos); if (te != null && te instanceof TileEntityEnderUtilities) { ((TileEntityEnderUtilities) te).performGuiAction(player, message.action, message.elementId); } } break; case ReferenceGuiIds.GUI_ID_CONTAINER_GENERIC: if (player.openContainer instanceof ContainerEnderUtilities) { ((ContainerEnderUtilities) player.openContainer).performGuiAction(player, message.action, message.elementId); } break; case ReferenceGuiIds.GUI_ID_HANDY_BAG: ItemHandyBag.performGuiAction(player, message.action, message.elementId); break; case ReferenceGuiIds.GUI_ID_INVENTORY_SWAPPER: ItemInventorySwapper.performGuiAction(player, message.action, message.elementId); break; case ReferenceGuiIds.GUI_ID_PICKUP_MANAGER: ItemPickupManager.performGuiAction(player, message.action, message.elementId); break; case ReferenceGuiIds.GUI_ID_QUICK_STACKER: ItemQuickStacker.performGuiAction(player, message.action, message.elementId); break; case ReferenceGuiIds.GUI_ID_NULLIFIER: ItemNullifier.performGuiAction(player, message.action, message.elementId); break; default: } } } } }