/** * Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team * http://www.mod-buildcraft.com * <p/> * BuildCraft is distributed under the terms of the Minecraft Mod Public * License 1.0, or MMPL. Please check the contents of the license located in * http://www.mod-buildcraft.com/MMPL-1.0.txt */ package buildcraft.core.lib.network; import io.netty.buffer.ByteBuf; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; import buildcraft.BuildCraftCore; import buildcraft.core.network.PacketIds; // TODO: Rename to PacketGuiUpdate public class PacketGuiReturn extends Packet { private EntityPlayer sender; private IGuiReturnHandler obj; private byte[] extraData; public PacketGuiReturn() { } public PacketGuiReturn(EntityPlayer sender) { this.sender = sender; } public PacketGuiReturn(IGuiReturnHandler obj) { this.obj = obj; this.extraData = null; } public PacketGuiReturn(IGuiReturnHandler obj, byte[] extraData) { this.obj = obj; this.extraData = extraData; } @Override public void writeData(ByteBuf data) { data.writeInt(obj.getWorld().provider.dimensionId); if (obj instanceof TileEntity) { TileEntity tile = (TileEntity) obj; data.writeBoolean(true); data.writeInt(tile.xCoord); data.writeInt(tile.yCoord); data.writeInt(tile.zCoord); } else if (obj instanceof Entity) { Entity entity = (Entity) obj; data.writeBoolean(false); data.writeInt(entity.getEntityId()); } else { return; } obj.writeGuiData(data); if (extraData != null) { data.writeBytes(extraData); } } @Override public void readData(ByteBuf data) { int dim = data.readInt(); World world = DimensionManager.getWorld(dim); boolean tileReturn = data.readBoolean(); if (tileReturn) { int x = data.readInt(); int y = data.readInt(); int z = data.readInt(); TileEntity t = world.getTileEntity(x, y, z); if (t instanceof IGuiReturnHandler) { ((IGuiReturnHandler) t).readGuiData(data, sender); } } else { int entityId = data.readInt(); Entity entity = world.getEntityByID(entityId); if (entity instanceof IGuiReturnHandler) { ((IGuiReturnHandler) entity).readGuiData(data, sender); } } } public void sendPacket() { BuildCraftCore.instance.sendToServer(this); } @Override public int getID() { return PacketIds.GUI_RETURN; } }