Finished the security feature

This commit is contained in:
Raoul Van den Berge
2016-12-17 00:34:59 +01:00
parent 21a0ed2080
commit dbb7d2ec5c
26 changed files with 264 additions and 61 deletions

View File

@@ -6,10 +6,10 @@ import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler;
import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel; import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityManager;
import com.raoulvdberge.refinedstorage.api.storage.IStorageCache; import com.raoulvdberge.refinedstorage.api.storage.IStorageCache;
import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.API;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@@ -39,18 +39,16 @@ public interface INetworkMaster {
*/ */
boolean canRun(); boolean canRun();
/**
* @param permission the permission to check for
* @param player the player to check that permission for
* @return whether the player has the given permission
*/
boolean hasPermission(Permission permission, EntityPlayer player);
/** /**
* @return a graph of connected nodes to this network * @return a graph of connected nodes to this network
*/ */
INetworkNodeGraph getNodeGraph(); INetworkNodeGraph getNodeGraph();
/**
* @return the {@link ISecurityManager} of this network
*/
ISecurityManager getSecurityManager();
/** /**
* @return the {@link IItemGridHandler} of this network * @return the {@link IItemGridHandler} of this network
*/ */

View File

@@ -0,0 +1,19 @@
package com.raoulvdberge.refinedstorage.api.network.security;
import java.util.UUID;
/**
* Represents a security card.
*/
public interface ISecurityCard {
/**
* @return the UUID that this security card is bound to
*/
UUID getBound();
/**
* @param permission the permission to check for
* @return whether the bound player has the given permission
*/
boolean hasPermission(Permission permission);
}

View File

@@ -0,0 +1,13 @@
package com.raoulvdberge.refinedstorage.api.network.security;
import java.util.List;
/**
* A tile that contains security cards.
*/
public interface ISecurityCardContainer {
/**
* @return the security cards in this container
*/
List<ISecurityCard> getCards();
}

View File

@@ -0,0 +1,20 @@
package com.raoulvdberge.refinedstorage.api.network.security;
import net.minecraft.entity.player.EntityPlayer;
/**
* The security manager of a network.
*/
public interface ISecurityManager {
/**
* @param permission the permission to check for
* @param player the player to check that permission for
* @return whether the player has the given permission
*/
boolean hasPermission(Permission permission, EntityPlayer player);
/**
* Rebuilds the security list.
*/
void rebuild();
}

View File

@@ -1,4 +1,4 @@
package com.raoulvdberge.refinedstorage.api.network; package com.raoulvdberge.refinedstorage.api.network.security;
/** /**
* The various permissions a player can have in a network. * The various permissions a player can have in a network.
@@ -15,15 +15,19 @@ public enum Permission {
/** /**
* Whether the player can start, cancel or view an autocrafting task. * Whether the player can start, cancel or view an autocrafting task.
*/ */
AUTOCRAFT(2), AUTOCRAFTING(2),
/** /**
* Whether the player can open network GUIs and can place or break network blocks. * Whether the player can open network GUIs.
*/ */
MODIFY(3), MODIFY(3),
/**
* Whether the player can add or remove network blocks.
*/
BUILD(4),
/** /**
* Whether the player can manage the security options for a network. * Whether the player can manage the security options for a network.
*/ */
SECURITY(4); SECURITY(5);
private final int id; private final int id;

View File

@@ -2,7 +2,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.network;
import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.network.INetworkNode; import com.raoulvdberge.refinedstorage.api.network.INetworkNode;
import com.raoulvdberge.refinedstorage.api.network.Permission; import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.proxy.CapabilityNetworkNode; import com.raoulvdberge.refinedstorage.proxy.CapabilityNetworkNode;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
@@ -19,7 +19,7 @@ public class NetworkListener {
if (tile != null && tile.hasCapability(CapabilityNetworkNode.NETWORK_NODE_CAPABILITY, facing.getOpposite())) { if (tile != null && tile.hasCapability(CapabilityNetworkNode.NETWORK_NODE_CAPABILITY, facing.getOpposite())) {
INetworkNode node = tile.getCapability(CapabilityNetworkNode.NETWORK_NODE_CAPABILITY, facing.getOpposite()); INetworkNode node = tile.getCapability(CapabilityNetworkNode.NETWORK_NODE_CAPABILITY, facing.getOpposite());
if (node.getNetwork() != null && !node.getNetwork().hasPermission(Permission.MODIFY, e.getPlayer())) { if (node.getNetwork() != null && !node.getNetwork().getSecurityManager().hasPermission(Permission.BUILD, e.getPlayer())) {
RSUtils.sendNoPermissionMessage(e.getPlayer()); RSUtils.sendNoPermissionMessage(e.getPlayer());
e.setCanceled(true); e.setCanceled(true);
@@ -40,7 +40,7 @@ public class NetworkListener {
INetworkNode node = tile.getCapability(CapabilityNetworkNode.NETWORK_NODE_CAPABILITY, null); INetworkNode node = tile.getCapability(CapabilityNetworkNode.NETWORK_NODE_CAPABILITY, null);
if (node.getNetwork() != null && !node.getNetwork().hasPermission(Permission.MODIFY, e.getPlayer())) { if (node.getNetwork() != null && !node.getNetwork().getSecurityManager().hasPermission(Permission.BUILD, e.getPlayer())) {
RSUtils.sendNoPermissionMessage(e.getPlayer()); RSUtils.sendNoPermissionMessage(e.getPlayer());
e.setCanceled(true); e.setCanceled(true);

View File

@@ -2,8 +2,8 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.grid;
import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import com.raoulvdberge.refinedstorage.api.network.Permission;
import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.API;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.InventoryHelper; import net.minecraft.inventory.InventoryHelper;
@@ -27,7 +27,7 @@ public class FluidGridHandler implements IFluidGridHandler {
public void onExtract(EntityPlayerMP player, int hash, boolean shift) { public void onExtract(EntityPlayerMP player, int hash, boolean shift) {
FluidStack stack = network.getFluidStorageCache().getList().get(hash); FluidStack stack = network.getFluidStorageCache().getList().get(hash);
if (stack == null || stack.amount < Fluid.BUCKET_VOLUME || !network.hasPermission(Permission.EXTRACT, player)) { if (stack == null || stack.amount < Fluid.BUCKET_VOLUME || !network.getSecurityManager().hasPermission(Permission.EXTRACT, player)) {
return; return;
} }
@@ -68,7 +68,7 @@ public class FluidGridHandler implements IFluidGridHandler {
@Nullable @Nullable
@Override @Override
public ItemStack onInsert(EntityPlayerMP player, ItemStack container) { public ItemStack onInsert(EntityPlayerMP player, ItemStack container) {
if (!network.hasPermission(Permission.INSERT, player)) { if (!network.getSecurityManager().hasPermission(Permission.INSERT, player)) {
return container; return container;
} }

View File

@@ -5,9 +5,9 @@ import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import com.raoulvdberge.refinedstorage.api.network.Permission;
import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.api.util.IStackList; import com.raoulvdberge.refinedstorage.api.util.IStackList;
import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.CraftingTask; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.CraftingTask;
@@ -32,7 +32,7 @@ public class ItemGridHandler implements IItemGridHandler {
public void onExtract(EntityPlayerMP player, int hash, int flags) { public void onExtract(EntityPlayerMP player, int hash, int flags) {
ItemStack item = network.getItemStorageCache().getList().get(hash); ItemStack item = network.getItemStorageCache().getList().get(hash);
if (item == null || !network.hasPermission(Permission.EXTRACT, player)) { if (item == null || !network.getSecurityManager().hasPermission(Permission.EXTRACT, player)) {
return; return;
} }
@@ -100,7 +100,7 @@ public class ItemGridHandler implements IItemGridHandler {
@Override @Override
public ItemStack onInsert(EntityPlayerMP player, ItemStack stack) { public ItemStack onInsert(EntityPlayerMP player, ItemStack stack) {
if (!network.hasPermission(Permission.INSERT, player)) { if (!network.getSecurityManager().hasPermission(Permission.INSERT, player)) {
return stack; return stack;
} }
@@ -117,7 +117,7 @@ public class ItemGridHandler implements IItemGridHandler {
@Override @Override
public void onInsertHeldItem(EntityPlayerMP player, boolean single) { public void onInsertHeldItem(EntityPlayerMP player, boolean single) {
if (player.inventory.getItemStack().isEmpty() || !network.hasPermission(Permission.INSERT, player)) { if (player.inventory.getItemStack().isEmpty() || !network.getSecurityManager().hasPermission(Permission.INSERT, player)) {
return; return;
} }
@@ -149,7 +149,7 @@ public class ItemGridHandler implements IItemGridHandler {
@Override @Override
public void onCraftingPreviewRequested(EntityPlayerMP player, int hash, int quantity) { public void onCraftingPreviewRequested(EntityPlayerMP player, int hash, int quantity) {
if (!network.hasPermission(Permission.AUTOCRAFT, player)) { if (!network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)) {
return; return;
} }
@@ -180,7 +180,7 @@ public class ItemGridHandler implements IItemGridHandler {
@Override @Override
public void onCraftingRequested(EntityPlayerMP player, ItemStack stack, int quantity) { public void onCraftingRequested(EntityPlayerMP player, ItemStack stack, int quantity) {
if (quantity <= 0 || !network.hasPermission(Permission.AUTOCRAFT, player)) { if (quantity <= 0 || !network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)) {
return; return;
} }
@@ -197,7 +197,7 @@ public class ItemGridHandler implements IItemGridHandler {
@Override @Override
public void onCraftingCancelRequested(EntityPlayerMP player, int id) { public void onCraftingCancelRequested(EntityPlayerMP player, int id) {
if (!network.hasPermission(Permission.AUTOCRAFT, player)) { if (!network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)) {
return; return;
} }

View File

@@ -4,9 +4,9 @@ import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.RSGui; import com.raoulvdberge.refinedstorage.RSGui;
import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import com.raoulvdberge.refinedstorage.api.network.Permission;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.item.ItemWirelessCraftingMonitor; import com.raoulvdberge.refinedstorage.item.ItemWirelessCraftingMonitor;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
@@ -38,7 +38,7 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem {
return false; return false;
} }
if (!network.hasPermission(Permission.AUTOCRAFT, player)) { if (!network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)) {
RSUtils.sendNoPermissionMessage(player); RSUtils.sendNoPermissionMessage(player);
return false; return false;

View File

@@ -4,9 +4,9 @@ import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.RSGui; import com.raoulvdberge.refinedstorage.RSGui;
import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import com.raoulvdberge.refinedstorage.api.network.Permission;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.item.ItemWirelessGrid; import com.raoulvdberge.refinedstorage.item.ItemWirelessGrid;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
@@ -38,7 +38,7 @@ public class NetworkItemWirelessGrid implements INetworkItem {
return false; return false;
} }
if (!network.hasPermission(Permission.MODIFY, player)) { if (!network.getSecurityManager().hasPermission(Permission.MODIFY, player)) {
RSUtils.sendNoPermissionMessage(player); RSUtils.sendNoPermissionMessage(player);
return false; return false;

View File

@@ -0,0 +1,31 @@
package com.raoulvdberge.refinedstorage.apiimpl.network.security;
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityCard;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class SecurityCard implements ISecurityCard {
private UUID bound;
private Map<Permission, Boolean> permissions = new HashMap<>();
public SecurityCard(UUID bound) {
this.bound = bound;
}
public Map<Permission, Boolean> getPermissions() {
return permissions;
}
@Override
public UUID getBound() {
return bound;
}
@Override
public boolean hasPermission(Permission permission) {
return permissions.get(permission);
}
}

View File

@@ -0,0 +1,50 @@
package com.raoulvdberge.refinedstorage.apiimpl.network.security;
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import com.raoulvdberge.refinedstorage.api.network.INetworkNode;
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityCard;
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityCardContainer;
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityManager;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import net.minecraft.entity.player.EntityPlayer;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class SecurityManager implements ISecurityManager {
private INetworkMaster network;
private Map<UUID, ISecurityCard> cards = new HashMap<>();
public SecurityManager(INetworkMaster network) {
this.network = network;
}
@Override
public boolean hasPermission(Permission permission, EntityPlayer player) {
if (cards.isEmpty()) {
return true;
}
UUID uuid = player.getGameProfile().getId();
if (!cards.containsKey(uuid)) {
return false;
}
return cards.get(uuid).hasPermission(permission);
}
@Override
public void rebuild() {
cards.clear();
for (INetworkNode node : network.getNodeGraph().all()) {
if (node instanceof ISecurityCardContainer) {
for (ISecurityCard card : ((ISecurityCardContainer) node).getCards()) {
cards.put(card.getBound(), card);
}
}
}
}
}

View File

@@ -3,7 +3,7 @@ package com.raoulvdberge.refinedstorage.block;
import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.network.INetworkNode; import com.raoulvdberge.refinedstorage.api.network.INetworkNode;
import com.raoulvdberge.refinedstorage.api.network.Permission; import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.item.ItemBlockBase; import com.raoulvdberge.refinedstorage.item.ItemBlockBase;
import com.raoulvdberge.refinedstorage.proxy.CapabilityNetworkNode; import com.raoulvdberge.refinedstorage.proxy.CapabilityNetworkNode;
import com.raoulvdberge.refinedstorage.tile.TileBase; import com.raoulvdberge.refinedstorage.tile.TileBase;
@@ -144,7 +144,7 @@ public abstract class BlockBase extends Block {
if (node.getNetwork() != null) { if (node.getNetwork() != null) {
for (Permission permission : permissions) { for (Permission permission : permissions) {
if (!node.getNetwork().hasPermission(permission, player)) { if (!node.getNetwork().getSecurityManager().hasPermission(permission, player)) {
RSUtils.sendNoPermissionMessage(player); RSUtils.sendNoPermissionMessage(player);
return false; return false;

View File

@@ -1,7 +1,7 @@
package com.raoulvdberge.refinedstorage.block; package com.raoulvdberge.refinedstorage.block;
import com.raoulvdberge.refinedstorage.RSGui; import com.raoulvdberge.refinedstorage.RSGui;
import com.raoulvdberge.refinedstorage.api.network.Permission; import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
@@ -23,7 +23,7 @@ public class BlockCraftingMonitor extends BlockNode {
@Override @Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { 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.CRAFTING_MONITOR, player, world, pos, side, Permission.MODIFY, Permission.AUTOCRAFT)) { if (!world.isRemote && tryOpenNetworkGui(RSGui.CRAFTING_MONITOR, player, world, pos, side, Permission.MODIFY, Permission.AUTOCRAFTING)) {
((TileCraftingMonitor) world.getTileEntity(pos)).onOpened(player); ((TileCraftingMonitor) world.getTileEntity(pos)).onOpened(player);
} }

View File

@@ -1,7 +1,7 @@
package com.raoulvdberge.refinedstorage.block; package com.raoulvdberge.refinedstorage.block;
import com.raoulvdberge.refinedstorage.RSGui; import com.raoulvdberge.refinedstorage.RSGui;
import com.raoulvdberge.refinedstorage.api.network.Permission; import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.tile.TileFluidInterface; import com.raoulvdberge.refinedstorage.tile.TileFluidInterface;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;

View File

@@ -1,7 +1,7 @@
package com.raoulvdberge.refinedstorage.block; package com.raoulvdberge.refinedstorage.block;
import com.raoulvdberge.refinedstorage.RSGui; import com.raoulvdberge.refinedstorage.RSGui;
import com.raoulvdberge.refinedstorage.api.network.Permission; import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.tile.TileInterface; import com.raoulvdberge.refinedstorage.tile.TileInterface;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;

View File

@@ -1,7 +1,7 @@
package com.raoulvdberge.refinedstorage.block; package com.raoulvdberge.refinedstorage.block;
import com.raoulvdberge.refinedstorage.RSGui; import com.raoulvdberge.refinedstorage.RSGui;
import com.raoulvdberge.refinedstorage.api.network.Permission; import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.tile.TileSecurityManager; import com.raoulvdberge.refinedstorage.tile.TileSecurityManager;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;

View File

@@ -14,7 +14,7 @@ public class ContainerSecurityManager extends ContainerBase {
int y = 20; int y = 20;
for (int i = 0; i < 9 * 2; ++i) { for (int i = 0; i < 9 * 2; ++i) {
addSlotToContainer(new SlotItemHandler(tile.getCards(), i, x, y)); addSlotToContainer(new SlotItemHandler(tile.getCardsItems(), i, x, y));
if (((i + 1) % 9) == 0) { if (((i + 1) % 9) == 0) {
x = 8; x = 8;

View File

@@ -1,7 +1,7 @@
package com.raoulvdberge.refinedstorage.gui; package com.raoulvdberge.refinedstorage.gui;
import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.network.Permission; import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.container.ContainerSecurityManager; import com.raoulvdberge.refinedstorage.container.ContainerSecurityManager;
import com.raoulvdberge.refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import com.raoulvdberge.refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import com.raoulvdberge.refinedstorage.item.ItemSecurityCard; import com.raoulvdberge.refinedstorage.item.ItemSecurityCard;
@@ -33,8 +33,9 @@ public class GuiSecurityManager extends GuiBase {
permissions[0] = addCheckBox(x + 7, y + 93, I18n.format("gui.refinedstorage:security_manager.permission.0"), false); permissions[0] = addCheckBox(x + 7, y + 93, I18n.format("gui.refinedstorage:security_manager.permission.0"), false);
permissions[1] = addCheckBox(permissions[0].xPosition, permissions[0].yPosition + padding, I18n.format("gui.refinedstorage:security_manager.permission.1"), false); permissions[1] = addCheckBox(permissions[0].xPosition, permissions[0].yPosition + padding, I18n.format("gui.refinedstorage:security_manager.permission.1"), false);
permissions[2] = addCheckBox(permissions[1].xPosition, permissions[1].yPosition + padding, I18n.format("gui.refinedstorage:security_manager.permission.2"), false); permissions[2] = addCheckBox(permissions[1].xPosition, permissions[1].yPosition + padding, I18n.format("gui.refinedstorage:security_manager.permission.2"), false);
permissions[3] = addCheckBox(permissions[0].xPosition + 80, permissions[0].yPosition, I18n.format("gui.refinedstorage:security_manager.permission.3"), false); permissions[3] = addCheckBox(permissions[0].xPosition + 90, permissions[0].yPosition, I18n.format("gui.refinedstorage:security_manager.permission.3"), false);
permissions[4] = addCheckBox(permissions[3].xPosition, permissions[3].yPosition + padding, I18n.format("gui.refinedstorage:security_manager.permission.4"), false); permissions[4] = addCheckBox(permissions[3].xPosition, permissions[3].yPosition + padding, I18n.format("gui.refinedstorage:security_manager.permission.4"), false);
permissions[5] = addCheckBox(permissions[4].xPosition, permissions[4].yPosition + padding, I18n.format("gui.refinedstorage:security_manager.permission.5"), false);
} }
@Override @Override

View File

@@ -1,6 +1,6 @@
package com.raoulvdberge.refinedstorage.item; package com.raoulvdberge.refinedstorage.item;
import com.raoulvdberge.refinedstorage.api.network.Permission; import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;

View File

@@ -1,7 +1,7 @@
package com.raoulvdberge.refinedstorage.network; package com.raoulvdberge.refinedstorage.network;
import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.network.Permission; import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.block.EnumGridType; import com.raoulvdberge.refinedstorage.block.EnumGridType;
import com.raoulvdberge.refinedstorage.tile.grid.TileGrid; import com.raoulvdberge.refinedstorage.tile.grid.TileGrid;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
@@ -47,7 +47,7 @@ public class MessageGridCraftingClear extends MessageHandlerPlayerToServer<Messa
TileGrid grid = (TileGrid) tile; TileGrid grid = (TileGrid) tile;
if (grid.hasNetwork()) { if (grid.hasNetwork()) {
if (grid.getType() == EnumGridType.CRAFTING && grid.getNetwork().hasPermission(Permission.INSERT, player)) { if (grid.getType() == EnumGridType.CRAFTING && grid.getNetwork().getSecurityManager().hasPermission(Permission.INSERT, player)) {
for (int i = 0; i < grid.getMatrix().getSizeInventory(); ++i) { for (int i = 0; i < grid.getMatrix().getSizeInventory(); ++i) {
ItemStack slot = grid.getMatrix().getStackInSlot(i); ItemStack slot = grid.getMatrix().getStackInSlot(i);

View File

@@ -1,6 +1,6 @@
package com.raoulvdberge.refinedstorage.network; package com.raoulvdberge.refinedstorage.network;
import com.raoulvdberge.refinedstorage.api.network.Permission; import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.tile.TileSecurityManager; import com.raoulvdberge.refinedstorage.tile.TileSecurityManager;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;

View File

@@ -14,12 +14,13 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import com.raoulvdberge.refinedstorage.api.network.INetworkNode; import com.raoulvdberge.refinedstorage.api.network.INetworkNode;
import com.raoulvdberge.refinedstorage.api.network.INetworkNodeGraph; import com.raoulvdberge.refinedstorage.api.network.INetworkNodeGraph;
import com.raoulvdberge.refinedstorage.api.network.Permission;
import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler;
import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel; import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandler; import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandler;
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityManager;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.api.storage.AccessType; import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import com.raoulvdberge.refinedstorage.api.storage.IStorage; import com.raoulvdberge.refinedstorage.api.storage.IStorage;
import com.raoulvdberge.refinedstorage.api.storage.IStorageCache; import com.raoulvdberge.refinedstorage.api.storage.IStorageCache;
@@ -30,6 +31,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeGraph;
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.FluidGridHandler; import com.raoulvdberge.refinedstorage.apiimpl.network.grid.FluidGridHandler;
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.ItemGridHandler; import com.raoulvdberge.refinedstorage.apiimpl.network.grid.ItemGridHandler;
import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemHandler; import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemHandler;
import com.raoulvdberge.refinedstorage.apiimpl.network.security.SecurityManager;
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheFluid; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheFluid;
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItem; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItem;
import com.raoulvdberge.refinedstorage.block.BlockController; import com.raoulvdberge.refinedstorage.block.BlockController;
@@ -162,6 +164,8 @@ public class TileController extends TileBase implements INetworkMaster, IRedston
private INetworkNodeGraph nodeGraph = new NetworkNodeGraph(this); private INetworkNodeGraph nodeGraph = new NetworkNodeGraph(this);
private ISecurityManager securityManager = new SecurityManager(this);
private IStorageCache<ItemStack> itemStorage = new StorageCacheItem(this); private IStorageCache<ItemStack> itemStorage = new StorageCacheItem(this);
private IStorageCache<FluidStack> fluidStorage = new StorageCacheFluid(this); private IStorageCache<FluidStack> fluidStorage = new StorageCacheFluid(this);
@@ -214,13 +218,13 @@ public class TileController extends TileBase implements INetworkMaster, IRedston
} }
@Override @Override
public boolean hasPermission(Permission permission, EntityPlayer player) { public INetworkNodeGraph getNodeGraph() {
return true; return nodeGraph;
} }
@Override @Override
public INetworkNodeGraph getNodeGraph() { public ISecurityManager getSecurityManager() {
return nodeGraph; return securityManager;
} }
@Override @Override
@@ -308,6 +312,7 @@ public class TileController extends TileBase implements INetworkMaster, IRedston
couldRun = canRun(); couldRun = canRun();
nodeGraph.rebuild(); nodeGraph.rebuild();
securityManager.rebuild();
} }
if (getEnergyScaledForDisplay() != lastEnergyDisplay) { if (getEnergyScaledForDisplay() != lastEnergyDisplay) {
@@ -472,7 +477,7 @@ public class TileController extends TileBase implements INetworkMaster, IRedston
@Override @Override
public void sendItemStorageToClient(EntityPlayerMP player) { public void sendItemStorageToClient(EntityPlayerMP player) {
RS.INSTANCE.network.sendTo(new MessageGridItemUpdate(this, hasPermission(Permission.AUTOCRAFT, player)), player); RS.INSTANCE.network.sendTo(new MessageGridItemUpdate(this, securityManager.hasPermission(Permission.AUTOCRAFTING, player)), player);
} }
@Override @Override
@@ -491,7 +496,7 @@ public class TileController extends TileBase implements INetworkMaster, IRedston
@Override @Override
public void sendFluidStorageToClient(EntityPlayerMP player) { public void sendFluidStorageToClient(EntityPlayerMP player) {
RS.INSTANCE.network.sendTo(new MessageGridFluidUpdate(this, hasPermission(Permission.AUTOCRAFT, player)), player); RS.INSTANCE.network.sendTo(new MessageGridFluidUpdate(this, securityManager.hasPermission(Permission.AUTOCRAFTING, player)), player);
} }
@Override @Override

View File

@@ -3,15 +3,37 @@ package com.raoulvdberge.refinedstorage.tile;
import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.RSItems; import com.raoulvdberge.refinedstorage.RSItems;
import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.network.Permission; import com.raoulvdberge.refinedstorage.api.network.security.ISecurityCard;
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityCardContainer;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.apiimpl.network.security.SecurityCard;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic;
import com.raoulvdberge.refinedstorage.inventory.ItemValidatorBasic; import com.raoulvdberge.refinedstorage.inventory.ItemValidatorBasic;
import com.raoulvdberge.refinedstorage.item.ItemSecurityCard; import com.raoulvdberge.refinedstorage.item.ItemSecurityCard;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
public class TileSecurityManager extends TileNode { import java.util.ArrayList;
private ItemHandlerBasic cards = new ItemHandlerBasic(9 * 2, this, new ItemValidatorBasic(RSItems.SECURITY_CARD)); import java.util.List;
import java.util.UUID;
public class TileSecurityManager extends TileNode implements ISecurityCardContainer {
private List<ISecurityCard> actualCards = new ArrayList<>();
private ItemHandlerBasic cards = new ItemHandlerBasic(9 * 2, this, new ItemValidatorBasic(RSItems.SECURITY_CARD)) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
if (getWorld() != null && !getWorld().isRemote) {
rebuildCards();
}
if (network != null) {
network.getSecurityManager().rebuild();
}
}
};
private ItemHandlerBasic editCard = new ItemHandlerBasic(1, this, new ItemValidatorBasic(RSItems.SECURITY_CARD)); private ItemHandlerBasic editCard = new ItemHandlerBasic(1, this, new ItemValidatorBasic(RSItems.SECURITY_CARD));
@Override @Override
@@ -27,11 +49,44 @@ public class TileSecurityManager extends TileNode {
return usage; return usage;
} }
@Override
public void update() {
if (!getWorld().isRemote && ticks == 0) {
rebuildCards();
}
super.update();
}
@Override @Override
public void updateNode() { public void updateNode() {
// NO OP // NO OP
} }
private void rebuildCards() {
actualCards.clear();
for (int i = 0; i < cards.getSlots(); ++i) {
ItemStack stack = cards.getStackInSlot(i);
if (!stack.isEmpty()) {
UUID uuid = ItemSecurityCard.getBound(stack);
if (uuid == null) {
continue;
}
SecurityCard card = new SecurityCard(uuid);
for (Permission permission : Permission.values()) {
card.getPermissions().put(permission, ItemSecurityCard.hasPermission(stack, permission));
}
actualCards.add(card);
}
}
}
@Override @Override
public void read(NBTTagCompound tag) { public void read(NBTTagCompound tag) {
super.read(tag); super.read(tag);
@@ -50,7 +105,7 @@ public class TileSecurityManager extends TileNode {
return tag; return tag;
} }
public ItemHandlerBasic getCards() { public ItemHandlerBasic getCardsItems() {
return cards; return cards;
} }
@@ -65,4 +120,9 @@ public class TileSecurityManager extends TileNode {
ItemSecurityCard.setPermission(card, permission, state); ItemSecurityCard.setPermission(card, permission, state);
} }
} }
@Override
public List<ISecurityCard> getCards() {
return actualCards;
}
} }

View File

@@ -4,9 +4,9 @@ import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.RSBlocks; import com.raoulvdberge.refinedstorage.RSBlocks;
import com.raoulvdberge.refinedstorage.RSItems; import com.raoulvdberge.refinedstorage.RSItems;
import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.network.Permission;
import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler;
import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.block.BlockGrid; import com.raoulvdberge.refinedstorage.block.BlockGrid;
import com.raoulvdberge.refinedstorage.block.EnumGridType; import com.raoulvdberge.refinedstorage.block.EnumGridType;
@@ -388,7 +388,7 @@ public class TileGrid extends TileNode implements IGrid {
} }
public void onRecipeTransfer(EntityPlayer player, ItemStack[][] recipe) { public void onRecipeTransfer(EntityPlayer player, ItemStack[][] recipe) {
if (hasNetwork() && getType() == EnumGridType.CRAFTING && !network.hasPermission(Permission.EXTRACT, player)) { if (hasNetwork() && getType() == EnumGridType.CRAFTING && !network.getSecurityManager().hasPermission(Permission.EXTRACT, player)) {
return; return;
} }

View File

@@ -62,12 +62,14 @@ gui.refinedstorage:security_manager.permission.0=Insert
gui.refinedstorage:security_manager.permission.0.tooltip=Inserting items to the network gui.refinedstorage:security_manager.permission.0.tooltip=Inserting items to the network
gui.refinedstorage:security_manager.permission.1=Extract gui.refinedstorage:security_manager.permission.1=Extract
gui.refinedstorage:security_manager.permission.1.tooltip=Extracting items from the network gui.refinedstorage:security_manager.permission.1.tooltip=Extracting items from the network
gui.refinedstorage:security_manager.permission.2=Autocraft gui.refinedstorage:security_manager.permission.2=Autocrafting
gui.refinedstorage:security_manager.permission.2.tooltip=Starting and cancelling crafting tasks gui.refinedstorage:security_manager.permission.2.tooltip=Starting, cancelling and viewing crafting tasks
gui.refinedstorage:security_manager.permission.3=Modify gui.refinedstorage:security_manager.permission.3=Modify
gui.refinedstorage:security_manager.permission.3.tooltip=Opening GUIs, adding or removing blocks from the network gui.refinedstorage:security_manager.permission.3.tooltip=Opening block GUIs
gui.refinedstorage:security_manager.permission.4=Security gui.refinedstorage:security_manager.permission.4=Build
gui.refinedstorage:security_manager.permission.4.tooltip=Ability to change security options gui.refinedstorage:security_manager.permission.4.tooltip=Adding or removing devices to or from the network
gui.refinedstorage:security_manager.permission.5=Security
gui.refinedstorage:security_manager.permission.5.tooltip=Ability to change security options
misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_stored=%d / %d RS
misc.refinedstorage:energy_usage=Usage: %d RS/t misc.refinedstorage:energy_usage=Usage: %d RS/t