package crazypants.enderio.teleport.packet; import java.util.ArrayList; import java.util.List; import io.netty.buffer.ByteBuf; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import com.enderio.core.EnderCore; import com.enderio.core.api.common.util.IProgressTile; import com.enderio.core.common.TileEntityEnder; import com.enderio.core.common.network.MessageTileEntity; 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 crazypants.enderio.api.teleport.ITravelAccessable; public class PacketPassword extends MessageTileEntity<TileEntityEnder> { private ItemStack stack; private int slot; private boolean setLabel; public PacketPassword() { } private PacketPassword(TileEntityEnder tile) { super(tile); } public static IMessage setPassword(TileEntityEnder te, int slot, ItemStack stack) { PacketPassword msg = new PacketPassword(te); msg.slot = slot; msg.stack = stack; msg.setLabel = false; return msg; } public static PacketPassword setLabel(TileEntityEnder te, ItemStack stack) { PacketPassword msg = new PacketPassword(te); msg.slot = 0; msg.stack = stack; msg.setLabel = true; return msg; } @Override public void fromBytes(ByteBuf buf) { super.fromBytes(buf); slot = buf.readShort(); setLabel = buf.readBoolean(); stack = ByteBufUtils.readItemStack(buf); } @Override public void toBytes(ByteBuf buf) { super.toBytes(buf); buf.writeShort(slot); buf.writeBoolean(setLabel); ByteBufUtils.writeItemStack(buf, stack); } public static class Handler implements IMessageHandler<PacketPassword, IMessage> { @Override public IMessage onMessage(PacketPassword msg, MessageContext ctx) { TileEntityEnder te = msg.getTileEntity(ctx.getServerHandler().playerEntity.worldObj); if (te instanceof ITravelAccessable) { if (((ITravelAccessable) te).canUiBeAccessed(ctx.getServerHandler().playerEntity)) { if (msg.stack != null) { msg.stack.stackSize = 0; } if (msg.setLabel) { ((ITravelAccessable) te).setItemLabel(msg.stack); } else { ((ITravelAccessable) te).getPassword()[msg.slot] = msg.stack; ((ITravelAccessable) te).clearAuthorisedUsers(); } te.getWorldObj().markBlockForUpdate(msg.x, msg.y, msg.z); } } return null; } } }