Created a system to load default groups into machines

This commit is contained in:
DarkGuardsman 2013-10-26 18:55:19 -04:00
parent dbf141b7e5
commit 13ee4eb594
2 changed files with 68 additions and 31 deletions

View file

@ -17,6 +17,7 @@ import dark.api.access.ISpecialAccess;
import dark.core.interfaces.IExternalInv; import dark.core.interfaces.IExternalInv;
import dark.core.interfaces.IInvBox; import dark.core.interfaces.IInvBox;
import dark.core.prefab.invgui.InvChest; 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 /** 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. */ /** A list of user access data. */
protected List<AccessGroup> groups = new ArrayList<AccessGroup>(); protected List<AccessGroup> groups = new ArrayList<AccessGroup>();
public TileEntityInv()
{
TerminalCommandRegistry.loadNewGroupSet(this);
}
@Override @Override
public IInvBox getInventory() public IInvBox getInventory()
{ {

View file

@ -3,10 +3,12 @@ package dark.core.prefab.terminal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map.Entry;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import dark.api.ITerminal; import dark.api.ITerminal;
import dark.api.access.AccessGroup; import dark.api.access.AccessGroup;
import dark.api.access.ISpecialAccess;
import dark.api.access.ITerminalCommand; import dark.api.access.ITerminalCommand;
/** @author DarkGuardsman */ /** @author DarkGuardsman */
@ -15,6 +17,7 @@ public class TerminalCommandRegistry
public static final List<ITerminalCommand> COMMANDS = new ArrayList<ITerminalCommand>(); public static final List<ITerminalCommand> COMMANDS = new ArrayList<ITerminalCommand>();
public static final List<String> nodes = new ArrayList<String>(); public static final List<String> nodes = new ArrayList<String>();
public static final HashMap<String, List<String>> groupDefaultNodes = new HashMap(); public static final HashMap<String, List<String>> groupDefaultNodes = new HashMap();
public static final HashMap<String, String> groupDefaultExtends = new HashMap();
static static
{ {
@ -23,7 +26,7 @@ public class TerminalCommandRegistry
list.add("group.owner"); list.add("group.owner");
list.add("inv.disable"); list.add("inv.disable");
list.add("inv.enable"); list.add("inv.enable");
groupDefaultNodes.put("owner", list); createDefaultGroup("owner", "admin", list);
//Admin group defaults //Admin group defaults
list.clear(); list.clear();
list.add("group.admin"); list.add("group.admin");
@ -31,51 +34,79 @@ public class TerminalCommandRegistry
list.add("inv.lock"); list.add("inv.lock");
list.add("inv.unlock"); list.add("inv.unlock");
list.add("inv.change"); list.add("inv.change");
groupDefaultNodes.put("admin", list); createDefaultGroup("admin", "user", list);
//User group defaults //User group defaults
list.clear(); list.clear();
list.add("group.user"); list.add("group.user");
list.add("inv.open"); list.add("inv.open");
list.add("inv.take"); list.add("inv.take");
list.add("inv.give"); 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<String> 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<String> nodeList = new ArrayList<String>();
if (nodes != null)
{
for (String node : nodes)
{
nodeList.add(node);
}
}
createDefaultGroup(name, prefabGroup, nodeList);
} }
/** Builds a new default group list for a basic machine */ /** Builds a new default group list for a basic machine */
public static List<AccessGroup> createDefaultGroups() public static List<AccessGroup> getNewGroupSet()
{ {
List<AccessGroup> groups = new ArrayList<AccessGroup>(); List<AccessGroup> groups = new ArrayList<AccessGroup>();
AccessGroup ownerPrefab = new AccessGroup("owner"); for (Entry<String, List<String>> entry : groupDefaultNodes.entrySet())
AccessGroup adminPrefab = new AccessGroup("admin");
AccessGroup userPrefab = new AccessGroup("user");
ownerPrefab.setToExtend(adminPrefab);
adminPrefab.setToExtend(userPrefab);
List<String> groupNodes = groupDefaultNodes.get("owner");
if (groupNodes != null)
{ {
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;
} }
return groups; /** Builds then loaded a new default group set into the terminal */
public static void loadNewGroupSet(ISpecialAccess terminal)
{
if (terminal != null)
{
List<AccessGroup> groups = getNewGroupSet();
for (AccessGroup group : groups)
{
terminal.addGroup(group);
}
}
} }
/** @param prefix - what the command starts with for example /time /** @param prefix - what the command starts with for example /time