Finished the security feature
This commit is contained in:
@@ -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.item.INetworkItemHandler;
|
||||
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.util.IComparer;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
@@ -39,18 +39,16 @@ public interface INetworkMaster {
|
||||
*/
|
||||
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
|
||||
*/
|
||||
INetworkNodeGraph getNodeGraph();
|
||||
|
||||
/**
|
||||
* @return the {@link ISecurityManager} of this network
|
||||
*/
|
||||
ISecurityManager getSecurityManager();
|
||||
|
||||
/**
|
||||
* @return the {@link IItemGridHandler} of this network
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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.
|
||||
@@ -15,15 +15,19 @@ public enum Permission {
|
||||
/**
|
||||
* 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),
|
||||
/**
|
||||
* Whether the player can add or remove network blocks.
|
||||
*/
|
||||
BUILD(4),
|
||||
/**
|
||||
* Whether the player can manage the security options for a network.
|
||||
*/
|
||||
SECURITY(4);
|
||||
SECURITY(5);
|
||||
|
||||
private final int id;
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.network;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||
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 net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
@@ -19,7 +19,7 @@ public class NetworkListener {
|
||||
if (tile != null && tile.hasCapability(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());
|
||||
|
||||
e.setCanceled(true);
|
||||
@@ -40,7 +40,7 @@ public class NetworkListener {
|
||||
|
||||
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());
|
||||
|
||||
e.setCanceled(true);
|
||||
|
||||
@@ -2,8 +2,8 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.grid;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||
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.security.Permission;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.InventoryHelper;
|
||||
@@ -27,7 +27,7 @@ public class FluidGridHandler implements IFluidGridHandler {
|
||||
public void onExtract(EntityPlayerMP player, int hash, boolean shift) {
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ public class FluidGridHandler implements IFluidGridHandler {
|
||||
@Nullable
|
||||
@Override
|
||||
public ItemStack onInsert(EntityPlayerMP player, ItemStack container) {
|
||||
if (!network.hasPermission(Permission.INSERT, player)) {
|
||||
if (!network.getSecurityManager().hasPermission(Permission.INSERT, player)) {
|
||||
return container;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,9 +5,9 @@ import com.raoulvdberge.refinedstorage.RSUtils;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||
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.item.INetworkItem;
|
||||
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IStackList;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
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) {
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ public class ItemGridHandler implements IItemGridHandler {
|
||||
|
||||
@Override
|
||||
public ItemStack onInsert(EntityPlayerMP player, ItemStack stack) {
|
||||
if (!network.hasPermission(Permission.INSERT, player)) {
|
||||
if (!network.getSecurityManager().hasPermission(Permission.INSERT, player)) {
|
||||
return stack;
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ public class ItemGridHandler implements IItemGridHandler {
|
||||
|
||||
@Override
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -149,7 +149,7 @@ public class ItemGridHandler implements IItemGridHandler {
|
||||
|
||||
@Override
|
||||
public void onCraftingPreviewRequested(EntityPlayerMP player, int hash, int quantity) {
|
||||
if (!network.hasPermission(Permission.AUTOCRAFT, player)) {
|
||||
if (!network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -180,7 +180,7 @@ public class ItemGridHandler implements IItemGridHandler {
|
||||
|
||||
@Override
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -197,7 +197,7 @@ public class ItemGridHandler implements IItemGridHandler {
|
||||
|
||||
@Override
|
||||
public void onCraftingCancelRequested(EntityPlayerMP player, int id) {
|
||||
if (!network.hasPermission(Permission.AUTOCRAFT, player)) {
|
||||
if (!network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,9 +4,9 @@ import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.RSGui;
|
||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||
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.INetworkItemHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
|
||||
import com.raoulvdberge.refinedstorage.item.ItemWirelessCraftingMonitor;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
@@ -38,7 +38,7 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!network.hasPermission(Permission.AUTOCRAFT, player)) {
|
||||
if (!network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)) {
|
||||
RSUtils.sendNoPermissionMessage(player);
|
||||
|
||||
return false;
|
||||
|
||||
@@ -4,9 +4,9 @@ import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.RSGui;
|
||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||
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.INetworkItemHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
|
||||
import com.raoulvdberge.refinedstorage.item.ItemWirelessGrid;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
@@ -38,7 +38,7 @@ public class NetworkItemWirelessGrid implements INetworkItem {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!network.hasPermission(Permission.MODIFY, player)) {
|
||||
if (!network.getSecurityManager().hasPermission(Permission.MODIFY, player)) {
|
||||
RSUtils.sendNoPermissionMessage(player);
|
||||
|
||||
return false;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ package com.raoulvdberge.refinedstorage.block;
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||
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.proxy.CapabilityNetworkNode;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileBase;
|
||||
@@ -144,7 +144,7 @@ public abstract class BlockBase extends Block {
|
||||
|
||||
if (node.getNetwork() != null) {
|
||||
for (Permission permission : permissions) {
|
||||
if (!node.getNetwork().hasPermission(permission, player)) {
|
||||
if (!node.getNetwork().getSecurityManager().hasPermission(permission, player)) {
|
||||
RSUtils.sendNoPermissionMessage(player);
|
||||
|
||||
return false;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.block;
|
||||
|
||||
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 net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
@@ -23,7 +23,7 @@ public class BlockCraftingMonitor extends BlockNode {
|
||||
|
||||
@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.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);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.block;
|
||||
|
||||
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 net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.block;
|
||||
|
||||
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 net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.block;
|
||||
|
||||
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 net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
|
||||
@@ -14,7 +14,7 @@ public class ContainerSecurityManager extends ContainerBase {
|
||||
int y = 20;
|
||||
|
||||
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) {
|
||||
x = 8;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.gui;
|
||||
|
||||
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.gui.sidebutton.SideButtonRedstoneMode;
|
||||
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[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[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[5] = addCheckBox(permissions[4].xPosition, permissions[4].yPosition + padding, I18n.format("gui.refinedstorage:security_manager.permission.5"), false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
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.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.network;
|
||||
|
||||
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.tile.grid.TileGrid;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
@@ -47,7 +47,7 @@ public class MessageGridCraftingClear extends MessageHandlerPlayerToServer<Messa
|
||||
TileGrid grid = (TileGrid) tile;
|
||||
|
||||
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) {
|
||||
ItemStack slot = grid.getMatrix().getStackInSlot(i);
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
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 io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
|
||||
@@ -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.INetworkNode;
|
||||
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.IItemGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
|
||||
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.IStorage;
|
||||
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.ItemGridHandler;
|
||||
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.StorageCacheItem;
|
||||
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 ISecurityManager securityManager = new SecurityManager(this);
|
||||
|
||||
private IStorageCache<ItemStack> itemStorage = new StorageCacheItem(this);
|
||||
private IStorageCache<FluidStack> fluidStorage = new StorageCacheFluid(this);
|
||||
|
||||
@@ -214,13 +218,13 @@ public class TileController extends TileBase implements INetworkMaster, IRedston
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPermission(Permission permission, EntityPlayer player) {
|
||||
return true;
|
||||
public INetworkNodeGraph getNodeGraph() {
|
||||
return nodeGraph;
|
||||
}
|
||||
|
||||
@Override
|
||||
public INetworkNodeGraph getNodeGraph() {
|
||||
return nodeGraph;
|
||||
public ISecurityManager getSecurityManager() {
|
||||
return securityManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -308,6 +312,7 @@ public class TileController extends TileBase implements INetworkMaster, IRedston
|
||||
couldRun = canRun();
|
||||
|
||||
nodeGraph.rebuild();
|
||||
securityManager.rebuild();
|
||||
}
|
||||
|
||||
if (getEnergyScaledForDisplay() != lastEnergyDisplay) {
|
||||
@@ -472,7 +477,7 @@ public class TileController extends TileBase implements INetworkMaster, IRedston
|
||||
|
||||
@Override
|
||||
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
|
||||
@@ -491,7 +496,7 @@ public class TileController extends TileBase implements INetworkMaster, IRedston
|
||||
|
||||
@Override
|
||||
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
|
||||
|
||||
@@ -3,15 +3,37 @@ 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.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.ItemValidatorBasic;
|
||||
import com.raoulvdberge.refinedstorage.item.ItemSecurityCard;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
public class TileSecurityManager extends TileNode {
|
||||
private ItemHandlerBasic cards = new ItemHandlerBasic(9 * 2, this, new ItemValidatorBasic(RSItems.SECURITY_CARD));
|
||||
import java.util.ArrayList;
|
||||
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));
|
||||
|
||||
@Override
|
||||
@@ -27,11 +49,44 @@ public class TileSecurityManager extends TileNode {
|
||||
return usage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
if (!getWorld().isRemote && ticks == 0) {
|
||||
rebuildCards();
|
||||
}
|
||||
|
||||
super.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateNode() {
|
||||
// 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
|
||||
public void read(NBTTagCompound tag) {
|
||||
super.read(tag);
|
||||
@@ -50,7 +105,7 @@ public class TileSecurityManager extends TileNode {
|
||||
return tag;
|
||||
}
|
||||
|
||||
public ItemHandlerBasic getCards() {
|
||||
public ItemHandlerBasic getCardsItems() {
|
||||
return cards;
|
||||
}
|
||||
|
||||
@@ -65,4 +120,9 @@ public class TileSecurityManager extends TileNode {
|
||||
ItemSecurityCard.setPermission(card, permission, state);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ISecurityCard> getCards() {
|
||||
return actualCards;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,9 +4,9 @@ import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.RSBlocks;
|
||||
import com.raoulvdberge.refinedstorage.RSItems;
|
||||
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.IItemGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.block.BlockGrid;
|
||||
import com.raoulvdberge.refinedstorage.block.EnumGridType;
|
||||
@@ -388,7 +388,7 @@ public class TileGrid extends TileNode implements IGrid {
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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.1=Extract
|
||||
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.tooltip=Starting and cancelling crafting tasks
|
||||
gui.refinedstorage:security_manager.permission.2=Autocrafting
|
||||
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.tooltip=Opening GUIs, adding or removing blocks from the network
|
||||
gui.refinedstorage:security_manager.permission.4=Security
|
||||
gui.refinedstorage:security_manager.permission.4.tooltip=Ability to change security options
|
||||
gui.refinedstorage:security_manager.permission.3.tooltip=Opening block GUIs
|
||||
gui.refinedstorage:security_manager.permission.4=Build
|
||||
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_usage=Usage: %d RS/t
|
||||
|
||||
Reference in New Issue
Block a user