From 3691a7d1588e14d611a8bcb11105b5c6a025f258 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 16 Dec 2016 22:20:11 +0100 Subject: [PATCH] Added security manager --- .../raoulvdberge/refinedstorage/RSBlocks.java | 1 + .../raoulvdberge/refinedstorage/RSConfig.java | 4 ++ .../raoulvdberge/refinedstorage/RSGui.java | 1 + .../block/BlockSecurityManager.java | 32 ++++++++++ .../container/ContainerSecurityManager.java | 58 ++++++++++++++++++ .../refinedstorage/gui/GuiHandler.java | 4 ++ .../gui/GuiSecurityManager.java | 31 ++++++++++ .../refinedstorage/item/ItemSecurityCard.java | 2 + .../refinedstorage/proxy/ProxyCommon.java | 2 + .../tile/TileSecurityManager.java | 57 +++++++++++++++++ .../assets/refinedstorage/lang/en_US.lang | 3 + .../textures/gui/security_manager.png | Bin 0 -> 1859 bytes 12 files changed, 195 insertions(+) create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/block/BlockSecurityManager.java create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/container/ContainerSecurityManager.java create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/gui/GuiSecurityManager.java create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/tile/TileSecurityManager.java create mode 100755 src/main/resources/assets/refinedstorage/textures/gui/security_manager.png diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java index 16329a59e..1ef4b51b9 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java @@ -29,4 +29,5 @@ public final class RSBlocks { public static final BlockDiskManipulator DISK_MANIPULATOR = new BlockDiskManipulator(); public static final BlockReader READER = new BlockReader(); public static final BlockWriter WRITER = new BlockWriter(); + public static final BlockSecurityManager SECURITY_MANAGER = new BlockSecurityManager(); } \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java index 1b7aea8f8..1ed1b62cc 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java @@ -46,6 +46,8 @@ public final class RSConfig { public int diskManipulatorUsage; public int readerUsage; public int writerUsage; + public int securityManagerUsage; + public int securityManagerPerSecurityCardUsage; //endregion //region Controller @@ -149,6 +151,8 @@ public final class RSConfig { diskManipulatorUsage = config.getInt("diskManipulator", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Disk Manipulators"); readerUsage = config.getInt("reader", ENERGY, 2, 0, Integer.MAX_VALUE, "The energy used by Readers"); writerUsage = config.getInt("writer", ENERGY, 2, 0, Integer.MAX_VALUE, "The energy used by Writers"); + securityManagerUsage = config.getInt("securityManager", ENERGY, 4, 0, Integer.MAX_VALUE, "The base energy used by Security Managers"); + securityManagerPerSecurityCardUsage = config.getInt("securityManagerPerSecurityCard", ENERGY, 10, 0, Integer.MAX_VALUE, "The additional energy used by Security Cards in Security Managers"); //endregion //region Controller diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java b/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java index 8d617e57f..0f2f34cc9 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java @@ -26,4 +26,5 @@ public final class RSGui { public static final int DISK_MANIPULATOR = 22; public static final int WIRELESS_CRAFTING_MONITOR = 23; public static final int READER_WRITER = 24; + public static final int SECURITY_MANAGER = 25; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockSecurityManager.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockSecurityManager.java new file mode 100755 index 000000000..30f4b8f42 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockSecurityManager.java @@ -0,0 +1,32 @@ +package com.raoulvdberge.refinedstorage.block; + +import com.raoulvdberge.refinedstorage.RSGui; +import com.raoulvdberge.refinedstorage.api.network.Permission; +import com.raoulvdberge.refinedstorage.tile.TileSecurityManager; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockSecurityManager extends BlockNode { + public BlockSecurityManager() { + super("security_manager"); + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) { + return new TileSecurityManager(); + } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { + if (!world.isRemote) { + tryOpenNetworkGui(RSGui.SECURITY_MANAGER, player, world, pos, side, Permission.MODIFY, Permission.SECURITY); + } + + return true; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerSecurityManager.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerSecurityManager.java new file mode 100755 index 000000000..44ab0f542 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerSecurityManager.java @@ -0,0 +1,58 @@ +package com.raoulvdberge.refinedstorage.container; + +import com.raoulvdberge.refinedstorage.tile.TileSecurityManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.SlotItemHandler; + +public class ContainerSecurityManager extends ContainerBase { + public ContainerSecurityManager(TileSecurityManager tile, EntityPlayer player) { + super(tile, player); + + int x = 8; + int y = 20; + + for (int i = 0; i < 9 * 2; ++i) { + addSlotToContainer(new SlotItemHandler(tile.getCards(), i, x, y)); + + if (((i + 1) % 9) == 0) { + x = 8; + y += 18; + } else { + x += 18; + } + } + + addSlotToContainer(new SlotItemHandler(tile.getEditCard(), 0, 80, 70)); + + addPlayerInventory(8, 127); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = ItemStack.EMPTY; + + Slot slot = getSlot(index); + + if (slot.getHasStack()) { + stack = slot.getStack(); + + if (index < (9 * 2) + 1) { + if (!mergeItemStack(stack, (9 * 2) + 1, inventorySlots.size(), false)) { + return ItemStack.EMPTY; + } + } else if (!mergeItemStack(stack, 0, 9 * 2, false)) { + return ItemStack.EMPTY; + } + + if (stack.getCount() == 0) { + slot.putStack(ItemStack.EMPTY); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java index d30df0f1a..3c7e1c759 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java @@ -65,6 +65,8 @@ public class GuiHandler implements IGuiHandler { return new ContainerDiskManipulator((TileDiskManipulator) tile, player); case RSGui.READER_WRITER: return new ContainerReaderWriter((IReaderWriter) tile, player); + case RSGui.SECURITY_MANAGER: + return new ContainerSecurityManager((TileSecurityManager) tile, player); default: return null; } @@ -140,6 +142,8 @@ public class GuiHandler implements IGuiHandler { return getWirelessCraftingMonitorGui(player, x, y); 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)); 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 new file mode 100755 index 000000000..e2c85f4ed --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiSecurityManager.java @@ -0,0 +1,31 @@ +package com.raoulvdberge.refinedstorage.gui; + +import com.raoulvdberge.refinedstorage.container.ContainerSecurityManager; + +public class GuiSecurityManager extends GuiBase { + public GuiSecurityManager(ContainerSecurityManager container) { + super(container, 176, 209); + } + + @Override + public void init(int x, int y) { + } + + @Override + public void update(int x, int y) { + } + + @Override + public void drawBackground(int x, int y, int mouseX, int mouseY) { + bindTexture("gui/security_manager.png"); + + drawTexture(x, y, 0, 0, screenWidth, screenHeight); + } + + @Override + public void drawForeground(int mouseX, int mouseY) { + drawString(7, 7, t("gui.refinedstorage:security_manager")); + drawString(7, 59, t("gui.refinedstorage:security_manager.configure")); + drawString(7, 115, t("container.inventory")); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemSecurityCard.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemSecurityCard.java index 54bbe090c..2e79a8b2c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemSecurityCard.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemSecurityCard.java @@ -21,6 +21,8 @@ public class ItemSecurityCard extends ItemBase { public ItemSecurityCard() { super("security_card"); + + setMaxStackSize(1); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index be8f6134c..ca3c20573 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -149,6 +149,7 @@ public class ProxyCommon { registerTile(TileFluidInterface.class, "fluid_interface"); registerTile(TileFluidStorage.class, "fluid_storage"); registerTile(TileDiskManipulator.class, "disk_manipulator"); + registerTile(TileSecurityManager.class, "security_manager"); if (READER_WRITER_ENABLED) { registerTile(TileReader.class, "reader"); @@ -170,6 +171,7 @@ public class ProxyCommon { registerBlock(RSBlocks.EXTERNAL_STORAGE); registerBlock(RSBlocks.CONSTRUCTOR); registerBlock(RSBlocks.DESTRUCTOR); + registerBlock(RSBlocks.SECURITY_MANAGER); if (READER_WRITER_ENABLED) { registerBlock(RSBlocks.READER); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileSecurityManager.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileSecurityManager.java new file mode 100755 index 000000000..516943b53 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileSecurityManager.java @@ -0,0 +1,57 @@ +package com.raoulvdberge.refinedstorage.tile; + +import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.RSItems; +import com.raoulvdberge.refinedstorage.RSUtils; +import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic; +import com.raoulvdberge.refinedstorage.inventory.ItemValidatorBasic; +import net.minecraft.nbt.NBTTagCompound; + +public class TileSecurityManager extends TileNode { + private ItemHandlerBasic cards = new ItemHandlerBasic(9 * 2, this, new ItemValidatorBasic(RSItems.SECURITY_CARD)); + private ItemHandlerBasic editCard = new ItemHandlerBasic(1, this, new ItemValidatorBasic(RSItems.SECURITY_CARD)); + + @Override + public int getEnergyUsage() { + int usage = RS.INSTANCE.config.securityManagerUsage; + + for (int i = 0; i < cards.getSlots(); ++i) { + if (!cards.getStackInSlot(i).isEmpty()) { + usage += RS.INSTANCE.config.securityManagerPerSecurityCardUsage; + } + } + + return usage; + } + + @Override + public void updateNode() { + // NO OP + } + + @Override + public void read(NBTTagCompound tag) { + super.read(tag); + + RSUtils.readItems(cards, 0, tag); + RSUtils.readItems(editCard, 1, tag); + } + + @Override + public NBTTagCompound write(NBTTagCompound tag) { + super.write(tag); + + RSUtils.writeItems(cards, 0, tag); + RSUtils.writeItems(editCard, 1, tag); + + return tag; + } + + public ItemHandlerBasic getCards() { + return cards; + } + + public ItemHandlerBasic getEditCard() { + return editCard; + } +} diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 7562bf708..528e6be82 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -56,6 +56,8 @@ gui.refinedstorage:crafting_preview.loop=Loop in processing... gui.refinedstorage:crafting_preview.force_start=Press CTRL + SHIFT to start anyway gui.refinedstorage:reader=Reader gui.refinedstorage:writer=Writer +gui.refinedstorage:security_manager=Security Manager +gui.refinedstorage:security_manager.configure=Configure misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -191,6 +193,7 @@ block.refinedstorage:fluid_storage.3.name=512k Fluid Storage Block block.refinedstorage:fluid_storage.4.name=Creative Fluid Storage Block block.refinedstorage:reader.name=Reader block.refinedstorage:writer.name=Writer +block.refinedstorage:security_manager.name=Security Manager item.refinedstorage:storage_disk.0.name=1k Storage Disk item.refinedstorage:storage_disk.1.name=4k Storage Disk diff --git a/src/main/resources/assets/refinedstorage/textures/gui/security_manager.png b/src/main/resources/assets/refinedstorage/textures/gui/security_manager.png new file mode 100755 index 0000000000000000000000000000000000000000..f1b03d1ca357b22c38cbba95b04b63fba7fa83da GIT binary patch literal 1859 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&di49pAxJ|V6^adUI?(9qEC?(Sp9j{X1tA1E>kMnhnPgh10{aTQRmDGBlm z1}6TI3>bpHv#SE5owL9rvY3H^?=T269?xHq0u+=iag8Vm&QB{TPb^AhC`ioAE78kK zEm1JhGte_Ma%RbX!@$5a+tbA{q$2L^orhV{h61e@*UIkyue^I}@ouh#_B}Hf3KrWj zF>`VJ+>kIqSpNI(jsD+%_5Ciqy_~HvdHMDF-z&r`m}=f!dK#qnf#JkEX%+^ChB>=+ zK9?km7}0o)V( zKZl<`|8?~(MuqR<=}UJ5%UPI}o2oq-KJ7Zs@I+h{s1GdK5YM!u;f3 z>eY(vlXq5SE|pgBzZLoT@Sl6wf@;BgwdGk$B^AEwtv{|FeXE-xn(FYSgRrNvt~cT&gxjxd+*aA0lfQc300Fk%y;MvnmwlFc=+YqZXC%{dfNP W0}tY)Ulq!OT;l2K=d#Wzp$PyYGa1kT literal 0 HcmV?d00001