From d620e24ba09a2c8f6e34fad7e77b84280db8424b Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Tue, 8 Oct 2013 06:11:43 -0400 Subject: [PATCH] Worked a bit on a new terminal system This is more of me starting back up on global access lists for sentry guns and chests. The idea right now is to create a system like bukkit plugin permissions has. In which a player can create a group, assign command node, and then assign players. As well can assign direct command nodes to the player user instance. These groups will be managed from a GUI that can be access anytime. The data will be saved to a NBT file in the map, and can be access by any object. Objects will not save a copy of the list but will request it to be loaded. --- src/com/builtbroken/common/Group.java | 59 +++++++++++++++++ src/com/builtbroken/common/User.java | 19 ++++++ .../common/science/units/UnitHelper.java | 17 ++++- src/dark/api/ISpecialAccess.java | 1 - src/dark/api/TerminalGroup.java | 50 ++++++++++++++ src/dark/api/TerminalUser.java | 66 +++++++++++++++++++ .../prefab/access => api}/UserAccess.java | 3 +- .../prefab/access/GlobalAccessManager.java | 1 + .../core/prefab/invgui/GuiGlobalList.java | 2 +- .../core/prefab/machine/TileEntityInv.java | 2 +- 10 files changed, 213 insertions(+), 7 deletions(-) create mode 100644 src/com/builtbroken/common/Group.java create mode 100644 src/com/builtbroken/common/User.java create mode 100644 src/dark/api/TerminalGroup.java create mode 100644 src/dark/api/TerminalUser.java rename src/dark/{core/prefab/access => api}/UserAccess.java (97%) diff --git a/src/com/builtbroken/common/Group.java b/src/com/builtbroken/common/Group.java new file mode 100644 index 00000000..b4e33874 --- /dev/null +++ b/src/com/builtbroken/common/Group.java @@ -0,0 +1,59 @@ +package com.builtbroken.common; + +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 +{ + private String groupName; + protected List memebers = new ArrayList(); + + public Group(String name, J... js) + { + this.groupName = name; + if (js != null) + { + for (J obj : js) + { + this.addMemeber(obj); + } + } + } + + protected boolean isValid(J obj) + { + return obj != null && memebers.contains(obj); + } + + public boolean addMemeber(J obj) + { + if (this.isValid(obj)) + { + return memebers.add(obj); + } + return false; + } + + public boolean removeMemeber(J obj) + { + return memebers.remove(obj); + } + + public boolean isMemeber(J obj) + { + return memebers.contains(obj); + } + + public String name() + { + return this.groupName; + } + + public void setName(String name) + { + this.groupName = name; + } +} diff --git a/src/com/builtbroken/common/User.java b/src/com/builtbroken/common/User.java new file mode 100644 index 00000000..bf87fd94 --- /dev/null +++ b/src/com/builtbroken/common/User.java @@ -0,0 +1,19 @@ +package com.builtbroken.common; + +/** Class to track a user. Mainly used to create groups of users + * + * @author Robert Seifert */ +public class User +{ + protected String username; + + protected User() + { + + } + + public User(String username) + { + this.username = username; + } +} diff --git a/src/com/builtbroken/common/science/units/UnitHelper.java b/src/com/builtbroken/common/science/units/UnitHelper.java index 6f12e18d..afc85cb5 100644 --- a/src/com/builtbroken/common/science/units/UnitHelper.java +++ b/src/com/builtbroken/common/science/units/UnitHelper.java @@ -44,7 +44,10 @@ public class UnitHelper { String editedString = input; char[] chars = input.toCharArray(); - String number = ""; + Object unitEnumValue = null; + + String numberAsString = ""; + float number = 0; String units = ""; int toPowerOf = 1; int timeTenToPowerOF = 1; @@ -55,12 +58,20 @@ public class UnitHelper char c = chars[i]; if (numbers.contains(c)) { - number += c; + numberAsString += c; } else { break; } + } + try + { + number = Float.parseFloat(numberAsString); + } + catch (Exception e) + { + } editedString.replaceAll("[0-9]", ""); chars = editedString.toCharArray(); @@ -79,6 +90,8 @@ public class UnitHelper } } + //TODO detect units + return new Pair(unitEnumValue, number); } return def; diff --git a/src/dark/api/ISpecialAccess.java b/src/dark/api/ISpecialAccess.java index 7f39ebe4..29dfdb8a 100644 --- a/src/dark/api/ISpecialAccess.java +++ b/src/dark/api/ISpecialAccess.java @@ -2,7 +2,6 @@ package dark.api; import java.util.List; -import dark.core.prefab.access.UserAccess; /** Used by any object that needs to restrict access to it by a set of usernames * diff --git a/src/dark/api/TerminalGroup.java b/src/dark/api/TerminalGroup.java new file mode 100644 index 00000000..e6450ecc --- /dev/null +++ b/src/dark/api/TerminalGroup.java @@ -0,0 +1,50 @@ +package dark.api; + +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 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/TerminalUser.java b/src/dark/api/TerminalUser.java new file mode 100644 index 00000000..f1fca1e1 --- /dev/null +++ b/src/dark/api/TerminalUser.java @@ -0,0 +1,66 @@ +package dark.api; + +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/core/prefab/access/UserAccess.java b/src/dark/api/UserAccess.java similarity index 97% rename from src/dark/core/prefab/access/UserAccess.java rename to src/dark/api/UserAccess.java index 4248ecec..c13825e6 100644 --- a/src/dark/core/prefab/access/UserAccess.java +++ b/src/dark/api/UserAccess.java @@ -1,11 +1,10 @@ -package dark.core.prefab.access; +package dark.api; import java.util.ArrayList; import java.util.List; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import dark.api.AccessLevel; public class UserAccess { diff --git a/src/dark/core/prefab/access/GlobalAccessManager.java b/src/dark/core/prefab/access/GlobalAccessManager.java index b240e7f9..a7ebd79a 100644 --- a/src/dark/core/prefab/access/GlobalAccessManager.java +++ b/src/dark/core/prefab/access/GlobalAccessManager.java @@ -9,6 +9,7 @@ import java.util.Map.Entry; import net.minecraft.nbt.NBTTagCompound; import dark.api.AccessLevel; +import dark.api.UserAccess; import dark.core.prefab.helpers.NBTFileLoader; public class GlobalAccessManager diff --git a/src/dark/core/prefab/invgui/GuiGlobalList.java b/src/dark/core/prefab/invgui/GuiGlobalList.java index 70816d7d..248d244e 100644 --- a/src/dark/core/prefab/invgui/GuiGlobalList.java +++ b/src/dark/core/prefab/invgui/GuiGlobalList.java @@ -19,9 +19,9 @@ 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.UserAccess; import dark.core.interfaces.IScroll; import dark.core.prefab.ModPrefab; -import dark.core.prefab.access.UserAccess; @SideOnly(Side.CLIENT) public class GuiGlobalList extends GuiContainer implements IScroll diff --git a/src/dark/core/prefab/machine/TileEntityInv.java b/src/dark/core/prefab/machine/TileEntityInv.java index 5c86c702..243aebf3 100644 --- a/src/dark/core/prefab/machine/TileEntityInv.java +++ b/src/dark/core/prefab/machine/TileEntityInv.java @@ -13,9 +13,9 @@ import net.minecraftforge.common.ForgeDirection; import universalelectricity.prefab.tile.TileEntityAdvanced; import dark.api.AccessLevel; import dark.api.ISpecialAccess; +import dark.api.UserAccess; import dark.core.interfaces.IExternalInv; import dark.core.interfaces.IInvBox; -import dark.core.prefab.access.UserAccess; import dark.core.prefab.invgui.InvChest; /** Prefab for simple object who only need basic inv support and nothing more