diff --git a/src/main/java/cpw/mods/fml/common/event/FMLServerStartingEvent.java b/src/main/java/cpw/mods/fml/common/event/FMLServerStartingEvent.java index ecdd612..638e6c2 100644 --- a/src/main/java/cpw/mods/fml/common/event/FMLServerStartingEvent.java +++ b/src/main/java/cpw/mods/fml/common/event/FMLServerStartingEvent.java @@ -21,6 +21,7 @@ import org.ultramine.commands.syntax.ArgumentsPatternParser; import org.ultramine.commands.syntax.IArgumentCompletionHandler; import org.ultramine.commands.syntax.IArgumentValidationHandler; +import org.ultramine.server.PermissionHandler; public class FMLServerStartingEvent extends FMLStateEvent { @@ -76,6 +77,11 @@ getArgumentsParser().registerHandlers(holder); } + public PermissionHandler getPermissionHandler() + { + return PermissionHandler.getInstance(); + } + private CommandRegistry getCommandRegistry() { return ((CommandHandler) getServer().getCommandManager()).getRegistry(); diff --git a/src/main/java/net/minecraft/command/ServerCommandManager.java b/src/main/java/net/minecraft/command/ServerCommandManager.java index e363828..50a95a0 100644 --- a/src/main/java/net/minecraft/command/ServerCommandManager.java +++ b/src/main/java/net/minecraft/command/ServerCommandManager.java @@ -32,6 +32,8 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.EnumChatFormatting; +import org.ultramine.permission.MinecraftPermissions; +import org.ultramine.server.PermissionHandler; public class ServerCommandManager extends CommandHandler implements IAdminCommand { @@ -118,7 +120,7 @@ { EntityPlayerMP entityplayermp = (EntityPlayerMP)iterator.next(); - if (entityplayermp != par1ICommandSender && MinecraftServer.getServer().getConfigurationManager().isPlayerOpped(entityplayermp.getCommandSenderName())) + if (entityplayermp != par1ICommandSender && PermissionHandler.getInstance().hasGlobally(entityplayermp, MinecraftPermissions.COMMAND_NOTIFICATION)) { entityplayermp.addChatMessage(chatcomponenttranslation); } diff --git a/src/main/java/net/minecraft/command/server/CommandOp.java b/src/main/java/net/minecraft/command/server/CommandOp.java index b461fdd..b7ecce9 100644 --- a/src/main/java/net/minecraft/command/server/CommandOp.java +++ b/src/main/java/net/minecraft/command/server/CommandOp.java @@ -2,6 +2,8 @@ import java.util.ArrayList; import java.util.List; +import java.util.Set; + import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; import net.minecraft.command.WrongUsageException; @@ -47,12 +49,13 @@ ArrayList arraylist = new ArrayList(); String[] astring1 = MinecraftServer.getServer().getAllUsernames(); int i = astring1.length; + Set ops = MinecraftServer.getServer().getConfigurationManager().getOps(); for (int j = 0; j < i; ++j) { String s1 = astring1[j]; - if (!MinecraftServer.getServer().getConfigurationManager().isPlayerOpped(s1) && doesStringStartWith(s, s1)) + if (!ops.contains(s1) && doesStringStartWith(s, s1)) { arraylist.add(s1); } diff --git a/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java b/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java index 326fca5..1236103 100644 --- a/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java +++ b/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java @@ -896,7 +896,7 @@ public boolean canCommandSenderUseCommand(int par1, String par2Str) { - return "seed".equals(par2Str) && !this.mcServer.isDedicatedServer() ? true : (!"tell".equals(par2Str) && !"help".equals(par2Str) && !"me".equals(par2Str) ? (this.mcServer.getConfigurationManager().isPlayerOpped(this.getCommandSenderName()) ? this.mcServer.getOpPermissionLevel() >= par1 : false) : true); + return true; } public String getPlayerIP() diff --git a/src/main/java/net/minecraft/network/NetHandlerPlayServer.java b/src/main/java/net/minecraft/network/NetHandlerPlayServer.java index 1e9e69e..ef29bb8 100644 --- a/src/main/java/net/minecraft/network/NetHandlerPlayServer.java +++ b/src/main/java/net/minecraft/network/NetHandlerPlayServer.java @@ -86,12 +86,11 @@ import org.apache.logging.log4j.Logger; import net.minecraftforge.common.ForgeHooks; -import net.minecraftforge.common.MinecraftForge; import cpw.mods.fml.common.eventhandler.Event; import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.event.ServerChatEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action; +import org.ultramine.permission.MinecraftPermissions; +import org.ultramine.server.PermissionHandler; public class NetHandlerPlayServer implements INetHandlerPlayServer { @@ -721,7 +720,7 @@ this.chatSpamThresholdCount += 20; - if (this.chatSpamThresholdCount > 200 && !this.serverController.getConfigurationManager().isPlayerOpped(this.playerEntity.getCommandSenderName())) + if (this.chatSpamThresholdCount > 200 && !PermissionHandler.getInstance().has(playerEntity, MinecraftPermissions.ALLOW_SPAM)) { this.kickPlayerFromServer("disconnect.spam"); } @@ -1278,4 +1277,4 @@ } } } -} \ No newline at end of file +} diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedPlayerList.java b/src/main/java/net/minecraft/server/dedicated/DedicatedPlayerList.java index 800f698..1779d8f 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedPlayerList.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedPlayerList.java @@ -10,11 +10,11 @@ import java.io.PrintWriter; import java.util.Iterator; -import net.minecraft.server.MinecraftServer; import net.minecraft.server.management.ServerConfigurationManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.ultramine.permission.MinecraftPermissions; import org.ultramine.server.ConfigurationHandler; import org.ultramine.server.PermissionHandler; @@ -176,7 +176,9 @@ public boolean isAllowedToLogin(String par1Str) { par1Str = par1Str.trim().toLowerCase(); - return !this.isWhiteListEnabled() || this.isPlayerOpped(par1Str) || this.getWhiteListedPlayers().contains(par1Str); + return !this.isWhiteListEnabled() + || this.getWhiteListedPlayers().contains(par1Str) + || PermissionHandler.getInstance().hasGlobally(par1Str, MinecraftPermissions.IGNORE_WHITE_LIST); } public DedicatedServer getServerInstance() diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java index 289a894..ac81398 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -26,7 +26,6 @@ import net.minecraft.profiler.PlayerUsageSnooper; import net.minecraft.server.MinecraftServer; import net.minecraft.server.gui.MinecraftServerGui; -import net.minecraft.server.management.ServerConfigurationManager; import net.minecraft.util.ChunkCoordinates; import net.minecraft.util.CryptManager; import net.minecraft.util.MathHelper; @@ -38,11 +37,11 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.ultramine.permission.MinecraftPermissions; import org.ultramine.permission.PermissionRepository; import org.ultramine.permission.internal.ServerPermissionManager; import org.ultramine.server.ConfigurationHandler; -import org.ultramine.server.MultiWorld; -import org.ultramine.server.UltramineServerConfig; +import org.ultramine.server.PermissionHandler; import org.ultramine.server.UltramineServerConfig.VanillaConfig; import org.ultramine.server.WorldsConfig.WorldConfig; import org.ultramine.server.util.BasicTypeParser; @@ -448,7 +447,7 @@ { return false; } - else if (this.getConfigurationManager().isPlayerOpped(par5EntityPlayer.getCommandSenderName())) + else if (PermissionHandler.getInstance().has(par5EntityPlayer, MinecraftPermissions.IGNORE_SPAWN_PROTECTION)) { return false; } @@ -468,7 +467,7 @@ public int getOpPermissionLevel() { - return settings.opPermissionLevel; + return 4; } public void func_143006_e(int par1) diff --git a/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java b/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java index ecc0448..e63bb08 100644 --- a/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java +++ b/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java @@ -67,9 +67,9 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.ultramine.server.ConfigurationHandler; +import org.ultramine.permission.MinecraftPermissions; import org.ultramine.server.PermissionHandler; -import org.ultramine.server.util.OpPermissionProxySet; +import org.ultramine.permission.internal.OpPermissionProxySet; import org.ultramine.server.chunk.IChunkLoadCallback; public abstract class ServerConfigurationManager @@ -673,23 +673,25 @@ public void addOp(String par1Str) { - PermissionHandler.getInstance().add("global", par1Str, OpPermissionProxySet.OP_PERMISSION); + getOps().add(par1Str); } public void removeOp(String par1Str) { - PermissionHandler.getInstance().remove("global", par1Str, OpPermissionProxySet.OP_PERMISSION); + getOps().remove(par1Str); } public boolean isAllowedToLogin(String par1Str) { par1Str = par1Str.trim().toLowerCase(); - return !this.whiteListEnforced || PermissionHandler.getInstance().has("global", par1Str, OpPermissionProxySet.OP_PERMISSION) || this.whiteListedPlayers.contains(par1Str); + return !this.whiteListEnforced + || this.whiteListedPlayers.contains(par1Str) + || PermissionHandler.getInstance().hasGlobally(par1Str, MinecraftPermissions.IGNORE_WHITE_LIST); } public boolean isPlayerOpped(String par1Str) { - return PermissionHandler.getInstance().has("global", par1Str, OpPermissionProxySet.OP_PERMISSION) || this.mcServer.isSinglePlayer() && this.mcServer.worldServers[0].getWorldInfo().areCommandsAllowed() && this.mcServer.getServerOwner().equalsIgnoreCase(par1Str) || this.commandsAllowedForAll; + return PermissionHandler.getInstance().hasGlobally(par1Str, MinecraftPermissions.OP) || this.mcServer.isSinglePlayer() && this.mcServer.worldServers[0].getWorldInfo().areCommandsAllowed() && this.mcServer.getServerOwner().equalsIgnoreCase(par1Str) || this.commandsAllowedForAll; } public EntityPlayerMP getPlayerForUsername(String par1Str) @@ -893,7 +895,7 @@ @Deprecated public Set getOps() { - return new OpPermissionProxySet(); + return OpPermissionProxySet.INSTANCE; } public void loadWhiteList() {} diff --git a/src/main/java/org/ultramine/commands/CommandContext.java b/src/main/java/org/ultramine/commands/CommandContext.java index 0ef9b91..6a03abc 100644 --- a/src/main/java/org/ultramine/commands/CommandContext.java +++ b/src/main/java/org/ultramine/commands/CommandContext.java @@ -5,6 +5,7 @@ import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.server.MinecraftServer; @@ -90,7 +91,7 @@ public boolean senderIsServer() { - return sender.getCommandSenderName().equals("Server"); + return !(sender instanceof EntityPlayer); } public EntityPlayerMP getSenderAsPlayer() diff --git a/src/main/java/org/ultramine/commands/HandlerBasedCommand.java b/src/main/java/org/ultramine/commands/HandlerBasedCommand.java index b8dd50c..3136982 100644 --- a/src/main/java/org/ultramine/commands/HandlerBasedCommand.java +++ b/src/main/java/org/ultramine/commands/HandlerBasedCommand.java @@ -2,6 +2,7 @@ import net.minecraft.command.ICommandSender; import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayer; import org.apache.commons.lang3.ArrayUtils; import org.ultramine.commands.syntax.ArgumentsPattern; import org.ultramine.server.PermissionHandler; @@ -94,7 +95,7 @@ @Override public boolean canCommandSenderUseCommand(ICommandSender var1) { - return (isUsableFromServer && var1.getCommandSenderName().equals("Server")) || PermissionHandler.getInstance().hasAny(var1, permissions); + return (isUsableFromServer && !(var1 instanceof EntityPlayer)) || PermissionHandler.getInstance().hasAny(var1, permissions); } @Override diff --git a/src/main/java/org/ultramine/commands/VanillaCommandWrapper.java b/src/main/java/org/ultramine/commands/VanillaCommandWrapper.java index 0042803..e09c945 100644 --- a/src/main/java/org/ultramine/commands/VanillaCommandWrapper.java +++ b/src/main/java/org/ultramine/commands/VanillaCommandWrapper.java @@ -2,6 +2,7 @@ import net.minecraft.command.ICommand; import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; import org.ultramine.server.PermissionHandler; import java.util.List; @@ -46,7 +47,7 @@ @Override public boolean canCommandSenderUseCommand(ICommandSender var1) { - return (var1.getCommandSenderName().equals("Server") || PermissionHandler.getInstance().has(var1, permission)) && wrappedCommand.canCommandSenderUseCommand(var1); + return (PermissionHandler.getInstance().has(var1, permission) || !(var1 instanceof EntityPlayer)) && wrappedCommand.canCommandSenderUseCommand(var1); } @Override diff --git a/src/main/java/org/ultramine/permission/GroupPermission.java b/src/main/java/org/ultramine/permission/GroupPermission.java index c28ff2b..02b11f0 100644 --- a/src/main/java/org/ultramine/permission/GroupPermission.java +++ b/src/main/java/org/ultramine/permission/GroupPermission.java @@ -66,6 +66,13 @@ listener.makeDirty(); } + @Override + public void calculate() + { + super.calculate(); + getPermissionResolver().merge(key, true, Integer.MAX_VALUE); + } + private int getPriority() { return getMetaResolver().getInt("priority"); diff --git a/src/main/java/org/ultramine/permission/MinecraftPermissions.java b/src/main/java/org/ultramine/permission/MinecraftPermissions.java new file mode 100644 index 0000000..22305a5 --- /dev/null +++ b/src/main/java/org/ultramine/permission/MinecraftPermissions.java @@ -0,0 +1,10 @@ +package org.ultramine.permission; + +public final class MinecraftPermissions +{ + public static final String OP = "minecraft.op"; + public static final String COMMAND_NOTIFICATION = "minecraft.cmd_notify"; + public static final String ALLOW_SPAM = "minecraft.allow_spam"; + public static final String IGNORE_SPAWN_PROTECTION = "minecraft.ignore_spawn_prot"; + public static final String IGNORE_WHITE_LIST = "minecraft.ignore_white_list"; +} diff --git a/src/main/java/org/ultramine/permission/PermissionRepository.java b/src/main/java/org/ultramine/permission/PermissionRepository.java index 807aed0..f7c5abe 100644 --- a/src/main/java/org/ultramine/permission/PermissionRepository.java +++ b/src/main/java/org/ultramine/permission/PermissionRepository.java @@ -63,6 +63,12 @@ } } + public void lockPermissions(String... permissions) + { + for (String permission : permissions) + getPermission(permission).lock(); + } + public static class ProxyPermission implements IPermission { private IPermission wrappedPermission; @@ -140,6 +146,12 @@ wrappedPermission.unsubscribe(listener); } + private void lock() + { + listeners = null; + isDummy = false; + } + private void link(IPermission permission) { wrappedPermission = permission; @@ -148,8 +160,7 @@ permission.subscribe(listener); listener.makeDirty(); } - listeners = null; - isDummy = false; + lock(); } @Override diff --git a/src/main/java/org/ultramine/permission/World.java b/src/main/java/org/ultramine/permission/World.java index 21b30d0..d33f363 100644 --- a/src/main/java/org/ultramine/permission/World.java +++ b/src/main/java/org/ultramine/permission/World.java @@ -51,7 +51,11 @@ data.users = new HashMap(users.size()); for (User user : users.values()) - data.users.put(user.getName(), new HolderData(user)); + { + HolderData holderData = new HolderData(user); + if (!holderData.isEmpty()) + data.users.put(user.getName(), new HolderData(user)); + } return data; } @@ -99,5 +103,10 @@ permissions = holder.getInnerPermissions(); meta = holder.getInnerMeta(); } + + public boolean isEmpty() + { + return permissions.isEmpty() && meta.isEmpty(); + } } } diff --git a/src/main/java/org/ultramine/permission/internal/ClientPermissionManager.java b/src/main/java/org/ultramine/permission/internal/ClientPermissionManager.java index 74c3980..7a87963 100644 --- a/src/main/java/org/ultramine/permission/internal/ClientPermissionManager.java +++ b/src/main/java/org/ultramine/permission/internal/ClientPermissionManager.java @@ -14,6 +14,10 @@ @SideOnly(Side.CLIENT) public class ClientPermissionManager implements IPermissionManager { + private static final String[] DEFAULT_PERMISSIONS = new String[] { + "command.vanilla.seed", "command.vanilla.tell", "command.vanilla.help", "command.vanilla.me" + }; + private World global; private PermissionRepository permissionRepository; private Map groups; @@ -25,6 +29,9 @@ this.global = new World(); this.groups = new HashMap(); this.owner = owner; + + for (String permission : DEFAULT_PERMISSIONS) + global.getDefaultPermissions().addPermission(permissionRepository.getPermission(permission)); } @Override diff --git a/src/main/java/org/ultramine/permission/internal/OpPermissionProxySet.java b/src/main/java/org/ultramine/permission/internal/OpPermissionProxySet.java new file mode 100644 index 0000000..90b9a62 --- /dev/null +++ b/src/main/java/org/ultramine/permission/internal/OpPermissionProxySet.java @@ -0,0 +1,119 @@ +package org.ultramine.permission.internal; + +import org.ultramine.server.PermissionHandler; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Set; + +/** + * Never use it! For backward сompatibility only. + */ +@Deprecated +public class OpPermissionProxySet implements Set +{ + public static final OpPermissionProxySet INSTANCE = new OpPermissionProxySet(); + public static final String OP_GROUP = "minecraft.op_group"; + + private OpPermissionProxySet() + { + } + + @Override + public int size() + { + return ops().size(); + } + + @Override + public boolean isEmpty() + { + return ops().isEmpty(); + } + + @Override + public boolean contains(Object o) + { + return PermissionHandler.getInstance().hasGlobally((String)o, OP_GROUP); + } + + @Override + public Iterator iterator() + { + return ops().iterator(); + } + + @Override + public Object[] toArray() + { + return ops().toArray(); + } + + @Override + public T[] toArray(T[] a) + { + return ops().toArray(a); + } + + @Override + public boolean add(String s) + { + PermissionHandler.getInstance().add(ServerPermissionManager.GLOBAL_WORLD, s, OP_GROUP); + return true; + } + + @Override + public boolean remove(Object o) + { + PermissionHandler.getInstance().remove(ServerPermissionManager.GLOBAL_WORLD, o.toString(), OP_GROUP); + return true; + } + + @Override + public boolean containsAll(Collection c) + { + return ops().containsAll(c); + } + + @Override + public boolean addAll(Collection c) + { + for (String user : c) + add(user); + return true; + } + + @Override + public boolean retainAll(Collection c) + { + Set ops = ops(); + for (String user : ops) + { + if (!c.contains(user)) + remove(user); + } + return true; + } + + @Override + public boolean removeAll(Collection c) + { + for (Object user : c) + remove(user); + return true; + } + + @Override + public void clear() + { + Set ops = ops(); + for (String user : ops) + remove(user); + } + + private Set ops() + { + return PermissionHandler.getInstance() + .getWorldContainer(ServerPermissionManager.GLOBAL_WORLD).getAllWithPermission(OP_GROUP); + } +} diff --git a/src/main/java/org/ultramine/server/PermissionHandler.java b/src/main/java/org/ultramine/server/PermissionHandler.java index d25037b..cf45c80 100644 --- a/src/main/java/org/ultramine/server/PermissionHandler.java +++ b/src/main/java/org/ultramine/server/PermissionHandler.java @@ -2,8 +2,10 @@ import net.minecraft.command.ICommandSender; import net.minecraft.server.MinecraftServer; +import org.ultramine.permission.GroupPermission; import org.ultramine.permission.IPermissionManager; import org.ultramine.permission.PermissionRepository; +import org.ultramine.permission.internal.ServerPermissionManager; import org.ultramine.permission.internal.UserContainer; public class PermissionHandler implements IPermissionManager @@ -31,6 +33,16 @@ return has(worldName(player), player.getCommandSenderName(), permission); } + public boolean hasGlobally(String player, String permission) + { + return has(ServerPermissionManager.GLOBAL_WORLD, player, permission); + } + + public boolean hasGlobally(ICommandSender player, String permission) + { + return has(ServerPermissionManager.GLOBAL_WORLD, player.getCommandSenderName(), permission); + } + public boolean has(ICommandSender player, String... permissions) { if (permissions == null) @@ -149,6 +161,15 @@ return getHandler().getWorldContainer(world); } + public GroupPermission createGroup(String name, String... permissions) + { + GroupPermission group = new GroupPermission(name); + for (String permission : permissions) + group.addPermission(getRepository().getPermission(permission)); + getRepository().registerPermission(group); + return group; + } + private String worldName(ICommandSender player) { return player.getEntityWorld().getWorldInfo().getWorldName(); diff --git a/src/main/java/org/ultramine/server/UltramineServerConfig.java b/src/main/java/org/ultramine/server/UltramineServerConfig.java index 065b902..785f9cf 100644 --- a/src/main/java/org/ultramine/server/UltramineServerConfig.java +++ b/src/main/java/org/ultramine/server/UltramineServerConfig.java @@ -18,7 +18,6 @@ public static class VanillaConfig { - public int opPermissionLevel = 4; public boolean enableQuery = false; public int queryPort = 25565; public boolean allowFlight = false; diff --git a/src/main/java/org/ultramine/server/UltramineServerModContainer.java b/src/main/java/org/ultramine/server/UltramineServerModContainer.java index ea0154c..10c244f 100644 --- a/src/main/java/org/ultramine/server/UltramineServerModContainer.java +++ b/src/main/java/org/ultramine/server/UltramineServerModContainer.java @@ -26,6 +26,7 @@ import org.ultramine.commands.basic.VanillaCommands; import org.ultramine.commands.syntax.DefaultCompleters; import org.ultramine.permission.commands.BasicPermissionCommands; +import org.ultramine.permission.internal.OpPermissionProxySet; public class UltramineServerModContainer extends DummyModContainer { @@ -103,6 +104,8 @@ e.registerArgumentHandlers(DefaultCompleters.class); e.registerCommands(BasicPermissionCommands.class); e.registerCommands(VanillaCommands.class); + + e.getPermissionHandler().createGroup(OpPermissionProxySet.OP_GROUP, "*"); } @Subscribe diff --git a/src/main/java/org/ultramine/server/util/OpPermissionProxySet.java b/src/main/java/org/ultramine/server/util/OpPermissionProxySet.java deleted file mode 100644 index d97a4e9..0000000 --- a/src/main/java/org/ultramine/server/util/OpPermissionProxySet.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.ultramine.server.util; - -import org.ultramine.permission.internal.ServerPermissionManager; -import org.ultramine.server.PermissionHandler; - -import java.util.Collection; -import java.util.Iterator; -import java.util.Set; - -/** - * Never use it! For backward сompatibility only. - */ -@Deprecated -public class OpPermissionProxySet implements Set -{ - public static final String OP_PERMISSION = "minecraft.op"; - - @Override - public int size() - { - return ops().size(); - } - - @Override - public boolean isEmpty() - { - return ops().isEmpty(); - } - - @Override - public boolean contains(Object o) - { - return ops().contains(o); - } - - @Override - public Iterator iterator() - { - return ops().iterator(); - } - - @Override - public Object[] toArray() - { - return ops().toArray(); - } - - @Override - public T[] toArray(T[] a) - { - return ops().toArray(a); - } - - @Override - public boolean add(String s) - { - PermissionHandler.getInstance().add("global", s, OP_PERMISSION); - return true; - } - - @Override - public boolean remove(Object o) - { - PermissionHandler.getInstance().remove("global", o.toString(), OP_PERMISSION); - return true; - } - - @Override - public boolean containsAll(Collection c) - { - return ops().containsAll(c); - } - - @Override - public boolean addAll(Collection c) - { - for (String user : c) - add(user); - return true; - } - - @Override - public boolean retainAll(Collection c) - { - Set ops = ops(); - for (String user : ops) - { - if (!c.contains(user)) - remove(user); - } - return true; - } - - @Override - public boolean removeAll(Collection c) - { - for (Object user : c) - remove(user); - return true; - } - - @Override - public void clear() - { - Set ops = ops(); - for (String user : ops) - remove(user); - } - - private Set ops() - { - return PermissionHandler.getInstance() - .getWorldContainer(ServerPermissionManager.GLOBAL_WORLD).getAllWithPermission(OP_PERMISSION); - } -} diff --git a/src/test/groovy/org/ultramine/permission/PermissionRepositoryTest.groovy b/src/test/groovy/org/ultramine/permission/PermissionRepositoryTest.groovy index 674c8f3..dfd67a9 100644 --- a/src/test/groovy/org/ultramine/permission/PermissionRepositoryTest.groovy +++ b/src/test/groovy/org/ultramine/permission/PermissionRepositoryTest.groovy @@ -155,13 +155,13 @@ then: "Negative permission also updates" perm.check("p1") == FALSE perm.check("p2") == FALSE - perm.check("group2") == UNRESOLVED + perm.check("group2") == FALSE perm.check("p3") == TRUE and: "Group1 updates too" group1.check("p1") == TRUE group1.check("p2") == TRUE - group1.check("group2") == UNRESOLVED + group1.check("group2") == TRUE group1.check("p3") == FALSE } }