diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/security/ISecurityCard.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/security/ISecurityCard.java index 495b58327..2e3b98fa3 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/security/ISecurityCard.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/security/ISecurityCard.java @@ -7,9 +7,9 @@ import java.util.UUID; */ public interface ISecurityCard { /** - * @return the UUID that this security card is bound to + * @return the owner of this card */ - UUID getBound(); + UUID getOwner(); /** * @param permission the permission to check for diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java index 1121ba884..bc3d7dce4 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java @@ -38,7 +38,7 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem { return false; } - if (!network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)) { + if (!network.getSecurityManager().hasPermission(Permission.MODIFY, player) || !network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)) { RSUtils.sendNoPermissionMessage(player); return false; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/security/SecurityCard.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/security/SecurityCard.java index 1384ff0a3..fd3c82342 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/security/SecurityCard.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/security/SecurityCard.java @@ -8,11 +8,11 @@ import java.util.Map; import java.util.UUID; public class SecurityCard implements ISecurityCard { - private UUID bound; + private UUID owner; private Map permissions = new HashMap<>(); - public SecurityCard(UUID bound) { - this.bound = bound; + public SecurityCard(UUID owner) { + this.owner = owner; } public Map getPermissions() { @@ -20,8 +20,8 @@ public class SecurityCard implements ISecurityCard { } @Override - public UUID getBound() { - return bound; + public UUID getOwner() { + return owner; } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/security/SecurityManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/security/SecurityManager.java index 182b01abc..8603eed56 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/security/SecurityManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/security/SecurityManager.java @@ -40,9 +40,9 @@ public class SecurityManager implements ISecurityManager { cards.clear(); for (INetworkNode node : network.getNodeGraph().all()) { - if (node instanceof ISecurityCardContainer) { + if (node instanceof ISecurityCardContainer && node.canUpdate()) { for (ISecurityCard card : ((ISecurityCardContainer) node).getCards()) { - cards.put(card.getBound(), card); + cards.put(card.getOwner(), card); } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockSecurityManager.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockSecurityManager.java index 0e20066c2..4481734d1 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockSecurityManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockSecurityManager.java @@ -1,10 +1,13 @@ package com.raoulvdberge.refinedstorage.block; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RSGui; import com.raoulvdberge.refinedstorage.api.network.security.Permission; import com.raoulvdberge.refinedstorage.tile.TileSecurityManager; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; @@ -21,10 +24,23 @@ public class BlockSecurityManager extends BlockNode { return new TileSecurityManager(); } + @Override + public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) { + super.onBlockPlacedBy(world, pos, state, placer, stack); + + if (!world.isRemote && placer instanceof EntityPlayer) { + ((TileSecurityManager) world.getTileEntity(pos)).setOwner(((EntityPlayer) placer).getGameProfile().getId()); + } + } + @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); + if (player.getGameProfile().getId().equals(((TileSecurityManager) world.getTileEntity(pos)).getOwner())) { + player.openGui(RS.INSTANCE, RSGui.SECURITY_MANAGER, world, pos.getX(), pos.getY(), pos.getZ()); + } else { + tryOpenNetworkGui(RSGui.SECURITY_MANAGER, player, world, pos, side, Permission.MODIFY, Permission.SECURITY); + } } return true; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemSecurityCard.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemSecurityCard.java index 1a53347df..094e04a54 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemSecurityCard.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemSecurityCard.java @@ -15,8 +15,8 @@ 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_OWNER = "Owner"; + private static final String NBT_OWNER_NAME = "OwnerName"; private static final String NBT_PERMISSION = "Permission_%d"; public ItemSecurityCard() { @@ -32,17 +32,17 @@ public class ItemSecurityCard extends ItemBase { 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()); + stack.getTagCompound().setString(NBT_OWNER, player.getGameProfile().getId().toString()); + stack.getTagCompound().setString(NBT_OWNER_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)); + public static UUID getOwner(ItemStack stack) { + if (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_OWNER)) { + return UUID.fromString(stack.getTagCompound().getString(NBT_OWNER)); } return null; @@ -70,8 +70,8 @@ public class ItemSecurityCard extends ItemBase { 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))); + if (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_OWNER_NAME)) { + tooltip.add(I18n.format("item.refinedstorage:security_card.owner", stack.getTagCompound().getString(NBT_OWNER_NAME))); } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileSecurityManager.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileSecurityManager.java index 2848afc92..4cd757440 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileSecurityManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileSecurityManager.java @@ -3,6 +3,7 @@ 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.INetworkMaster; import com.raoulvdberge.refinedstorage.api.network.security.ISecurityCard; import com.raoulvdberge.refinedstorage.api.network.security.ISecurityCardContainer; import com.raoulvdberge.refinedstorage.api.network.security.Permission; @@ -12,12 +13,17 @@ import com.raoulvdberge.refinedstorage.inventory.ItemValidatorBasic; import com.raoulvdberge.refinedstorage.item.ItemSecurityCard; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.wrapper.CombinedInvWrapper; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; import java.util.UUID; public class TileSecurityManager extends TileNode implements ISecurityCardContainer { + private static final String NBT_OWNER = "Owner"; + private List actualCards = new ArrayList<>(); private ItemHandlerBasic cards = new ItemHandlerBasic(9 * 2, this, new ItemValidatorBasic(RSItems.SECURITY_CARD)) { @@ -36,6 +42,9 @@ public class TileSecurityManager extends TileNode implements ISecurityCardContai }; private ItemHandlerBasic editCard = new ItemHandlerBasic(1, this, new ItemValidatorBasic(RSItems.SECURITY_CARD)); + @Nullable + private UUID owner; + @Override public int getEnergyUsage() { int usage = RS.INSTANCE.config.securityManagerUsage; @@ -58,6 +67,17 @@ public class TileSecurityManager extends TileNode implements ISecurityCardContai super.update(); } + public void setOwner(@Nullable UUID owner) { + this.owner = owner; + + markDirty(); + } + + @Nullable + public UUID getOwner() { + return owner; + } + @Override public void updateNode() { // NO OP @@ -70,7 +90,7 @@ public class TileSecurityManager extends TileNode implements ISecurityCardContai ItemStack stack = cards.getStackInSlot(i); if (!stack.isEmpty()) { - UUID uuid = ItemSecurityCard.getBound(stack); + UUID uuid = ItemSecurityCard.getOwner(stack); if (uuid == null) { continue; @@ -91,6 +111,10 @@ public class TileSecurityManager extends TileNode implements ISecurityCardContai public void read(NBTTagCompound tag) { super.read(tag); + if (tag.hasKey(NBT_OWNER)) { + owner = UUID.fromString(tag.getString(NBT_OWNER)); + } + RSUtils.readItems(cards, 0, tag); RSUtils.readItems(editCard, 1, tag); } @@ -99,12 +123,21 @@ public class TileSecurityManager extends TileNode implements ISecurityCardContai public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); + if (owner != null) { + tag.setString(NBT_OWNER, owner.toString()); + } + RSUtils.writeItems(cards, 0, tag); RSUtils.writeItems(editCard, 1, tag); return tag; } + @Override + public void onConnectionChange(INetworkMaster network, boolean state) { + network.getSecurityManager().rebuild(); + } + public ItemHandlerBasic getCardsItems() { return cards; } @@ -125,4 +158,9 @@ public class TileSecurityManager extends TileNode implements ISecurityCardContai public List getCards() { return actualCards; } + + @Override + public IItemHandler getDrops() { + return new CombinedInvWrapper(cards, editCard); + } } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 82739a9e2..319d008af 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -261,4 +261,4 @@ item.refinedstorage:wrench.mode=Mode: %s item.refinedstorage:wrench.mode.0=Rotation 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 +item.refinedstorage:security_card.owner=Bound to: %s \ No newline at end of file