From 4cdb8ba72bffcc8b179001e48163f533a038691b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 16 Dec 2016 21:44:16 +0100 Subject: [PATCH] Added security card --- .../raoulvdberge/refinedstorage/RSItems.java | 1 + .../api/network/Permission.java | 20 +++-- .../refinedstorage/item/ItemSecurityCard.java | 75 +++++++++++++++++++ .../refinedstorage/proxy/ProxyCommon.java | 1 + .../assets/refinedstorage/lang/en_US.lang | 4 +- 5 files changed, 95 insertions(+), 6 deletions(-) create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/item/ItemSecurityCard.java diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java b/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java index a1ae5ae75..b99b0deb2 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java @@ -19,4 +19,5 @@ public final class RSItems { public static final ItemFluidStoragePart FLUID_STORAGE_PART = new ItemFluidStoragePart(); public static final ItemWrench WRENCH = new ItemWrench(); public static final ItemWirelessCraftingMonitor WIRELESS_CRAFTING_MONITOR = new ItemWirelessCraftingMonitor(); + public static final ItemSecurityCard SECURITY_CARD = new ItemSecurityCard(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/Permission.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/Permission.java index 3fe7dbf01..889501682 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/Permission.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/Permission.java @@ -7,21 +7,31 @@ public enum Permission { /** * Whether the player can insert items in a network. */ - INSERT, + INSERT(0), /** * Whether the player can extract items from a network. */ - EXTRACT, + EXTRACT(1), /** * Whether the player can start, cancel or view an autocrafting task. */ - AUTOCRAFT, + AUTOCRAFT(2), /** * Whether the player can open network GUIs and can place or break network blocks. */ - MODIFY, + MODIFY(3), /** * Whether the player can manage the security options for a network. */ - SECURITY + SECURITY(4); + + private final int id; + + Permission(int id) { + this.id = id; + } + + public int getId() { + return id; + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemSecurityCard.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemSecurityCard.java new file mode 100755 index 000000000..54bbe090c --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemSecurityCard.java @@ -0,0 +1,75 @@ +package com.raoulvdberge.refinedstorage.item; + +import com.raoulvdberge.refinedstorage.api.network.Permission; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import javax.annotation.Nullable; +import java.util.List; +import java.util.UUID; + +public class ItemSecurityCard extends ItemBase { + private static final String NBT_BOUND = "Bound"; + private static final String NBT_BOUND_NAME = "BoundName"; + private static final String NBT_PERMISSION = "Permission_%d"; + + public ItemSecurityCard() { + super("security_card"); + } + + @Override + public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { + ItemStack stack = player.getHeldItem(hand); + + if (!world.isRemote) { + stack.setTagCompound(new NBTTagCompound()); + + stack.getTagCompound().setString(NBT_BOUND, player.getGameProfile().getId().toString()); + stack.getTagCompound().setString(NBT_BOUND_NAME, player.getGameProfile().getName()); + } + + return ActionResult.newResult(EnumActionResult.SUCCESS, stack); + } + + @Nullable + public static UUID getBound(ItemStack stack) { + if (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_BOUND)) { + return UUID.fromString(stack.getTagCompound().getString(NBT_BOUND)); + } + + return null; + } + + public static boolean hasPermission(ItemStack stack, Permission permission) { + String id = String.format(NBT_PERMISSION, permission.getId()); + + if (stack.hasTagCompound() && stack.getTagCompound().hasKey(id)) { + return stack.getTagCompound().getBoolean(id); + } + + return true; + } + + public static void setPermission(ItemStack stack, Permission permission, boolean state) { + if (!stack.hasTagCompound()) { + stack.setTagCompound(new NBTTagCompound()); + } + + stack.getTagCompound().setBoolean(String.format(NBT_PERMISSION, permission.getId()), state); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { + super.addInformation(stack, player, tooltip, advanced); + + if (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_BOUND_NAME)) { + tooltip.add(I18n.format("item.refinedstorage:security_card.bound", stack.getTagCompound().getString(NBT_BOUND_NAME))); + } + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 2c5df82fb..be8f6134c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -202,6 +202,7 @@ public class ProxyCommon { registerItem(RSItems.NETWORK_CARD); registerItem(RSItems.WRENCH); registerItem(RSItems.WIRELESS_CRAFTING_MONITOR); + registerItem(RSItems.SECURITY_CARD); OreDictionary.registerOre("itemSilicon", RSItems.SILICON); diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index a9aef614d..7562bf708 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -244,4 +244,6 @@ item.refinedstorage:wrench.saved=Configuration written. item.refinedstorage:wrench.read=Configuration read. item.refinedstorage:wrench.mode=Mode: %s item.refinedstorage:wrench.mode.0=Rotation -item.refinedstorage:wrench.mode.1=Configuration \ No newline at end of file +item.refinedstorage:wrench.mode.1=Configuration +item.refinedstorage:security_card.name=Security Card +item.refinedstorage:security_card.bound=Bound to: %s \ No newline at end of file