From 13ee4eb594d3205417f8da28600901f9e34e94cd Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Sat, 26 Oct 2013 18:55:19 -0400 Subject: [PATCH] Created a system to load default groups into machines --- .../core/prefab/machine/TileEntityInv.java | 6 ++ .../terminal/TerminalCommandRegistry.java | 93 ++++++++++++------- 2 files changed, 68 insertions(+), 31 deletions(-) diff --git a/src/dark/core/prefab/machine/TileEntityInv.java b/src/dark/core/prefab/machine/TileEntityInv.java index 9d8562e7..d2902351 100644 --- a/src/dark/core/prefab/machine/TileEntityInv.java +++ b/src/dark/core/prefab/machine/TileEntityInv.java @@ -17,6 +17,7 @@ import dark.api.access.ISpecialAccess; import dark.core.interfaces.IExternalInv; import dark.core.interfaces.IInvBox; import dark.core.prefab.invgui.InvChest; +import dark.core.prefab.terminal.TerminalCommandRegistry; /** Prefab for simple object who only need basic inv support and nothing more * @@ -29,6 +30,11 @@ public class TileEntityInv extends TileEntityAdvanced implements IExternalInv, I /** A list of user access data. */ protected List groups = new ArrayList(); + public TileEntityInv() + { + TerminalCommandRegistry.loadNewGroupSet(this); + } + @Override public IInvBox getInventory() { diff --git a/src/dark/core/prefab/terminal/TerminalCommandRegistry.java b/src/dark/core/prefab/terminal/TerminalCommandRegistry.java index 21d99869..381faaa6 100644 --- a/src/dark/core/prefab/terminal/TerminalCommandRegistry.java +++ b/src/dark/core/prefab/terminal/TerminalCommandRegistry.java @@ -3,10 +3,12 @@ package dark.core.prefab.terminal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map.Entry; import net.minecraft.entity.player.EntityPlayer; import dark.api.ITerminal; import dark.api.access.AccessGroup; +import dark.api.access.ISpecialAccess; import dark.api.access.ITerminalCommand; /** @author DarkGuardsman */ @@ -15,6 +17,7 @@ public class TerminalCommandRegistry public static final List COMMANDS = new ArrayList(); public static final List nodes = new ArrayList(); public static final HashMap> groupDefaultNodes = new HashMap(); + public static final HashMap groupDefaultExtends = new HashMap(); static { @@ -23,7 +26,7 @@ public class TerminalCommandRegistry list.add("group.owner"); list.add("inv.disable"); list.add("inv.enable"); - groupDefaultNodes.put("owner", list); + createDefaultGroup("owner", "admin", list); //Admin group defaults list.clear(); list.add("group.admin"); @@ -31,53 +34,81 @@ public class TerminalCommandRegistry list.add("inv.lock"); list.add("inv.unlock"); list.add("inv.change"); - groupDefaultNodes.put("admin", list); + createDefaultGroup("admin", "user", list); //User group defaults list.clear(); list.add("group.user"); list.add("inv.open"); list.add("inv.take"); list.add("inv.give"); - groupDefaultNodes.put("user", list); + createDefaultGroup("user", null, list); + } + + /** Creates a default group for all machines to use. Only add a group if there is no option to + * really manage the group's settings + * + * @param name - group name + * @param prefabGroup - group this should extend. Make sure it exists. + * @param nodes - all commands or custom nodes */ + public static void createDefaultGroup(String name, String prefabGroup, List nodes) + { + if (name != null) + { + groupDefaultNodes.put(name, nodes); + groupDefaultExtends.put(name, prefabGroup); + } + } + + /** Creates a default group for all machines to use. Only add a group if there is no option to + * really manage the group's settings + * + * @param name - group name + * @param prefabGroup - group this should extend. Make sure it exists. + * @param nodes - all commands or custom nodes */ + public static void createDefaultGroup(String name, String prefabGroup, String... nodes) + { + List nodeList = new ArrayList(); + if (nodes != null) + { + for (String node : nodes) + { + nodeList.add(node); + } + } + createDefaultGroup(name, prefabGroup, nodeList); } /** Builds a new default group list for a basic machine */ - public static List createDefaultGroups() + public static List getNewGroupSet() { List groups = new ArrayList(); - AccessGroup ownerPrefab = new AccessGroup("owner"); - AccessGroup adminPrefab = new AccessGroup("admin"); - AccessGroup userPrefab = new AccessGroup("user"); - ownerPrefab.setToExtend(adminPrefab); - adminPrefab.setToExtend(userPrefab); - List groupNodes = groupDefaultNodes.get("owner"); - if (groupNodes != null) + for (Entry> entry : groupDefaultNodes.entrySet()) { - for (String stra : groupNodes) + AccessGroup group = new AccessGroup(entry.getKey()); + if (entry.getValue() != null) { - ownerPrefab.addNode(stra); + for (String string : entry.getValue()) + { + group.addNode(string); + } } } - groupNodes = groupDefaultNodes.get("admin"); - if (groupNodes != null) - { - for (String stra : groupNodes) - { - adminPrefab.addNode(stra); - } - } - groupNodes = groupDefaultNodes.get("user"); - if (groupNodes != null) - { - for (String stra : groupNodes) - { - userPrefab.addNode(stra); - } - } - return groups; } + /** Builds then loaded a new default group set into the terminal */ + public static void loadNewGroupSet(ISpecialAccess terminal) + { + if (terminal != null) + { + List groups = getNewGroupSet(); + for (AccessGroup group : groups) + { + terminal.addGroup(group); + } + } + } + /** @param prefix - what the command starts with for example /time * @param cmd - Cmd instance that will execute the command */ public static void register(ITerminalCommand cmd, String group) @@ -105,7 +136,7 @@ public class TerminalCommandRegistry } /** When a player uses a command in any CMD machine it pass threw here first - * + * * @param terminal - The terminal, can be cast to TileEntity. */ public static boolean onCommand(EntityPlayer player, ITerminal terminal, String cmd) {