diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index 3f4ca84..6db220f 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -78,6 +78,7 @@ import org.apache.commons.lang3.Validate; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.ultramine.permission.IPermissionManager; import org.ultramine.server.ConfigurationHandler; import org.ultramine.server.WatchdogThread; import org.ultramine.server.chunk.ChunkIOExecutor; @@ -143,6 +144,7 @@ private static final int TICK_TIME = 1000000000 / TPS; public static double currentTPS = 20; private static long catchupTime = 0; + private IPermissionManager permissionManager; public MinecraftServer(File p_i45281_1_, Proxy p_i45281_2_) { @@ -1433,4 +1435,16 @@ { this.isGamemodeForced = par1; } + + /* ========================================= ULTRAMINE START ======================================*/ + + public IPermissionManager getPermissionManager() + { + return permissionManager; + } + + protected void setPermissionManager(IPermissionManager permissionManager) + { + this.permissionManager = permissionManager; + } } \ No newline at end of file diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java index 7e1eb42..433728e 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -37,6 +37,8 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.ultramine.permission.PermissionRepository; +import org.ultramine.permission.internal.ServerPermissionManager; import org.ultramine.server.ConfigurationHandler; import org.ultramine.server.UltramineServerConfig; import org.ultramine.server.UltramineServerConfig.VanillaConfig; @@ -237,6 +239,7 @@ this.setBuildLimit((this.getBuildLimit() + 8) / 16 * 16); this.setBuildLimit(MathHelper.clamp_int(this.getBuildLimit(), 64, 256)); settings.maxBuildHeight = this.getBuildLimit(); + this.setPermissionManager(new ServerPermissionManager(ConfigurationHandler.getSettingDir(), new PermissionRepository())); // ultramine if (!FMLCommonHandler.instance().handleServerAboutToStart(this)) { return false; } field_155771_h.info("Preparing level \"" + this.getFolderName() + "\""); this.loadAllWorlds(this.getFolderName(), this.getFolderName(), k, worldtype, s2); diff --git a/src/main/java/net/minecraft/server/integrated/IntegratedServer.java b/src/main/java/net/minecraft/server/integrated/IntegratedServer.java index 000207c..62f32ba 100644 --- a/src/main/java/net/minecraft/server/integrated/IntegratedServer.java +++ b/src/main/java/net/minecraft/server/integrated/IntegratedServer.java @@ -28,6 +28,8 @@ import net.minecraftforge.event.world.WorldEvent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.ultramine.permission.PermissionRepository; +import org.ultramine.permission.internal.ClientPermissionManager; @SideOnly(Side.CLIENT) public class IntegratedServer extends MinecraftServer @@ -88,6 +90,7 @@ this.setAllowFlight(true); logger.info("Generating keypair"); this.setKeyPair(CryptManager.createNewKeyPair()); + this.setPermissionManager(new ClientPermissionManager(getServerOwner(), new PermissionRepository())); // ultramine if (!FMLCommonHandler.instance().handleServerAboutToStart(this)) { return false; } this.loadAllWorlds(this.getFolderName(), this.getWorldName(), this.theWorldSettings.getSeed(), this.theWorldSettings.getTerrainType(), this.theWorldSettings.func_82749_j()); this.setMOTD(this.getServerOwner() + " - " + this.worldServers[0].getWorldInfo().getWorldName()); diff --git a/src/main/java/org/ultramine/permission/PermissionRepository.java b/src/main/java/org/ultramine/permission/PermissionRepository.java index 459d7ff..807aed0 100644 --- a/src/main/java/org/ultramine/permission/PermissionRepository.java +++ b/src/main/java/org/ultramine/permission/PermissionRepository.java @@ -6,25 +6,20 @@ import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; public class PermissionRepository { - private Set registeredPermissions; private Map proxyPermissions; public PermissionRepository() { - registeredPermissions = new HashSet(); proxyPermissions = new HashMap(); } public PermissionRepository(PermissionRepository anotherRepository) { - registeredPermissions = new HashSet(anotherRepository.registeredPermissions); proxyPermissions = new HashMap(anotherRepository.proxyPermissions); } @@ -32,39 +27,40 @@ { key = key.toLowerCase(); - if (!proxyPermissions.containsKey(key)) + ProxyPermission permission = proxyPermissions.get(key); + if (permission == null) { if (key.startsWith("^")) - { - proxyPermissions.put(key, new NegativePermission(key, getPermission(key.substring(1)))); - registeredPermissions.add(key); - } + permission = new NegativePermission(key, getPermission(key.substring(1))); + + else if (key.endsWith(".*") || key.equals("*")) + permission = new ProxyPermission(new DummyPermission(key)); + else - proxyPermissions.put(key, new ProxyPermission(key)); + permission = new ProxyPermission(key); + + proxyPermissions.put(key, permission); } - return proxyPermissions.get(key); + return permission; } public ProxyPermission registerPermission(IPermission permission) { - if (registeredPermissions.contains(permission.getKey())) + ProxyPermission proxy = getPermission(permission.getKey()); + if (!proxy.isDummy()) throw new IllegalArgumentException("Permission already registered"); - if (permission.getKey().startsWith("^")) - throw new IllegalArgumentException("^* names are reserved"); - if (permission instanceof ProxyPermission) { proxyPermissions.put(permission.getKey(), (ProxyPermission)permission); return (ProxyPermission)permission; } - - ProxyPermission proxy = getPermission(permission.getKey()); - proxy.link(permission); - - registeredPermissions.add(permission.getKey()); - return proxy; + else + { + proxy.link(permission); + return proxy; + } } public static class ProxyPermission implements IPermission diff --git a/src/main/java/org/ultramine/permission/commands/BasicPermissionCommands.java b/src/main/java/org/ultramine/permission/commands/BasicPermissionCommands.java index 96c57e3..304b49f 100644 --- a/src/main/java/org/ultramine/permission/commands/BasicPermissionCommands.java +++ b/src/main/java/org/ultramine/permission/commands/BasicPermissionCommands.java @@ -178,7 +178,10 @@ else if (context.getAction().equals("meta")) { - + String key = context.get("key").asString(); + String value = context.get("value").asString(); + PermissionHandler.getInstance().setGroupMeta(group, key, value); + context.notifyAdmins("command.pgroup.success.meta", key, value, group); } } diff --git a/src/main/java/org/ultramine/permission/internal/ClientPermissionManager.java b/src/main/java/org/ultramine/permission/internal/ClientPermissionManager.java index 94c0a05..74c3980 100644 --- a/src/main/java/org/ultramine/permission/internal/ClientPermissionManager.java +++ b/src/main/java/org/ultramine/permission/internal/ClientPermissionManager.java @@ -1,8 +1,9 @@ package org.ultramine.permission.internal; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import org.ultramine.permission.GroupPermission; import org.ultramine.permission.IPermissionManager; -import org.ultramine.permission.IPermissionManager; import org.ultramine.permission.PermissionRepository; import org.ultramine.permission.User; import org.ultramine.permission.World; @@ -10,23 +11,26 @@ import java.util.HashMap; import java.util.Map; +@SideOnly(Side.CLIENT) public class ClientPermissionManager implements IPermissionManager { private World global; private PermissionRepository permissionRepository; private Map groups; + private String owner; - public ClientPermissionManager(PermissionRepository permissionRepository) + public ClientPermissionManager(String owner, PermissionRepository permissionRepository) { this.permissionRepository = permissionRepository; this.global = new World(); this.groups = new HashMap(); + this.owner = owner; } @Override public boolean has(String world, String player, String permission) { - return global.checkUserPermission(player, permission); + return player.equalsIgnoreCase(owner) || global.checkUserPermission(player, permission); } @Override diff --git a/src/main/java/org/ultramine/permission/internal/PermissionResolver.java b/src/main/java/org/ultramine/permission/internal/PermissionResolver.java index af826ac..33465ed 100644 --- a/src/main/java/org/ultramine/permission/internal/PermissionResolver.java +++ b/src/main/java/org/ultramine/permission/internal/PermissionResolver.java @@ -60,7 +60,7 @@ public boolean merge(String key, Boolean value, int priority) { boolean result = super.merge(key, value, priority); - if (result && key.endsWith(".*")) + if (result && (key.endsWith(".*") || key.equals("*"))) wildcards.put(key.substring(0, key.length() - 1), value); return result; diff --git a/src/main/java/org/ultramine/permission/internal/ServerPermissionManager.java b/src/main/java/org/ultramine/permission/internal/ServerPermissionManager.java index 5fd6277..2f1c8b8 100644 --- a/src/main/java/org/ultramine/permission/internal/ServerPermissionManager.java +++ b/src/main/java/org/ultramine/permission/internal/ServerPermissionManager.java @@ -1,5 +1,7 @@ package org.ultramine.permission.internal; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import org.ultramine.permission.GroupPermission; import org.ultramine.permission.IPermissionManager; import org.ultramine.permission.PermissionRepository; @@ -11,6 +13,7 @@ import java.util.HashMap; import java.util.Map; +@SideOnly(Side.SERVER) public class ServerPermissionManager implements IPermissionManager { public final static String GLOBAL_WORLD = "global"; diff --git a/src/main/java/org/ultramine/server/PermissionHandler.java b/src/main/java/org/ultramine/server/PermissionHandler.java index bfa413d..d25037b 100644 --- a/src/main/java/org/ultramine/server/PermissionHandler.java +++ b/src/main/java/org/ultramine/server/PermissionHandler.java @@ -1,71 +1,29 @@ package org.ultramine.server; import net.minecraft.command.ICommandSender; -import org.ultramine.permission.IPermission; +import net.minecraft.server.MinecraftServer; import org.ultramine.permission.IPermissionManager; import org.ultramine.permission.PermissionRepository; -import org.ultramine.permission.internal.ClientPermissionManager; -import org.ultramine.permission.internal.ServerPermissionManager; import org.ultramine.permission.internal.UserContainer; public class PermissionHandler implements IPermissionManager { - private static PermissionHandler instance; - private static PermissionRepository mainRepository = new PermissionRepository(); - - public static void registerPermission(IPermission permission) - { - if (instance != null) - getInstance().getRepository().registerPermission(permission); - else - mainRepository.registerPermission(permission); - } - - public static PermissionRepository.ProxyPermission getPermission(String key) - { - if (instance != null) - return getInstance().getRepository().getPermission(key); - - return mainRepository.getPermission(key); - } - - public static void initServer() - { - if (instance != null) - throw new IllegalStateException("Handler is already initialized"); - instance = new PermissionHandler(new ServerPermissionManager(ConfigurationHandler.getSettingDir(), new PermissionRepository(mainRepository))); - } - - public static void initClient() - { - if (instance != null) - throw new IllegalStateException("Handler is already initialized"); - instance = new PermissionHandler(new ClientPermissionManager(new PermissionRepository(mainRepository))); - } - - public static void reset() - { - instance = null; - } + private static PermissionHandler instance = new PermissionHandler(); public static PermissionHandler getInstance() { - if (instance == null) - throw new IllegalStateException("Handler is not initialized"); return instance; } - private IPermissionManager handler; - - private PermissionHandler(IPermissionManager handler) + private IPermissionManager getHandler() { - this.handler = handler; + return MinecraftServer.getServer().getPermissionManager(); } @Override public boolean has(String world, String player, String permission) { - return handler.has(world, player, permission); + return getHandler().has(world, player, permission); } public boolean has(ICommandSender player, String permission) @@ -96,7 +54,7 @@ @Override public void add(String world, String player, String permission) { - handler.add(world, player, permission); + getHandler().add(world, player, permission); } public void add(ICommandSender player, String permission) @@ -107,19 +65,19 @@ @Override public void addToWorld(String world, String permission) { - handler.addToWorld(world, permission); + getHandler().addToWorld(world, permission); } @Override public void addToGroup(String group, String permission) { - handler.addToGroup(group, permission); + getHandler().addToGroup(group, permission); } @Override public void remove(String world, String player, String permission) { - handler.remove(world, player, permission); + getHandler().remove(world, player, permission); } public void remove(ICommandSender player, String permission) @@ -130,19 +88,19 @@ @Override public void removeFromWorld(String world, String permission) { - handler.removeFromWorld(world, permission); + getHandler().removeFromWorld(world, permission); } @Override public void removeFromGroup(String group, String permission) { - handler.removeFromGroup(group, permission); + getHandler().removeFromGroup(group, permission); } @Override public String getMeta(String world, String player, String key) { - return handler.getMeta(world, player, key); + return getHandler().getMeta(world, player, key); } public String getMeta(ICommandSender player, String key) @@ -153,13 +111,13 @@ @Override public void setMeta(String world, String player, String key, String value) { - handler.setMeta(world, player, key, value); + getHandler().setMeta(world, player, key, value); } @Override public void setGroupMeta(String group, String key, String value) { - handler.setGroupMeta(group, key, value); + getHandler().setGroupMeta(group, key, value); } public void setMeta(ICommandSender player, String key, String value) @@ -170,25 +128,25 @@ @Override public void save() { - handler.save(); + getHandler().save(); } @Override public void reload() { - handler.reload(); + getHandler().reload(); } @Override public PermissionRepository getRepository() { - return handler.getRepository(); + return getHandler().getRepository(); } @Override public UserContainer getWorldContainer(String world) { - return handler.getWorldContainer(world); + return getHandler().getWorldContainer(world); } private String worldName(ICommandSender player) diff --git a/src/main/java/org/ultramine/server/UltramineServerModContainer.java b/src/main/java/org/ultramine/server/UltramineServerModContainer.java index f3551f5..f43619a 100644 --- a/src/main/java/org/ultramine/server/UltramineServerModContainer.java +++ b/src/main/java/org/ultramine/server/UltramineServerModContainer.java @@ -81,15 +81,6 @@ @Subscribe public void serverStarting(FMLServerStartingEvent e) { - switch (e.getSide()) - { - case CLIENT: - PermissionHandler.initClient(); - break; - case SERVER: - PermissionHandler.initServer(); - break; - } e.registerArgumentHandlers(DefaultCompleters.class); e.registerCommands(BasicPermissionCommands.class); } @@ -97,7 +88,6 @@ @Subscribe public void stopServer(FMLServerStoppedEvent e) { - PermissionHandler.reset(); } @Override diff --git a/src/main/resources/assets/ultramine/lang/en_US.lang b/src/main/resources/assets/ultramine/lang/en_US.lang index 38b2c22..f36faf9 100644 --- a/src/main/resources/assets/ultramine/lang/en_US.lang +++ b/src/main/resources/assets/ultramine/lang/en_US.lang @@ -21,4 +21,4 @@ command.pgroup.description=Add/remove permissions OR set meta for group command.pgroup.success.add=Add permission <%s> to group <%s> command.pgroup.success.remove=Remove permission <%s> from group <%s> -command.puser.success.meta=Set meta <%s> to <%s> for group <%s> \ No newline at end of file +command.pgroup.success.meta=Set meta <%s> to <%s> for group <%s> \ No newline at end of file