diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java index 3c7e1c759..a5d66a259 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java @@ -143,7 +143,7 @@ public class GuiHandler implements IGuiHandler { case RSGui.READER_WRITER: return new GuiReaderWriter((ContainerReaderWriter) getContainer(ID, player, tile), (IReaderWriter) tile); case RSGui.SECURITY_MANAGER: - return new GuiSecurityManager((ContainerSecurityManager) getContainer(ID, player, tile)); + return new GuiSecurityManager((ContainerSecurityManager) getContainer(ID, player, tile), (TileSecurityManager) tile); default: return null; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiSecurityManager.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiSecurityManager.java index 337357be2..c1e3017fc 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiSecurityManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiSecurityManager.java @@ -1,17 +1,27 @@ package com.raoulvdberge.refinedstorage.gui; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.network.Permission; import com.raoulvdberge.refinedstorage.container.ContainerSecurityManager; import com.raoulvdberge.refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import com.raoulvdberge.refinedstorage.item.ItemSecurityCard; +import com.raoulvdberge.refinedstorage.network.MessageSecurityManagerUpdate; import com.raoulvdberge.refinedstorage.tile.TileSecurityManager; +import net.minecraft.client.gui.GuiButton; import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; import net.minecraftforge.fml.client.config.GuiCheckBox; +import java.io.IOException; + public class GuiSecurityManager extends GuiBase { + private TileSecurityManager securityManager; private GuiCheckBox[] permissions = new GuiCheckBox[Permission.values().length]; - public GuiSecurityManager(ContainerSecurityManager container) { + public GuiSecurityManager(ContainerSecurityManager container, TileSecurityManager securityManager) { super(container, 176, 234); + + this.securityManager = securityManager; } @Override @@ -29,6 +39,22 @@ public class GuiSecurityManager extends GuiBase { @Override public void update(int x, int y) { + ItemStack card = securityManager.getEditCard().getStackInSlot(0); + + for (Permission permission : Permission.values()) { + permissions[permission.getId()].setIsChecked(!card.isEmpty() && ItemSecurityCard.hasPermission(card, permission)); + } + } + + @Override + protected void actionPerformed(GuiButton button) throws IOException { + super.actionPerformed(button); + + for (int i = 0; i < permissions.length; ++i) { + if (button == permissions[i]) { + RS.INSTANCE.network.sendToServer(new MessageSecurityManagerUpdate(securityManager, Permission.values()[i], permissions[i].isChecked())); + } + } } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageSecurityManagerUpdate.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageSecurityManagerUpdate.java new file mode 100755 index 000000000..076a805b2 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageSecurityManagerUpdate.java @@ -0,0 +1,67 @@ +package com.raoulvdberge.refinedstorage.network; + +import com.raoulvdberge.refinedstorage.api.network.Permission; +import com.raoulvdberge.refinedstorage.tile.TileSecurityManager; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; + +public class MessageSecurityManagerUpdate extends MessageHandlerPlayerToServer implements IMessage { + private int x; + private int y; + private int z; + private Permission permission; + private boolean state; + + public MessageSecurityManagerUpdate() { + } + + public MessageSecurityManagerUpdate(TileSecurityManager securityManager, Permission permission, boolean state) { + this.x = securityManager.getPos().getX(); + this.y = securityManager.getPos().getY(); + this.z = securityManager.getPos().getZ(); + this.permission = permission; + this.state = state; + } + + @Override + public void fromBytes(ByteBuf buf) { + x = buf.readInt(); + y = buf.readInt(); + z = buf.readInt(); + + int id = buf.readInt(); + + permission = Permission.INSERT; + state = buf.readBoolean(); + + for (Permission otherPermission : Permission.values()) { + if (otherPermission.getId() == id) { + permission = otherPermission; + + break; + } + } + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(x); + buf.writeInt(y); + buf.writeInt(z); + buf.writeInt(permission.getId()); + buf.writeBoolean(state); + } + + @Override + protected void handle(MessageSecurityManagerUpdate message, EntityPlayerMP player) { + TileEntity tile = player.getEntityWorld().getTileEntity(new BlockPos(message.x, message.y, message.z)); + + if (tile instanceof TileSecurityManager) { + ((TileSecurityManager) tile).updatePermission(message.permission, message.state); + } + } + +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index ca3c20573..b690c7115 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -120,6 +120,7 @@ public class ProxyCommon { RS.INSTANCE.network.registerMessage(MessageReaderWriterUpdate.class, MessageReaderWriterUpdate.class, id++, Side.CLIENT); RS.INSTANCE.network.registerMessage(MessageReaderWriterChannelAdd.class, MessageReaderWriterChannelAdd.class, id++, Side.SERVER); RS.INSTANCE.network.registerMessage(MessageReaderWriterChannelRemove.class, MessageReaderWriterChannelRemove.class, id++, Side.SERVER); + RS.INSTANCE.network.registerMessage(MessageSecurityManagerUpdate.class, MessageSecurityManagerUpdate.class, id++, Side.SERVER); NetworkRegistry.INSTANCE.registerGuiHandler(RS.INSTANCE, new GuiHandler()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileSecurityManager.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileSecurityManager.java index 516943b53..8086a8632 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileSecurityManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileSecurityManager.java @@ -3,8 +3,11 @@ package com.raoulvdberge.refinedstorage.tile; import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RSItems; import com.raoulvdberge.refinedstorage.RSUtils; +import com.raoulvdberge.refinedstorage.api.network.Permission; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic; import com.raoulvdberge.refinedstorage.inventory.ItemValidatorBasic; +import com.raoulvdberge.refinedstorage.item.ItemSecurityCard; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; public class TileSecurityManager extends TileNode { @@ -54,4 +57,12 @@ public class TileSecurityManager extends TileNode { public ItemHandlerBasic getEditCard() { return editCard; } + + public void updatePermission(Permission permission, boolean state) { + ItemStack card = getEditCard().getStackInSlot(0); + + if (!card.isEmpty()) { + ItemSecurityCard.setPermission(card, permission, state); + } + } }