From cbe12e64dbf356238d4037d99614751a1a108bc1 Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Sat, 19 Oct 2013 22:01:29 -0400 Subject: [PATCH] Did a bit of work on new user access system --- src/com/builtbroken/common/Group.java | 7 +- src/com/builtbroken/common/User.java | 16 +- src/dark/api/access/AccessGroup.java | 122 +++++++++++++++ src/dark/api/access/AccessLevel.java | 45 ------ src/dark/api/access/AccessUser.java | 99 ++++++++++++ src/dark/api/access/ISpecialAccess.java | 24 ++- src/dark/api/access/TerminalGroup.java | 47 ------ src/dark/api/access/TerminalPermission.java | 33 ---- .../access/TerminalPermissionRegistry.java | 23 --- src/dark/api/access/TerminalUser.java | 66 -------- src/dark/api/access/UserAccess.java | 101 ------------- .../prefab/access/GlobalAccessManager.java | 19 ++- .../core/prefab/invgui/GuiGlobalList.java | 8 +- .../core/prefab/machine/TileEntityInv.java | 142 +++++++++++------- .../core/prefab/terminal/CommandUser.java | 31 ++-- .../terminal/TerminalCommandRegistry.java | 84 ++++++++++- .../prefab/terminal/TileEntityTerminal.java | 7 + 17 files changed, 454 insertions(+), 420 deletions(-) create mode 100644 src/dark/api/access/AccessGroup.java delete mode 100644 src/dark/api/access/AccessLevel.java create mode 100644 src/dark/api/access/AccessUser.java delete mode 100644 src/dark/api/access/TerminalGroup.java delete mode 100644 src/dark/api/access/TerminalPermission.java delete mode 100644 src/dark/api/access/TerminalPermissionRegistry.java delete mode 100644 src/dark/api/access/TerminalUser.java delete mode 100644 src/dark/api/access/UserAccess.java diff --git a/src/com/builtbroken/common/Group.java b/src/com/builtbroken/common/Group.java index c291682c..999ea275 100644 --- a/src/com/builtbroken/common/Group.java +++ b/src/com/builtbroken/common/Group.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.List; /** Generic class for link objects of the same class type to each other. - * + * * @author Robert Seifert */ public class Group { @@ -23,6 +23,11 @@ public class Group } } + public List getMembers() + { + return this.memebers; + } + protected boolean isValid(J obj) { return obj != null && memebers.contains(obj); diff --git a/src/com/builtbroken/common/User.java b/src/com/builtbroken/common/User.java index e6aa7548..0f45db46 100644 --- a/src/com/builtbroken/common/User.java +++ b/src/com/builtbroken/common/User.java @@ -1,19 +1,21 @@ package com.builtbroken.common; -/** Class to track a user. Mainly used to create groups of users - * +/** Class to track a user. Mainly used to create groups of users, and is mostly a prefab since it + * only stores a string name. People who use this class should extend it to make better use out of + * the class. + * * @author Robert Seifert */ public class User { protected String username; - protected User() - { - - } - public User(String username) { this.username = username; } + + public String getName() + { + return this.username; + } } diff --git a/src/dark/api/access/AccessGroup.java b/src/dark/api/access/AccessGroup.java new file mode 100644 index 00000000..a060f942 --- /dev/null +++ b/src/dark/api/access/AccessGroup.java @@ -0,0 +1,122 @@ +package dark.api.access; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +import com.builtbroken.common.Group; + +/** Used by a terminal to track what users are part of each group. As well used to setup access + * points to the terminal. + * + * @author DarkGuardsman */ +public class AccessGroup extends Group +{ + protected List nodes = new ArrayList(); + protected AccessGroup extendGroup; + + public AccessGroup(String name, AccessUser... js) + { + super(name, js); + } + + public void setToExtend(AccessGroup group) + { + this.extendGroup = group; + } + + @Override + public boolean addMemeber(AccessUser obj) + { + if (super.addMemeber(obj)) + { + obj.setGroup(this); + return true; + } + return false; + } + + public AccessUser getMember(String name) + { + for (AccessUser user : this.memebers) + { + if (user.getName().equalsIgnoreCase(name)) + { + return user; + } + } + return null; + } + + public NBTTagCompound save(NBTTagCompound nbt) + { + nbt.setString("groupName", this.name()); + NBTTagList usersTag = new NBTTagList(); + for (AccessUser user : this.memebers) + { + if (!user.isTempary) + { + NBTTagCompound accessData = new NBTTagCompound(); + user.save(accessData); + usersTag.appendTag(accessData); + } + } + nbt.setTag("Users", usersTag); + usersTag = new NBTTagList(); + for (String str : this.nodes) + { + NBTTagCompound accessData = new NBTTagCompound(); + accessData.setString("name", str); + usersTag.appendTag(accessData); + } + nbt.setTag("nodes", usersTag); + return nbt; + } + + public void load(NBTTagCompound nbt) + { + this.setName(nbt.getString("groupName")); + NBTTagList userList = nbt.getTagList("users"); + for (int i = 0; i < userList.tagCount(); ++i) + { + memebers.add(AccessUser.loadFromNBT((NBTTagCompound) userList.tagAt(i))); + } + userList = nbt.getTagList("nodes"); + for (int i = 0; i < userList.tagCount(); ++i) + { + this.nodes.add(((NBTTagCompound) userList.tagAt(i)).getString("name")); + } + } + + public boolean hasNode(String node) + { + return this.nodes.contains(node); + } + + public void addNode(String node) + { + this.nodes.add(node); + } + + public void removeNode(String node) + { + if (this.nodes.contains(node)) + { + this.nodes.remove(node); + } + } + + public boolean isMemeber(String string) + { + for (AccessUser user : this.memebers) + { + if (user.getName().equalsIgnoreCase(string)) + { + return true; + } + } + return false; + } +} diff --git a/src/dark/api/access/AccessLevel.java b/src/dark/api/access/AccessLevel.java deleted file mode 100644 index 41462389..00000000 --- a/src/dark/api/access/AccessLevel.java +++ /dev/null @@ -1,45 +0,0 @@ -package dark.api.access; - -public enum AccessLevel -{ - NONE("None"), - BASIC("Basic"), - USER("Standard"), - ADMIN("Admin"), - OWNER("Owner"); - - public String displayName; - - private AccessLevel(String name) - { - displayName = name; - } - - /** Gets the access level in varies ways - * - * @return AccessLevel NONE instead of null if correct level can't be found. */ - public static AccessLevel get(Object ob) - { - if (ob instanceof String) - { - for (AccessLevel access : AccessLevel.values()) - { - if (access.displayName.equalsIgnoreCase((String) ob) || access.name().equalsIgnoreCase((String) ob)) - { - return access; - } - } - } - if (ob instanceof Integer) - { - int i = (Integer) ob; - - if (i >= 0 && i < AccessLevel.values().length) - { - return AccessLevel.values()[i]; - } - } - - return NONE; - } -} diff --git a/src/dark/api/access/AccessUser.java b/src/dark/api/access/AccessUser.java new file mode 100644 index 00000000..7484ea1a --- /dev/null +++ b/src/dark/api/access/AccessUser.java @@ -0,0 +1,99 @@ +package dark.api.access; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +import com.builtbroken.common.User; + +/** Used to define a users access to a terminal based object. + * + * @author DarkGuardsman */ +public class AccessUser extends User +{ + protected boolean isTempary = false; + protected NBTTagCompound extraData; + protected AccessGroup group; + protected List nodes = new ArrayList(); + + public AccessUser(String username) + { + super(username); + } + + public AccessUser(EntityPlayer player) + { + super(player.username); + } + + public AccessGroup getGroup() + { + return this.group; + } + + public void setGroup(AccessGroup group) + { + this.group = group; + } + + public boolean hasNode(String node) + { + if (group != null && group.hasNode(node)) + { + return true; + } + return nodes.contains(node); + } + + public NBTTagCompound save(NBTTagCompound nbt) + { + nbt.setString("username", this.username); + nbt.setCompoundTag("extraData", this.userData()); + NBTTagList usersTag = new NBTTagList(); + for (String str : this.nodes) + { + NBTTagCompound accessData = new NBTTagCompound(); + accessData.setString("name", str); + usersTag.appendTag(accessData); + } + nbt.setTag("nodes", usersTag); + return nbt; + } + + public AccessUser load(NBTTagCompound nbt) + { + this.username = nbt.getString("username"); + this.extraData = nbt.getCompoundTag("extraData"); + NBTTagList userList = nbt.getTagList("nodes"); + for (int i = 0; i < userList.tagCount(); ++i) + { + this.nodes.add(((NBTTagCompound) userList.tagAt(i)).getString("name")); + } + return this; + } + + public static AccessUser loadFromNBT(NBTTagCompound nbt) + { + return new AccessUser("").load(nbt); + } + + public AccessUser setTempary(boolean si) + { + this.isTempary = si; + return this; + } + + /** Used to add other data to the user */ + public NBTTagCompound userData() + { + if (this.extraData == null) + { + this.extraData = new NBTTagCompound(); + } + return this.extraData; + } + +} diff --git a/src/dark/api/access/ISpecialAccess.java b/src/dark/api/access/ISpecialAccess.java index 442409b8..afcca407 100644 --- a/src/dark/api/access/ISpecialAccess.java +++ b/src/dark/api/access/ISpecialAccess.java @@ -3,37 +3,35 @@ package dark.api.access; import java.util.List; /** Used by any object that needs to restrict access to it by a set of usernames - * + * * @author DarkGuardsman */ public interface ISpecialAccess { /** Gets the player's access level on the machine he is using - * + * * @return access level of the player, make sure to return no access if the player doesn't have * any */ - public AccessLevel getUserAccess(String username); + public AccessUser getUserAccess(String username); /** gets the access list for the machine - * + * * @return hasMap of players and there access levels */ - public List getUsers(); + public List getUsers(); /** sets the players access level in the access map - * + * * @param player * @return true if the level was set false if something went wrong */ - public boolean addUserAccess(String username, AccessLevel level, boolean save); + public boolean setUserAccess(String username, AccessGroup group, boolean save); /** Removes the user from the access list - * + * * @param username * @return */ public boolean removeUserAccess(String username); - /** Gets a list of users with this specified access level. - * - * @param level - * @return */ - List getUsersWithAcess(AccessLevel level); + public AccessGroup getGroup(String name); + + public void addGroup(AccessGroup group); } diff --git a/src/dark/api/access/TerminalGroup.java b/src/dark/api/access/TerminalGroup.java deleted file mode 100644 index f9f12835..00000000 --- a/src/dark/api/access/TerminalGroup.java +++ /dev/null @@ -1,47 +0,0 @@ -package dark.api.access; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; - -import com.builtbroken.common.Group; - -/** Used by a terminal to track what users are part of each group. As well used to setup access - * points to the terminal. - * - * @author DarkGuardsman */ -public class TerminalGroup extends Group -{ - public TerminalGroup(String name, TerminalUser... js) - { - super(name, js); - } - - public NBTTagCompound save(NBTTagCompound nbt) - { - nbt.setString("groupName", this.name()); - NBTTagList usersTag = new NBTTagList(); - for (TerminalUser user : this.memebers) - { - if (!user.isTempary) - { - NBTTagCompound accessData = new NBTTagCompound(); - user.save(accessData); - usersTag.appendTag(accessData); - } - } - nbt.setTag("Users", usersTag); - - return nbt; - } - - public void load(NBTTagCompound nbt) - { - this.setName(nbt.getString("groupName")); - NBTTagList userList = nbt.getTagList("users"); - for (short i = 0; i < userList.tagCount(); ++i) - { - NBTTagCompound var4 = (NBTTagCompound) userList.tagAt(i); - memebers.add(TerminalUser.loadFromNBT(var4)); - } - } -} diff --git a/src/dark/api/access/TerminalPermission.java b/src/dark/api/access/TerminalPermission.java deleted file mode 100644 index 9edaa4a1..00000000 --- a/src/dark/api/access/TerminalPermission.java +++ /dev/null @@ -1,33 +0,0 @@ -package dark.api.access; - -/** Used too store information about a permission node with in a terminal like device. Such as ICBM - * sentry guns, or GS locked chests. - * - * @author DarkGuardsman */ -public class TerminalPermission -{ - protected String permissionName = "p"; - protected String saveName = "access.general.p"; - - public TerminalPermission(String name) - { - this.permissionName = name; - this.saveName = "access.general." + name; - } - - public TerminalPermission(String name, String saveName) - { - this.permissionName = name; - this.saveName = saveName; - } - - public String getName() - { - return this.permissionName; - } - - public String getSaveName() - { - return this.saveName; - } -} diff --git a/src/dark/api/access/TerminalPermissionRegistry.java b/src/dark/api/access/TerminalPermissionRegistry.java deleted file mode 100644 index d11d5212..00000000 --- a/src/dark/api/access/TerminalPermissionRegistry.java +++ /dev/null @@ -1,23 +0,0 @@ -package dark.api.access; - -import java.util.HashMap; - -public class TerminalPermissionRegistry -{ - public static HashMap permission = new HashMap(); - - static - { - registerPermission(new TerminalPermission("help", "general.help")); - registerPermission(new TerminalPermission("access", "security.core.access")); - registerPermission(new TerminalPermission("access.set", "security.core.access.set")); - } - - public static void registerPermission(TerminalPermission p) - { - if (!permission.containsKey(p.getName())) - { - permission.put(p.getSaveName(), p); - } - } -} diff --git a/src/dark/api/access/TerminalUser.java b/src/dark/api/access/TerminalUser.java deleted file mode 100644 index b9f3b8a3..00000000 --- a/src/dark/api/access/TerminalUser.java +++ /dev/null @@ -1,66 +0,0 @@ -package dark.api.access; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; - -import com.builtbroken.common.User; - -/** Used to define a users access to a terminal based object. - * - * @author DarkGuardsman */ -public class TerminalUser extends User -{ - protected boolean isTempary = false; - protected NBTTagCompound extraData; - - public TerminalUser(String username) - { - super(username); - } - - public TerminalUser(EntityPlayer player) - { - super(player.username); - } - - private TerminalUser() - { - - } - - public NBTTagCompound save(NBTTagCompound nbt) - { - nbt.setString("username", this.username); - nbt.setCompoundTag("extraData", this.userData()); - return nbt; - } - - public TerminalUser load(NBTTagCompound nbt) - { - this.username = nbt.getString("username"); - this.extraData = nbt.getCompoundTag("extraData"); - return this; - } - - public static TerminalUser loadFromNBT(NBTTagCompound nbt) - { - return new TerminalUser().load(nbt); - } - - public TerminalUser setTempary(boolean si) - { - this.isTempary = si; - return this; - } - - /** Used to add other data to the user */ - public NBTTagCompound userData() - { - if (this.extraData == null) - { - this.extraData = new NBTTagCompound(); - } - return this.extraData; - } - -} diff --git a/src/dark/api/access/UserAccess.java b/src/dark/api/access/UserAccess.java deleted file mode 100644 index 3288bc9f..00000000 --- a/src/dark/api/access/UserAccess.java +++ /dev/null @@ -1,101 +0,0 @@ -package dark.api.access; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; - -public class UserAccess -{ - public String username; - public AccessLevel level; - public boolean shouldSave; - - public UserAccess(String user, AccessLevel level, boolean save) - { - this.username = user; - this.level = level; - this.shouldSave = save; - } - - /** Write to nbt */ - public NBTTagCompound writeToNBT(NBTTagCompound nbt) - { - nbt.setString("username", this.username); - nbt.setInteger("ID", this.level.ordinal()); - return nbt; - } - - /** Read from nbt */ - public void readFromNBT(NBTTagCompound nbt) - { - this.username = nbt.getString("username"); - this.level = AccessLevel.get(nbt.getInteger("ID")); - } - - public static UserAccess loadFromNBT(NBTTagCompound nbt) - { - UserAccess access = new UserAccess("", AccessLevel.NONE, true); - access.readFromNBT(nbt); - return access; - } - - /** Reads an entire UserAccess list from an nbt file - * - * @param nbt - nbt being read - * @return - the list */ - public static List readListFromNBT(NBTTagCompound nbt, String tagName) - { - - NBTTagList userList = nbt.getTagList(tagName); - List users = new ArrayList(); - for (int i = 0; i < userList.tagCount(); ++i) - { - NBTTagCompound var4 = (NBTTagCompound) userList.tagAt(i); - users.add(UserAccess.loadFromNBT(var4)); - } - return users; - } - - /** writes an entire UserAccess list to nbt at one time - * - * @param save - nbt to save to - * @param users - list to save */ - public static void writeListToNBT(NBTTagCompound save, List users) - { - NBTTagList usersTag = new NBTTagList(); - for (int player = 0; player < users.size(); ++player) - { - UserAccess access = users.get(player); - if (access != null && access.shouldSave) - { - NBTTagCompound accessData = new NBTTagCompound(); - access.writeToNBT(accessData); - usersTag.appendTag(accessData); - } - } - - save.setTag("Users", usersTag); - } - - /** Removes a user from a list of UserAccess then returns that list */ - public static List removeUserAccess(String player, List users) - { - List removeList = new ArrayList(); - List returnList = users; - for (int i = 0; i < users.size(); i++) - { - UserAccess ref = users.get(i); - if (ref.username.equalsIgnoreCase(player)) - { - removeList.add(ref); - } - } - if (removeList != null && removeList.size() > 0) - { - returnList.removeAll(removeList); - } - return returnList; - } -} diff --git a/src/dark/core/prefab/access/GlobalAccessManager.java b/src/dark/core/prefab/access/GlobalAccessManager.java index 44870979..4ec1d716 100644 --- a/src/dark/core/prefab/access/GlobalAccessManager.java +++ b/src/dark/core/prefab/access/GlobalAccessManager.java @@ -8,15 +8,14 @@ import java.util.Map; import java.util.Map.Entry; import net.minecraft.nbt.NBTTagCompound; -import dark.api.access.AccessLevel; -import dark.api.access.UserAccess; +import dark.api.access.AccessUser; import dark.core.prefab.helpers.NBTFileHelper; public class GlobalAccessManager { /** Hash map of loaded lists **/ - private static Map> globalUserLists = new HashMap>(); + private static Map> globalUserLists = new HashMap>(); /** Master save NBT that gets saved **/ private static NBTTagCompound masterSaveNbt = new NBTTagCompound(); /** Used to check to see if file is in the process of being loaded **/ @@ -27,7 +26,7 @@ public class GlobalAccessManager public static boolean needsSaving = false; /** Gets or creates a userAccess list to be used for any reason - * + * * @param name - name of the access list being created or loaded * @param owner - the player's name to be used to create a new list * @return - UserAccess list */ @@ -69,7 +68,7 @@ public class GlobalAccessManager } /** creates a new user access list - * + * * @param name * @param owner * @return */ @@ -86,7 +85,7 @@ public class GlobalAccessManager } /** Loads up a UserAccess List - * + * * @param name - name of the list * @return - the list */ public static List getList(String name) @@ -109,7 +108,7 @@ public class GlobalAccessManager } /** adds a user to the global list - * + * * @param listName - name of the list * @param user - user being added as a UserAccess instance * @return true if added */ @@ -140,7 +139,7 @@ public class GlobalAccessManager } /** Removes a user from the global list - * + * * @param listName - name of the list * @param user - user being removed * @return true if removed */ @@ -168,7 +167,7 @@ public class GlobalAccessManager } /** Loads a given Global user list from the master save - * + * * @param name - name given to the list for reference * @return - the list of user access levels to be used */ private static List loadList(String name) @@ -183,7 +182,7 @@ public class GlobalAccessManager } /** Saves a given Global user list into the master save - * + * * @param name - name to save the list as * @param list - list to be saved */ private static void saveList(String name, List list) diff --git a/src/dark/core/prefab/invgui/GuiGlobalList.java b/src/dark/core/prefab/invgui/GuiGlobalList.java index cef302a3..c828b0b9 100644 --- a/src/dark/core/prefab/invgui/GuiGlobalList.java +++ b/src/dark/core/prefab/invgui/GuiGlobalList.java @@ -19,7 +19,7 @@ import universalelectricity.core.vector.Vector2; import universalelectricity.prefab.vector.Region2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import dark.api.access.UserAccess; +import dark.api.access.AccessUser; import dark.core.interfaces.IScroll; import dark.core.prefab.ModPrefab; @@ -156,10 +156,10 @@ public class GuiGlobalList extends GuiContainer implements IScroll { Object object = getDisplayList().get(currentLine); String line = "-----"; - if (object instanceof UserAccess) + if (object instanceof AccessUser) { - UserAccess accesInfo = (UserAccess) object; - line = accesInfo.username + " (" + accesInfo.level.displayName + ")"; + AccessUser accesInfo = (AccessUser) object; + line = accesInfo.getName() + " (" + accesInfo.getGroup().name() + ")"; } else if (object instanceof String) { diff --git a/src/dark/core/prefab/machine/TileEntityInv.java b/src/dark/core/prefab/machine/TileEntityInv.java index b91158b4..9fb8d0d7 100644 --- a/src/dark/core/prefab/machine/TileEntityInv.java +++ b/src/dark/core/prefab/machine/TileEntityInv.java @@ -11,15 +11,15 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraftforge.common.ForgeDirection; import universalelectricity.prefab.tile.TileEntityAdvanced; -import dark.api.access.AccessLevel; +import dark.api.access.AccessGroup; +import dark.api.access.AccessUser; import dark.api.access.ISpecialAccess; -import dark.api.access.UserAccess; import dark.core.interfaces.IExternalInv; import dark.core.interfaces.IInvBox; import dark.core.prefab.invgui.InvChest; /** Prefab for simple object who only need basic inv support and nothing more - * + * * @author Darkguardsman */ public class TileEntityInv extends TileEntityAdvanced implements IExternalInv, ISidedInventory, ISpecialAccess { @@ -27,7 +27,7 @@ public class TileEntityInv extends TileEntityAdvanced implements IExternalInv, I protected boolean lockInv; protected int invSlots = 1; /** A list of user access data. */ - protected final List users = new ArrayList(); + protected List groups = new ArrayList(); @Override public IInvBox getInventory() @@ -159,52 +159,40 @@ public class TileEntityInv extends TileEntityAdvanced implements IExternalInv, I */ @Override - public AccessLevel getUserAccess(String username) + public AccessUser getUserAccess(String username) { - for (int i = 0; i < this.users.size(); i++) + for (AccessGroup group : this.groups) { - if (this.users.get(i).username.equalsIgnoreCase(username)) + AccessUser user = group.getMember(username); + if (user != null) { - return this.users.get(i).level; + return user; } } - return AccessLevel.NONE; + return null; } public boolean canUserAccess(String username) { - return (this.getUserAccess(username).ordinal() > AccessLevel.BASIC.ordinal()); + return this.getUserAccess(username) != null; } @Override - public List getUsers() + public List getUsers() { - return this.users; - } - - @Override - public List getUsersWithAcess(AccessLevel level) - { - List players = new ArrayList(); - - for (int i = 0; i < this.users.size(); i++) + List users = new ArrayList(); + for (AccessGroup group : this.groups) { - UserAccess ref = this.users.get(i); - - if (ref.level == level) - { - players.add(ref); - } + users.addAll(group.getMembers()); } - return players; - + return users; } @Override - public boolean addUserAccess(String player, AccessLevel lvl, boolean save) + public boolean setUserAccess(String player, AccessGroup g, boolean save) { this.removeUserAccess(player); - boolean bool = this.users.add(new UserAccess(player, lvl, save)); + boolean bool = g.addMemeber(new AccessUser(player).setTempary(save)); this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); return bool; } @@ -212,23 +200,42 @@ public class TileEntityInv extends TileEntityAdvanced implements IExternalInv, I @Override public boolean removeUserAccess(String player) { - List removeList = new ArrayList(); - for (int i = 0; i < this.users.size(); i++) + boolean re = false; + for (AccessGroup group : this.groups) { - UserAccess ref = this.users.get(i); - if (ref.username.equalsIgnoreCase(player)) + AccessUser user = group.getMember(player); + if (user != null && group.removeMemeber(user)) { - removeList.add(ref); + re = true; } } - if (removeList != null && removeList.size() > 0) + if (re) { - - boolean bool = this.users.removeAll(removeList); this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); - return bool; } - return false; + return re; + } + + @Override + public AccessGroup getGroup(String name) + { + for (AccessGroup group : this.groups) + { + if (group.name().equalsIgnoreCase(name)) + { + return group; + } + } + return null; + } + + @Override + public void addGroup(AccessGroup group) + { + if (!this.groups.contains(group)) + { + this.groups.add(group); + } } @Override @@ -237,14 +244,42 @@ public class TileEntityInv extends TileEntityAdvanced implements IExternalInv, I super.readFromNBT(nbt); this.getInventory().loadInv(nbt); // Read user list - this.users.clear(); - - NBTTagList userList = nbt.getTagList("Users"); - - for (int i = 0; i < userList.tagCount(); ++i) + if (!nbt.hasKey("group")) { - NBTTagCompound var4 = (NBTTagCompound) userList.tagAt(i); - this.users.add(UserAccess.loadFromNBT(var4)); + NBTTagList userList = nbt.getTagList("Users"); + AccessGroup usr = new AccessGroup("user"); + AccessGroup admin = new AccessGroup("admin"); + AccessGroup owner = new AccessGroup("owner"); + this.groups.add(usr); + this.groups.add(admin); + this.groups.add(owner); + for (int i = 0; i < userList.tagCount(); ++i) + { + AccessUser user = new AccessUser(((NBTTagCompound) userList.tagAt(i)).getString("username")); + switch (nbt.getInteger("ID")) + { + case 1: + case 2: + usr.addMemeber(user); + break; + case 3: + admin.addMemeber(user); + break; + case 4: + owner.addMemeber(user); + break; + } + } + } + else + { + NBTTagList userList = nbt.getTagList("groups"); + for (int i = 0; i < userList.tagCount(); i++) + { + AccessGroup group = new AccessGroup(""); + group.load((NBTTagCompound) userList.tagAt(i)); + this.groups.add(group); + } } } @@ -255,17 +290,10 @@ public class TileEntityInv extends TileEntityAdvanced implements IExternalInv, I this.getInventory().saveInv(nbt); // Write user list NBTTagList usersTag = new NBTTagList(); - for (int player = 0; player < this.users.size(); ++player) + for (AccessGroup group : this.groups) { - UserAccess access = this.users.get(player); - if (access != null && access.shouldSave) - { - NBTTagCompound accessData = new NBTTagCompound(); - access.writeToNBT(accessData); - usersTag.appendTag(accessData); - } + usersTag.appendTag(group.save(new NBTTagCompound())); } - - nbt.setTag("Users", usersTag); + nbt.setTag("groups", usersTag); } } diff --git a/src/dark/core/prefab/terminal/CommandUser.java b/src/dark/core/prefab/terminal/CommandUser.java index f207a9b1..955578b6 100644 --- a/src/dark/core/prefab/terminal/CommandUser.java +++ b/src/dark/core/prefab/terminal/CommandUser.java @@ -5,7 +5,6 @@ import java.util.Set; import net.minecraft.entity.player.EntityPlayer; import dark.api.ITerminal; -import dark.api.access.AccessLevel; import dark.api.access.ISpecialAccess; import dark.api.access.ITerminalCommand; @@ -31,7 +30,7 @@ public class CommandUser implements ITerminalCommand terminal.addToConsole("Listing Users"); for (int i = 0; i < turret.getUsers().size(); i++) { - terminal.addToConsole(" " + i + ") " + turret.getUsers().get(i).username); + terminal.addToConsole(" " + i + ") " + turret.getUsers().get(i).getName()); } return true; } @@ -58,22 +57,30 @@ public class CommandUser implements ITerminalCommand } if (args[1].equalsIgnoreCase("add") && args.length > 2) { - if (args[2] != null) + if (args[2] != null && terminal.getGroup(args[2]) != null) { - if (turret.addUserAccess(args[2], AccessLevel.USER, true)) + if (args.length > 3) { - terminal.addToConsole("Added: " + args[2]); - return true; - } - else - { - terminal.addToConsole("User already exists."); - return true; + if (terminal.getGroup(args[2]).isMemeber(args[3])) + { + terminal.addToConsole("User already exists."); + return true; + } + else if (turret.setUserAccess(args[3], terminal.getGroup(args[2]), true)) + { + terminal.addToConsole("Added: " + args[3] + " to group " + args[2]); + return true; + } + else + { + terminal.addToConsole("Invalid username."); + return true; + } } } else { - terminal.addToConsole("Invalid username."); + terminal.addToConsole("Invalid group."); return true; } } diff --git a/src/dark/core/prefab/terminal/TerminalCommandRegistry.java b/src/dark/core/prefab/terminal/TerminalCommandRegistry.java index 4b4a2e9e..8fc75b93 100644 --- a/src/dark/core/prefab/terminal/TerminalCommandRegistry.java +++ b/src/dark/core/prefab/terminal/TerminalCommandRegistry.java @@ -1,24 +1,106 @@ package dark.core.prefab.terminal; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import net.minecraft.entity.player.EntityPlayer; import dark.api.ITerminal; +import dark.api.access.AccessGroup; import dark.api.access.ITerminalCommand; /** @author DarkGuardsman */ public class TerminalCommandRegistry { public static final List COMMANDS = new ArrayList(); + public static final List nodes = new ArrayList(); + public static final HashMap> groupDefaultNodes = new HashMap(); + + static + { + List list = new ArrayList(); + //Owner group defaults + list.add("group.owner"); + list.add("inv.disable"); + list.add("inv.enable"); + groupDefaultNodes.put("owner", list); + //Admin group defaults + list.clear(); + list.add("group.admin"); + list.add("inv.edit"); + list.add("inv.lock"); + list.add("inv.unlock"); + list.add("inv.change"); + groupDefaultNodes.put("admin", 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); + } + + /** Builds a new default group list for a basic machine */ + public static List createDefaultGroups() + { + 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 (String stra : groupNodes) + { + ownerPrefab.addNode(stra); + } + } + 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; + } /** @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) + public static void register(ITerminalCommand cmd, String group) { if (!COMMANDS.contains(cmd)) { COMMANDS.add(cmd); + if (group != null) + { + if (groupDefaultNodes.containsKey(group)) + { + List stra = new ArrayList(); + stra.add(cmd.getCommandName()); + } + } + } + } + + public static void register(String node) + { + if (!nodes.contains(node)) + { + nodes.add(node); } } diff --git a/src/dark/core/prefab/terminal/TileEntityTerminal.java b/src/dark/core/prefab/terminal/TileEntityTerminal.java index 875438bd..75dc13e0 100644 --- a/src/dark/core/prefab/terminal/TileEntityTerminal.java +++ b/src/dark/core/prefab/terminal/TileEntityTerminal.java @@ -181,4 +181,11 @@ public abstract class TileEntityTerminal extends TileEntityEnergyMachine impleme return this.scroll; } + @Override + public boolean canUse(String node, EntityPlayer player) + { + // TODO Auto-generated method stub + return false; + } + }