From 76eb00575bcd855f74c1cf284a09a9c58f928f7d Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 14 Aug 2011 21:55:22 +0200 Subject: [PATCH 01/20] Update Permissions3.jar in lib folder to 3.1.6 --- lib/Permissions3.jar | Bin 72897 -> 78579 bytes 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 lib/Permissions3.jar diff --git a/lib/Permissions3.jar b/lib/Permissions3.jar old mode 100755 new mode 100644 index 7e2741283186542b7fd0d8c6c0470cb6da46b6c7..31c3e5d9945be41fadcbb4bf068a28b08f684e90 GIT binary patch delta 67232 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

    D)-k5e!WZ#=*>vO^)@62Rm?K-rpI$lKyV#7tj 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 WhDsrEf^mX{qk@5{l7d_a_WuAHzZp0H delta 61855 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 O0CXz+js~?q%>M_FhnjN$ From a2fa666fd5b1cd3f6fac82da1063268589fd967a Mon Sep 17 00:00:00 2001 From: snowleo Date: Sun, 14 Aug 2011 21:56:40 +0200 Subject: [PATCH 02/20] GroupManager update to Permissions 3.1.6 API done by ElgarL --- .../nbproject/project.properties | 21 +- .../src/com/nijiko/Messaging.class | Bin 2604 -> 0 bytes .../src/com/nijiko/Misc$string.class | Bin 982 -> 0 bytes .../src/com/nijiko/Misc.class | Bin 3980 -> 0 bytes .../configuration/ConfigurationHandler.class | Bin 788 -> 0 bytes .../configuration/DefaultConfiguration.class | Bin 435 -> 0 bytes .../com/nijiko/database/Wrapper$Type.class | Bin 1107 -> 0 bytes .../src/com/nijiko/database/Wrapper.class | Bin 5428 -> 0 bytes .../src/com/nijiko/permissions/Control.class | Bin 27337 -> 0 bytes .../permissions/PermissionHandler.class | Bin 3198 -> 0 bytes .../bukkit/Permissions/Permissions.java | 120 ++--- .../permissions/NijikoPermissionsProxy.java | 469 ++++++++++++------ EssentialsGroupBridge/src/plugin.yml | 2 +- .../nbproject/project.properties | 13 + .../groupmanager/GMConfiguration.java | 2 +- .../anjocaido/groupmanager/GroupManager.java | 28 +- .../anjocaido/groupmanager/data/DataUnit.java | 19 +- .../anjocaido/groupmanager/data/Group.java | 12 +- .../groupmanager/data/GroupVariables.java | 2 +- .../org/anjocaido/groupmanager/data/User.java | 46 +- .../groupmanager/data/UserVariables.java | 13 +- .../groupmanager/data/Variables.java | 14 +- .../dataholder/OverloadedWorldHolder.java | 7 +- .../dataholder/WorldDataHolder.java | 92 ++-- .../dataholder/worlds/WorldsHolder.java | 17 +- .../permissions/AnjoPermissionsHandler.java | 204 +++++++- .../PermissionsReaderInterface.java | 77 ++- .../groupmanager/utils/GMLoggerHandler.java | 0 .../utils/GroupManagerPermissions.java | 1 + .../utils/PermissionCheckResult.java | 1 + .../utils/StringPermissionComparator.java | 19 +- .../anjocaido/groupmanager/utils/Tasks.java | 53 +- 32 files changed, 816 insertions(+), 416 deletions(-) delete mode 100644 EssentialsGroupBridge/src/com/nijiko/Messaging.class delete mode 100644 EssentialsGroupBridge/src/com/nijiko/Misc$string.class delete mode 100644 EssentialsGroupBridge/src/com/nijiko/Misc.class delete mode 100644 EssentialsGroupBridge/src/com/nijiko/configuration/ConfigurationHandler.class delete mode 100644 EssentialsGroupBridge/src/com/nijiko/configuration/DefaultConfiguration.class delete mode 100644 EssentialsGroupBridge/src/com/nijiko/database/Wrapper$Type.class delete mode 100644 EssentialsGroupBridge/src/com/nijiko/database/Wrapper.class delete mode 100644 EssentialsGroupBridge/src/com/nijiko/permissions/Control.class delete mode 100644 EssentialsGroupBridge/src/com/nijiko/permissions/PermissionHandler.class mode change 100644 => 100755 EssentialsGroupBridge/src/com/nijikokun/bukkit/Permissions/Permissions.java mode change 100644 => 100755 EssentialsGroupBridge/src/org/anjocaido/groupmanager/permissions/NijikoPermissionsProxy.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/data/DataUnit.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/data/GroupVariables.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/data/UserVariables.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Variables.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GMLoggerHandler.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GroupManagerPermissions.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/PermissionCheckResult.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/StringPermissionComparator.java mode change 100644 => 100755 EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/Tasks.java diff --git a/EssentialsGroupBridge/nbproject/project.properties b/EssentialsGroupBridge/nbproject/project.properties index 30137e428..28cec30c9 100644 --- a/EssentialsGroupBridge/nbproject/project.properties +++ b/EssentialsGroupBridge/nbproject/project.properties @@ -4,6 +4,19 @@ annotation.processing.run.all.processors=true annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output application.title=EssentialsGroupBridge application.vendor=gabrielcouto +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=2 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=2 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=2 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=120 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap=none +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=project +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width=4 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab=4 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size=4 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width=120 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-line-wrap=none build.classes.dir=${build.dir}/classes build.classes.excludes=**/*.java,**/*.form # This directory is removed when the project is cleaned: @@ -26,16 +39,16 @@ dist.jar=${dist.dir}/EssentialsGroupBridge.jar dist.javadoc.dir=${dist.dir}/javadoc endorsed.classpath= excludes= -file.reference.craftbukkit-0.0.1-SNAPSHOT.jar=..\\lib\\craftbukkit-0.0.1-SNAPSHOT.jar -file.reference.Permissions.jar=..\\lib\\Permissions.jar +file.reference.bukkit-0.0.1-SNAPSHOT.jar=../lib/bukkit-0.0.1-SNAPSHOT.jar +file.reference.Permissions3.jar=../lib/Permissions3.jar includes=** jar.archive.disabled=${jnlp.enabled} jar.compress=true jar.index=${jnlp.enabled} javac.classpath=\ ${reference.EssentialsGroupManager.jar}:\ - ${file.reference.craftbukkit-0.0.1-SNAPSHOT.jar}:\ - ${file.reference.Permissions.jar} + ${file.reference.Permissions3.jar}:\ + ${file.reference.bukkit-0.0.1-SNAPSHOT.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false diff --git a/EssentialsGroupBridge/src/com/nijiko/Messaging.class b/EssentialsGroupBridge/src/com/nijiko/Messaging.class deleted file mode 100644 index f563d00856f3b150ad0a22dbca0d991c3d2b249c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2604 zcma)7Yj+b>6y4J_$utcGr?k8*0%A$hmXt!vqp<=-P)Q3~tc8j?Nr!gY=_E`h#o_}& z6czA|isFM${i?WDL0yXvx|SdOCH@Gt?lT$MK!ZzGlQZml?!No%bLQrce}29Vpab89 zQKevcHaD5H&2e)gm+UhN1%1@CN5iOAuxwnP(vy~Mk0uXg#*M72Ae6WCX~R*lI-PSy zlbPbggy|*?+cn+kW(S@_rXxgqlqAZWl_{YC6zm778Eq5E6J9#b!W6VNkt0MvGhU( z1Fplmx`+Q46knXBqEUg;8o^4e4rA3_?v%KrSc3;CAe*yY-LxrkO}T*HG2Iz3P8JP2 zYjnqt3DMdp9>O{W!9w0LDR@(PzArdlL9y)J5XHmTs37bZ>`9gm?knGY*J)+d+=W*t zllpUx$q~>k>B%Dh6x7@?m<85X5GO;DGi{g4ipkHD90G1puw=m1vlD%K-fM0cF&3WJ zodTsdmrK7>_~OGOoS=>Djs8b413sxREABM=uy$js^sK$6^~Oy z%GRf*2_Nv`Eh=b8I5p}RhE4pSk9Vl(lXTb6Ey9Ox}Z-nG{x?Jy?Xa)!IPH!kF-S!yQMw_Uqq2ado8}iwJ^R? zu=0NQcobiYQ?+tb>34y`A_KXilQs66a%I=e|6FVq=dqsj0sgY^j*wfPPc={x=0^}9 z&M5za%8!Wrz=tYC`5j>d)}b0}vBX1#f|tF&Ey*YwgNd71y09(efu$|cQUV@;#>5)b zV>uBy^Ka6sj6;E*8T7X_b!ZKw1kH@{vnSK9as&K}j? zyot9Gvv^0l#IISre=l3MjI9wLdwr_GC-~H_dn;pUAS=wV!)6uA2!ivk!WDex6ZCpb z25J*6xA6H-xLSpUxh}m9XW9949!(>Ynd;NXlPHquzJd!rVLx+3QT+`>e#cUNv&Rd> ir2(y@3BX0Zn3wpPTrSgC?-waU#u?Gb^$j1Z@a@0#cs)1( diff --git a/EssentialsGroupBridge/src/com/nijiko/Misc$string.class b/EssentialsGroupBridge/src/com/nijiko/Misc$string.class deleted file mode 100644 index 124b535c30332a73a51c17ddd1463f120e8976f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 982 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 H%E8fJsL98- diff --git a/EssentialsGroupBridge/src/com/nijiko/configuration/DefaultConfiguration.class b/EssentialsGroupBridge/src/com/nijiko/configuration/DefaultConfiguration.class deleted file mode 100644 index 06d9ee23b24470eaab2cb4d4489dffb97c851b92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 435 zcmb7AJx_!{5Pb`Ha2%c|e#O#GFHsU(KbkXEL<`LId$5O#uxns3@n=~W6AOQUKgu|u zi550yli8V<_h#nJ`^W1WfMe{quowiWC%UauaVfhAyMOsV>O47nw3WHkmv}pf$qYagm>+?C|cP51P)4OGXMYp diff --git a/EssentialsGroupBridge/src/com/nijiko/database/Wrapper$Type.class b/EssentialsGroupBridge/src/com/nijiko/database/Wrapper$Type.class deleted file mode 100644 index 173279ddfd67eabcb1eef8be08495fb5fdd7273d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1107 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 R9sFF0=8sYe`9*!{e*qG~8Vvvd diff --git a/EssentialsGroupBridge/src/com/nijiko/permissions/Control.class b/EssentialsGroupBridge/src/com/nijiko/permissions/Control.class deleted file mode 100644 index d0d8845ac42d84af80f6a15abb85d313c1dcb122..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27337 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 diff --git a/EssentialsGroupBridge/src/com/nijiko/permissions/PermissionHandler.class b/EssentialsGroupBridge/src/com/nijiko/permissions/PermissionHandler.class deleted file mode 100644 index a23287a5bfd1a923ff8ac38fd75e96b19e8617c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3198 zcmbVOSyLNF5bgn)LjepvFyz8ljD%xvLN40^Y(TaVh$AK;Rrb@c8i|3`4mH|!g`btD zROKN*AU`UVo>6Nhd1q}o4^nUUeDn3!J;&}p|Niwi04&3+Q5a%S@Kw_b<*7VV-nr0C z*=k7@w!DMnd5ed&KFtQ>;8LcrGE)%whIO19wpMtsQM79_#RR`5mLh6=?%A(HWAo@+| zpvK^Oq1sh=7-<zg^hq4j!DAovg{0?9x-G!dWhEjpxVQJ0s+;z#dP3%jz^Fi3hBsJ?{i>pMUiJLH! z+-@~m$k%2ip9}=;skV3WSR?7_Orh8YB~>zb^log>k{H}^$Vw;J{xE9rloOp|+C5x! zaHrc)#9iFkExo->BhwKxcUp_4dMoVO)jldQuHFAmjC1oo?paL-V$wS6K|ucS3CFv` zEA$>S5k@k)@D2igA#}-IO}=~MF)*9srB?B|*$8QTIzsE)+eQZW98;aZd|901g~TI) zcgFmy809v_k!(r46W7B~MfOg>vSxcScjw^sH{KD9put*OeAB~42ZMoY=eUuhGNcYo zb#fnQQJ25t)z}Ff#&sK*^m!Y+5leG5&vgLZH%nUq1J|)g3r$CyeVtF|sf3Ye2t8<* z9EmFKF1e8o1$5;)yHHlKeJu{QgpQQufyE*62DazdmeA={FbmW_lJqS-loXWa>(p}< z`O;ag^+l5m{o#bYpQFQ^KU6Wkhs~=Sk4HBLeW^S&Z?D`fz)uqV&;eM*C;Sw_|55Zj zv<&T~r9WZp4}2JcJpP+ufCcyj|0mi2w3A@IdZysAwbL+T?G?Cc?KO&DCw~@M41N}F zSUX4l9F5Pzr^x)7&G|Xv=HZLP{}TNLxM}Atz%6TU!<}UOE{@-ZuM+ier@do%Kw0LJ|y3RZ|wNDWS8MP>o3Fi*o_}hAHa|JGd=mqjy!_LWS?XpN~EEL zn%o>Klw~C|%PJvOGZAZ4@fvp2o#iP!vr3;Lmm9GT8y2w+n;D2Q)l$x^DbBCQ6(MKOdY$VV>eUB9_iT2)Ui)G_T4&gA06O+ I8iJqy1JZ^j)Bpeg diff --git a/EssentialsGroupBridge/src/com/nijikokun/bukkit/Permissions/Permissions.java b/EssentialsGroupBridge/src/com/nijikokun/bukkit/Permissions/Permissions.java old mode 100644 new mode 100755 index cf0d09a35..c7a85fc71 --- a/EssentialsGroupBridge/src/com/nijikokun/bukkit/Permissions/Permissions.java +++ b/EssentialsGroupBridge/src/com/nijikokun/bukkit/Permissions/Permissions.java @@ -1,16 +1,11 @@ package com.nijikokun.bukkit.Permissions; -import com.nijiko.Misc; -import com.nijiko.configuration.DefaultConfiguration; import com.nijiko.permissions.PermissionHandler; import java.util.logging.Logger; import org.anjocaido.groupmanager.GroupManager; import org.anjocaido.groupmanager.permissions.NijikoPermissionsProxy; -import org.bukkit.Server; import org.bukkit.event.Event.Priority; import org.bukkit.event.Event.Type; -import org.bukkit.event.player.PlayerChatEvent; -import org.bukkit.event.player.PlayerListener; import org.bukkit.event.server.PluginEnableEvent; import org.bukkit.event.server.ServerListener; import org.bukkit.plugin.Plugin; @@ -19,110 +14,69 @@ import org.bukkit.plugin.java.JavaPlugin; public class Permissions extends JavaPlugin { - private class Listener extends PlayerListener { - - private Permissions plugin; - - public Listener(Permissions plugin) { - //compiled code - throw new RuntimeException("Compiled Code"); - } - - public void onPlayerCommand(PlayerChatEvent event) { - //compiled code - throw new RuntimeException("Compiled Code"); - } - } public static final Logger log = Logger.getLogger("Fake Permissions"); public static String name = "Permissions"; public static String codename = "Hacked Permissions by AnjoCaido"; public static String version = "2.0"; public static PermissionHandler Security = null; - public static Misc Misc = new Misc(); - public static Server Server; - private Listener Listener = null; - private DefaultConfiguration config = null; - private GroupManager groupManager; @Override public void onDisable() { - //compiled code - //throw new RuntimeException("Compiled Code"); - // EXAMPLE: Custom code, here we just output some info so we can check all is well PluginDescriptionFile pdfFile = this.getDescription(); System.out.println("Fake " + pdfFile.getName() + " version " + pdfFile.getVersion() + " is disabled!"); } @Override public void onEnable() { - Server = this.getServer(); PluginDescriptionFile pdfFile = this.getDescription(); - if (Security == null) {//make sure we have only one instance - Security = new NijikoPermissionsProxy(null); - } - - Plugin p = (this.getServer() == null) ? null : this.getServer().getPluginManager().getPlugin("GroupManager"); - if (p != null) { - if (p.isEnabled()) { - setGM(p); - } else { - if (this.getServer() != null) { - this.getServer().getPluginManager().registerEvent(Type.PLUGIN_ENABLE, new ServerListener() { + if (Security == null) { + //make sure we have only one instance + Security = new NijikoPermissionsProxy(null); + } - @Override - public void onPluginEnable(PluginEnableEvent event) - { - if (event.getPlugin().getDescription().getName().equals("GroupManager")) { - Permissions.this.setGM(event.getPlugin()); - } - } - - }, Priority.Normal, this); - } - } - } else { - System.err.println("OOOPS! Fake " + pdfFile.getName() + " version " + pdfFile.getVersion() + " couldn't find GroupManager!"); - this.getPluginLoader().disablePlugin(this); - } - // EXAMPLE: Custom code, here we just output some info so we can check all is well - if (pdfFile != null) - System.out.println("Fake " + pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!"); + Plugin p = (this.getServer() == null) ? null : this.getServer().getPluginManager().getPlugin("GroupManager"); + if (p != null) { + if (p.isEnabled()) { + setGM(p); + } else { + if (this.getServer() != null) { + this.getServer().getPluginManager().registerEvent(Type.PLUGIN_ENABLE, new ServerListener() { + + @Override + public void onPluginEnable(PluginEnableEvent event) { + if (event.getPlugin().getDescription().getName().equals("GroupManager")) { + Permissions.this.setGM(event.getPlugin()); + } + } + }, Priority.Normal, this); + } + } + } else { + System.err.println("OOOPS! Fake " + pdfFile.getName() + " version " + pdfFile.getVersion() + " couldn't find GroupManager!"); + this.getPluginLoader().disablePlugin(this); + } + + if (pdfFile != null) { + System.out.println("Fake " + pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!"); + } } - private void registerEvents() { - //compiled code - //throw new RuntimeException("Compiled Code"); + private void setGM(final Plugin p) { + GroupManager groupManager = (GroupManager) p; + ((NijikoPermissionsProxy) Security).setGM(p); } - - private void setGM(Plugin p) { - groupManager = (GroupManager)p; - ((NijikoPermissionsProxy)Security).setGM(p); - } public PermissionHandler getHandler() { - //compiled code - //throw new RuntimeException("Compiled Code"); - //System.out.println("Alguem chamou o handler"); - if (Security == null) - { - Security = new NijikoPermissionsProxy(null); - } - //checkEnable(); + if (Security == null) { + Security = new NijikoPermissionsProxy(null); + } return Security; } public void setupPermissions() { - if (Security == null) - { - Security = new NijikoPermissionsProxy(null); - } - //checkEnable(); - } - - private void checkEnable() { - if (!this.isEnabled() && Security == null && this.getServer() != null) { - this.getServer().getPluginManager().enablePlugin(this); + if (Security == null) { + Security = new NijikoPermissionsProxy(null); } } } diff --git a/EssentialsGroupBridge/src/org/anjocaido/groupmanager/permissions/NijikoPermissionsProxy.java b/EssentialsGroupBridge/src/org/anjocaido/groupmanager/permissions/NijikoPermissionsProxy.java old mode 100644 new mode 100755 index e26c10711..bc9cde437 --- a/EssentialsGroupBridge/src/org/anjocaido/groupmanager/permissions/NijikoPermissionsProxy.java +++ b/EssentialsGroupBridge/src/org/anjocaido/groupmanager/permissions/NijikoPermissionsProxy.java @@ -4,26 +4,34 @@ */ package org.anjocaido.groupmanager.permissions; -import com.nijiko.permissions.Control; +import com.nijiko.permissions.Group; +import com.nijiko.permissions.PermissionHandler; +import com.nijiko.permissions.User; + import java.io.File; +import java.util.Collection; +import java.util.Comparator; import java.util.Map; +import java.util.Set; + import org.anjocaido.groupmanager.GroupManager; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; -import org.bukkit.util.config.Configuration; /** - * Everything here maintains the model created by Nijikokun - * + * Everything here maintains the model created by Nijikokun + * * But implemented to use GroupManager system. Which provides instant changes, * without file access. * * @author gabrielcouto */ -public class NijikoPermissionsProxy extends Control { +public class NijikoPermissionsProxy extends PermissionHandler { + GroupManager plugin; - public NijikoPermissionsProxy(GroupManager plugin){ - super(null); + + public NijikoPermissionsProxy(GroupManager plugin) { + super(); this.plugin = plugin; } @@ -39,12 +47,12 @@ public class NijikoPermissionsProxy extends Control { @Override public void addGroupInfo(String world, String group, String node, Object data) { - throw new UnsupportedOperationException("Not supported yet."); + plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().addGroupInfo(group, node, data); } @Override public void removeGroupInfo(String world, String group, String node) { - throw new UnsupportedOperationException("Not supported yet."); + plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().removeGroupInfo(group, node); } @Override @@ -59,62 +67,62 @@ public class NijikoPermissionsProxy extends Control { @Override public void addUserInfo(String world, String user, String node, Object data) { - throw new UnsupportedOperationException("Not supported yet."); + plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().addUserInfo(user, node, data); } @Override public void removeUserInfo(String world, String user, String node) { - throw new UnsupportedOperationException("Not supported yet."); + plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().removeUserInfo(user, node); } - @Override + @Deprecated public void removeUserInfo(String user, String node) { - throw new UnsupportedOperationException("Not supported yet."); + plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().removeUserInfo(user, node); } - @Override + @Deprecated public void addGroupPermission(String group, String node) { throw new UnsupportedOperationException("Not supported yet."); } - @Override + @Deprecated public void removeGroupPermission(String group, String node) { throw new UnsupportedOperationException("Not supported yet."); } - @Override + @Deprecated public void addGroupInfo(String group, String node, Object data) { - throw new UnsupportedOperationException("Not supported yet."); + plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().addGroupInfo(group, node, data); } - @Override + @Deprecated public void removeGroupInfo(String group, String node) { - throw new UnsupportedOperationException("Not supported yet."); + plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().removeGroupInfo(group, node); } - @Override + @Deprecated public void addUserPermission(String user, String node) { throw new UnsupportedOperationException("Not supported yet."); } - @Override + @Deprecated public void removeUserPermission(String user, String node) { throw new UnsupportedOperationException("Not supported yet."); } - @Override + @Deprecated public void addUserInfo(String user, String node, Object data) { - throw new UnsupportedOperationException("Not supported yet."); + plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().addUserInfo(user, node, data); } @Override public void setDefaultWorld(String world) { - //throw new UnsupportedOperationException("Not supported yet."); + throw new UnsupportedOperationException("Not supported yet."); } - @Override + @Deprecated public void setDirectory(File directory) { - //throw new UnsupportedOperationException("Not supported yet."); + throw new UnsupportedOperationException("Not supported yet."); } @Override @@ -124,7 +132,7 @@ public class NijikoPermissionsProxy extends Control { @Override public void forceLoadWorld(String world) { - //throw new UnsupportedOperationException("Not supported yet."); + throw new UnsupportedOperationException("Not supported yet."); } @Override @@ -134,12 +142,7 @@ public class NijikoPermissionsProxy extends Control { @Override public void load() { - //throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void load(String world, Configuration config) { - //throw new UnsupportedOperationException("Not supported yet."); + throw new UnsupportedOperationException("Not supported yet."); } @Override @@ -154,71 +157,6 @@ public class NijikoPermissionsProxy extends Control { return true; } - @Override - public void setCache(Map Cache) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setCache(String world, Map Cache) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setCacheItem(String player, String permission, boolean data) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void setCacheItem(String world, String player, String permission, boolean data) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public Map getCache() { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public Map getCache(String world) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public boolean getCacheItem(String player, String permission) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public boolean getCacheItem(String world, String player, String permission) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void removeCachedItem(String player, String permission) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void removeCachedItem(String world, String player, String permission) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void clearCache() { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void clearCache(String world) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void clearAllCache() { - throw new UnsupportedOperationException("Not supported yet."); - } - @Override public boolean has(Player player, String permission) { //throw new UnsupportedOperationException("Not supported yet."); @@ -228,27 +166,56 @@ public class NijikoPermissionsProxy extends Control { @Override public boolean permission(Player player, String permission) { //throw new UnsupportedOperationException("Not supported yet."); - if(permission==null || permission.equals("")){ + if (permission == null || permission.equals("")) { return false; } - if(player==null){ - GroupManager.logger.severe("A plugin is asking permission '"+permission+"' for a null player... Which plugin does that? Bastards!"); + if (player == null) { + GroupManager.logger.severe("A plugin is asking permission '" + permission + "' for a null player... Which plugin does that? Bastards!"); return false; } - if(player.getWorld()==null){ - GroupManager.logger.warning("The player "+player.getName()+" has a null world? Treating as default world!"); + if (player.getWorld() == null) { + GroupManager.logger.warning("The player " + player.getName() + " has a null world? Treating as default world!"); return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().has(player, permission); } return plugin.getWorldsHolder().getWorldData(player.getWorld().getName()).getPermissionsHandler().has(player, permission); } @Override - public String getGroup(String world, String name) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroup(name); + public String getGroupRawPrefix(String world, String group) { + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPrefix(group); + } + + @Override + public String getGroupRawSuffix(String world, String group) { + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupSuffix(group); + } + + @Override + public String getUserPrefix(String world, String user) { + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPrefix(user); + } + + @Override + public String getUserSuffix(String world, String user) { + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserSuffix(user); + } + + @Override + public String getGroup(String world, String user) { + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroup(user); + } + + @Override + public String getPrimaryGroup(String world, String user) { + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroup(user); + } + + @Override + public boolean canUserBuild(String world, String user) { + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().canUserBuild(user); } @Deprecated - @Override public String getGroup(String name) { return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroup(name); } @@ -258,21 +225,14 @@ public class NijikoPermissionsProxy extends Control { return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroups(name); } - @Deprecated - @Override - public String[] getGroups(String name) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroups(name); - } - @Override public boolean inGroup(String world, String name, String group) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().inGroup(name,group); + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().inGroup(name, group); } @Deprecated - @Override public boolean inGroup(String name, String group) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().inGroup(name,group); + return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().inGroup(name, group); } @Override @@ -280,7 +240,7 @@ public class NijikoPermissionsProxy extends Control { return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPrefix(group); } - @Override + @Deprecated public String getGroupPrefix(String group) { return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPrefix(group); } @@ -290,7 +250,7 @@ public class NijikoPermissionsProxy extends Control { return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupSuffix(group); } - @Override + @Deprecated public String getGroupSuffix(String group) { return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupSuffix(group); } @@ -301,134 +261,327 @@ public class NijikoPermissionsProxy extends Control { } @Deprecated - @Override public boolean canGroupBuild(String group) { return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().canGroupBuild(group); } @Override public String getGroupPermissionString(String world, String group, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionString(group,permission); + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionString(group, permission); } - @Override + @Deprecated public String getGroupPermissionString(String group, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionString(group,permission); + return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionString(group, permission); } @Override public int getGroupPermissionInteger(String world, String group, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionInteger(group,permission); + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionInteger(group, permission); } - @Override + @Deprecated public int getGroupPermissionInteger(String group, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionInteger(group,permission); + return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionInteger(group, permission); } @Override public boolean getGroupPermissionBoolean(String world, String group, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionBoolean(group,permission); + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionBoolean(group, permission); } - @Override + @Deprecated public boolean getGroupPermissionBoolean(String group, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionBoolean(group,permission); + return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionBoolean(group, permission); } @Override public double getGroupPermissionDouble(String world, String group, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionDouble(group,permission); + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionDouble(group, permission); } - @Override + @Deprecated public double getGroupPermissionDouble(String group, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionDouble(group,permission); + return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionDouble(group, permission); } @Override public String getUserPermissionString(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionString(name,permission); + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionString(name, permission); } - @Override + @Deprecated public String getUserPermissionString(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionString(name,permission); + return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionString(name, permission); } @Override public int getUserPermissionInteger(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionInteger(name,permission); + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionInteger(name, permission); } - @Override + @Deprecated public int getUserPermissionInteger(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionInteger(name,permission); + return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionInteger(name, permission); } @Override public boolean getUserPermissionBoolean(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionBoolean(name,permission); + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionBoolean(name, permission); } - @Override + @Deprecated public boolean getUserPermissionBoolean(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionBoolean(name,permission); + return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionBoolean(name, permission); } @Override public double getUserPermissionDouble(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionDouble(name,permission); + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionDouble(name, permission); } - @Override + @Deprecated public double getUserPermissionDouble(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionDouble(name,permission); + return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionDouble(name, permission); } @Override public String getPermissionString(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionString(name,permission); + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionString(name, permission); } - @Override + @Deprecated public String getPermissionString(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionString(name,permission); + return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionString(name, permission); } @Override public int getPermissionInteger(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionInteger(name,permission); + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionInteger(name, permission); } - @Override + @Deprecated public int getPermissionInteger(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionInteger(name,permission); + return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionInteger(name, permission); } @Override public boolean getPermissionBoolean(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionBoolean(name,permission); + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionBoolean(name, permission); } - @Override + @Deprecated public boolean getPermissionBoolean(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionBoolean(name,permission); + return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionBoolean(name, permission); } @Override public double getPermissionDouble(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionDouble(name,permission); + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionDouble(name, permission); + } + + @Deprecated + public double getPermissionDouble(String name, String permission) { + return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionDouble(name, permission); + } + + public void setGM(Plugin p) { + this.plugin = (GroupManager) p; } @Override - public double getPermissionDouble(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionDouble(name,permission); + public boolean canGroupRawBuild(String world, String group) { + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().canGroupBuild(group); } - public void setGM(Plugin p) - { - this.plugin = (GroupManager)p; - } + @Override + public void closeAll() { + throw new UnsupportedOperationException("Not supported yet."); + } + @Override + public int compareWeights(String firstWorld, String first, String secondWorld, String second) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public int compareWeights(String world, String first, String second) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Map> getAllGroups(String world, String name) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Group getDefaultGroup(String world) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Group getGroupObject(String world, String group) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public String getGroupProperName(String world, String group) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Boolean getInfoBoolean(String world, String entryName, String path, + boolean isGroup) { + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getInfoBoolean(entryName, path, isGroup); + } + + @Override + public Boolean getInfoBoolean(String world, String entryName, String path, + boolean isGroup, Comparator comparator) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Double getInfoDouble(String world, String entryName, String path, boolean isGroup) { + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getInfoDouble(entryName, path, isGroup); + } + + @Override + public Double getInfoDouble(String world, String entryName, String path, + boolean isGroup, Comparator comparator) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Integer getInfoInteger(String world, String entryName, String path, + boolean isGroup) { + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getInfoInteger(entryName, path, isGroup); + } + + @Override + public Integer getInfoInteger(String world, String entryName, String path, + boolean isGroup, Comparator comparator) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public String getInfoString(String world, String entryName, String path, boolean isGroup) { + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getInfoString(entryName, path, isGroup); + } + + @Override + public String getInfoString(String world, String entryName, String path, + boolean isGroup, Comparator comparator) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Boolean getRawInfoBoolean(String world, String entryName, String path, + boolean isGroup) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Double getRawInfoDouble(String world, String entryName, String path, + boolean isGroup) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Integer getRawInfoInteger(String world, String entryName, String path, + boolean isGroup) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public String getRawInfoString(String world, String entryName, String path, + boolean isGroup) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Set getTracks(String world) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public User getUserObject(String world, String name) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Collection getUsers(String world) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Set getWorlds() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public boolean has(String world, String playerName, String permission) { + if (permission == null || permission.equals("")) { + return false; + } + if (playerName == null || playerName == "") { + GroupManager.logger.severe("A plugin is asking permission '" + permission + "' for a null player... Which plugin does that? Bastards!"); + return false; + } + if (world == null) { + GroupManager.logger.warning("The player " + playerName + " has a null world? Treating as default world!"); + return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().permission(playerName, permission); + } + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().permission(playerName, permission); + } + + @Override + public boolean inGroup(String world, String user, String groupWorld, String group) { + return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().inGroup(user, group); + } + + @Override + public boolean inSingleGroup(String world, String user, String group) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public boolean inSingleGroup(String world, String user, String groupWorld, String group) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public boolean permission(String world, String name, String node) { + return has(world, name, node); + } + + @Override + public Group safeGetGroup(String world, String name) throws Exception { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public User safeGetUser(String world, String name) throws Exception { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public void save(String world) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public void saveAll() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Collection getGroups(String world) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Group getPrimaryGroupObject(String string, String string1) { + throw new UnsupportedOperationException("Not supported yet."); + } } diff --git a/EssentialsGroupBridge/src/plugin.yml b/EssentialsGroupBridge/src/plugin.yml index 513beb372..ca6e2b1dc 100644 --- a/EssentialsGroupBridge/src/plugin.yml +++ b/EssentialsGroupBridge/src/plugin.yml @@ -1,4 +1,4 @@ name: Permissions -version: 2.7.2 +version: 3.1.6 main: com.nijikokun.bukkit.Permissions.Permissions depend: [GroupManager] \ No newline at end of file diff --git a/EssentialsGroupManager/nbproject/project.properties b/EssentialsGroupManager/nbproject/project.properties index 0470fe406..245766661 100644 --- a/EssentialsGroupManager/nbproject/project.properties +++ b/EssentialsGroupManager/nbproject/project.properties @@ -4,6 +4,19 @@ annotation.processing.run.all.processors=true annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output application.title=EssentialsGroupManager application.vendor=gabrielcouto +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=2 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=2 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=2 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=120 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap=none +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=project +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width=4 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab=4 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size=4 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width=120 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-line-wrap=none build.classes.dir=${build.dir}/classes build.classes.excludes=**/*.java,**/*.form # This directory is removed when the project is cleaned: diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java old mode 100644 new mode 100755 index 68253eccc..153221ed9 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java @@ -117,4 +117,4 @@ public class GMConfiguration { } GroupManager.logger.setLevel(Level.INFO); } -} +} \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java old mode 100644 new mode 100755 index 890af718b..7f6e0fb85 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java @@ -32,6 +32,7 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.java.JavaPlugin; +@SuppressWarnings("unused") /** * * @author gabrielcouto @@ -48,7 +49,7 @@ public class GroupManager extends JavaPlugin { private boolean validateOnlinePlayer = true; private boolean isReady = false; private GMConfiguration config; - private GMLoggerHandler ch; + private GMLoggerHandler ch; public static final Logger logger = Logger.getLogger(GroupManager.class.getName()); @Override @@ -60,7 +61,7 @@ public class GroupManager extends JavaPlugin { // EXAMPLE: Custom code, here we just output some info so we can check all is well PluginDescriptionFile pdfFile = this.getDescription(); System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is disabled!"); - GroupManager.logger.removeHandler(ch); + GroupManager.logger.removeHandler(ch); } @Override @@ -166,7 +167,7 @@ public class GroupManager extends JavaPlugin { } /** - * A simple interface, for ones that don't want to mess with overloading. + * A simple interface, for ones that don't want to mess with overloading. * Yet it is affected by overloading. But seamless. * @return the dataholder with all information */ @@ -176,8 +177,8 @@ public class GroupManager extends JavaPlugin { } /** - * Use this if you want to play with overloading. - * @return a dataholder with overloading interface + * Use this if you want to play with overloading. + * @return a dataholder with overloading interface */ @Deprecated public OverloadedWorldHolder getOverloadedClassData() { @@ -186,10 +187,11 @@ public class GroupManager extends JavaPlugin { /** * Called when a command registered by this plugin is received. - * @param sender - * @param cmd + * @param sender + * @param cmd * @param args */ + @SuppressWarnings({"null", "deprecation"}) @Override public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { boolean playerCanDo = false; @@ -246,9 +248,9 @@ public class GroupManager extends JavaPlugin { } catch (Exception e) { //this error happened once with someone. now im prepared... i think GroupManager.logger.severe("==================================================="); - GroupManager.logger.severe("= ERROR REPORT START ="); + GroupManager.logger.severe("= ERROR REPORT START ="); GroupManager.logger.severe("==================================================="); - GroupManager.logger.severe("= COPY AND PASTE THIS TO GROUPMANAGER DEVELOPER ="); + GroupManager.logger.severe("= COPY AND PASTE THIS TO GROUPMANAGER DEVELOPER ="); GroupManager.logger.severe("==================================================="); GroupManager.logger.severe(this.getDescription().getName()); GroupManager.logger.severe(this.getDescription().getVersion()); @@ -265,7 +267,7 @@ public class GroupManager extends JavaPlugin { GroupManager.logger.severe(val.name()); } GroupManager.logger.severe("==================================================="); - GroupManager.logger.severe("= ERROR REPORT ENDED ="); + GroupManager.logger.severe("= ERROR REPORT ENDED ="); GroupManager.logger.severe("==================================================="); sender.sendMessage("An error occurred. Ask the admin to take a look at the console."); } @@ -889,7 +891,7 @@ public class GroupManager extends JavaPlugin { } //PARECE OK auxGroup.addInherits(auxGroup2); - sender.sendMessage(ChatColor.RED + "Group " + auxGroup2.getName() + " is now in " + auxGroup.getName() + " inheritance list."); + sender.sendMessage(ChatColor.RED + "Group " + auxGroup2.getName() + " is now in " + auxGroup.getName() + " inheritance list."); return true; case mangdeli: @@ -925,7 +927,7 @@ public class GroupManager extends JavaPlugin { } //PARECE OK auxGroup.removeInherits(auxGroup2.getName()); - sender.sendMessage(ChatColor.RED + "Group " + auxGroup2.getName() + " was removed from " + auxGroup.getName() + " inheritance list."); + sender.sendMessage(ChatColor.RED + "Group " + auxGroup2.getName() + " was removed from " + auxGroup.getName() + " inheritance list."); return true; case manuaddv: @@ -1633,4 +1635,4 @@ public class GroupManager extends JavaPlugin { public File getBackupFolder() { return backupFolder; } -} +} \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/DataUnit.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/DataUnit.java old mode 100644 new mode 100755 index 3eb7491dd..f17d8b21e --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/DataUnit.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/DataUnit.java @@ -27,7 +27,7 @@ public abstract class DataUnit { } /** - * Every group is matched only by their names and DataSources names. + * Every group is matched only by their names and DataSources names. * @param o * @return true if they are equal. false if not. */ @@ -49,9 +49,6 @@ public abstract class DataUnit { return hash; } - - - /** * @return the dataSource */ @@ -67,10 +64,10 @@ public abstract class DataUnit { } public void flagAsChanged() { - GroupManager.logger.finest("DataSource: "+getDataSource().getName()+" - DataUnit: "+getName()+" flagged as changed!"); -// for(StackTraceElement st: Thread.currentThread().getStackTrace()){ -// GroupManager.logger.finest(st.toString()); -// } + GroupManager.logger.finest("DataSource: " + getDataSource().getName() + " - DataUnit: " + getName() + " flagged as changed!"); +// for(StackTraceElement st: Thread.currentThread().getStackTrace()){ +// GroupManager.logger.finest(st.toString()); +// } changed = true; } @@ -79,7 +76,7 @@ public abstract class DataUnit { } public void flagAsSaved() { - GroupManager.logger.finest("DataSource: "+getDataSource().getName()+" - DataUnit: "+getName()+" flagged as saved!"); + GroupManager.logger.finest("DataSource: " + getDataSource().getName() + " - DataUnit: " + getName() + " flagged as saved!"); changed = false; } @@ -108,7 +105,7 @@ public abstract class DataUnit { return (ArrayList) permissions.clone(); } - public void sortPermissions(){ + public void sortPermissions() { Collections.sort(permissions, StringPermissionComparator.getInstance()); } -} +} \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java old mode 100644 new mode 100755 index c734b208e..4af5449fc --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java @@ -30,18 +30,18 @@ public class Group extends DataUnit implements Cloneable { * @param name */ public Group(WorldDataHolder source, String name) { - super(source,name); + super(source, name); } /** - * Clone this group + * Clone this group * @return a clone of this group */ @Override public Group clone() { Group clone = new Group(getDataSource(), this.getName()); clone.inherits = ((ArrayList) this.getInherits().clone()); - for(String perm: this.getPermissionList()){ + for (String perm : this.getPermissionList()) { clone.addPermission(perm); } clone.variables = ((GroupVariables) variables).clone(clone); @@ -60,7 +60,7 @@ public class Group extends DataUnit implements Cloneable { } Group clone = getDataSource().createGroup(this.getName()); clone.inherits = ((ArrayList) this.getInherits().clone()); - for(String perm: this.getPermissionList()){ + for (String perm : this.getPermissionList()) { clone.addPermission(perm); } clone.variables = variables.clone(clone); @@ -108,13 +108,13 @@ public class Group extends DataUnit implements Cloneable { } /** - * + * * @param varList */ public void setVariables(Map varList) { GroupVariables temp = new GroupVariables(this, varList); variables.clearVars(); - for(String key: temp.getVarKeyList()){ + for (String key : temp.getVarKeyList()) { variables.addVar(key, temp.getVarObject(key)); } flagAsChanged(); diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/GroupVariables.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/GroupVariables.java old mode 100644 new mode 100755 index 87c34de2b..4775eac1f --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/GroupVariables.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/GroupVariables.java @@ -45,7 +45,7 @@ public class GroupVariables extends Variables implements Cloneable { } /** - * A clone of all vars here. + * A clone of all vars here. * @return */ protected GroupVariables clone(Group newOwner) { diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java old mode 100644 new mode 100755 index ceecbfa21..b90cf4ff1 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java @@ -4,7 +4,7 @@ */ package org.anjocaido.groupmanager.data; -import com.sun.org.apache.bcel.internal.generic.AALOAD; +//import com.sun.org.apache.bcel.internal.generic.AALOAD; import java.util.ArrayList; import org.anjocaido.groupmanager.dataholder.WorldDataHolder; import java.util.Map; @@ -27,13 +27,12 @@ public class User extends DataUnit implements Cloneable { */ private UserVariables variables = new UserVariables(this); - /** * * @param name */ public User(WorldDataHolder source, String name) { - super(source,name); + super(source, name); this.group = source.getDefaultGroup().getName(); } @@ -45,7 +44,7 @@ public class User extends DataUnit implements Cloneable { public User clone() { User clone = new User(getDataSource(), this.getName()); clone.group = this.group; - for(String perm: this.getPermissionList()){ + for (String perm : this.getPermissionList()) { clone.addPermission(perm); } //clone.variables = this.variables.clone(); @@ -68,7 +67,7 @@ public class User extends DataUnit implements Cloneable { } else { clone.setGroup(this.getGroupName()); } - for(String perm: this.getPermissionList()){ + for (String perm : this.getPermissionList()) { clone.addPermission(perm); } //clone.variables = this.variables.clone(); @@ -117,43 +116,47 @@ public class User extends DataUnit implements Cloneable { flagAsChanged(); } - public void addSubGroup(Group subGroup){ - if(this.group.equalsIgnoreCase(subGroup.getName())){ + public void addSubGroup(Group subGroup) { + if (this.group.equalsIgnoreCase(subGroup.getName())) { return; } if (!this.getDataSource().groupExists(subGroup.getName())) { getDataSource().addGroup(subGroup); - } + } subGroup = getDataSource().getGroup(subGroup.getName()); removeSubGroup(subGroup); subGroups.add(subGroup.getName()); flagAsChanged(); } - public int subGroupsSize(){ + + public int subGroupsSize() { return subGroups.size(); } - public boolean isSubGroupsEmpty(){ + + public boolean isSubGroupsEmpty() { return subGroups.isEmpty(); } - public boolean containsSubGroup(Group subGroup){ + + public boolean containsSubGroup(Group subGroup) { return subGroups.contains(subGroup.getName()); } - public boolean removeSubGroup(Group subGroup){ - try{ - if(subGroups.remove(subGroup.getName())){ + + public boolean removeSubGroup(Group subGroup) { + try { + if (subGroups.remove(subGroup.getName())) { flagAsChanged(); return true; } - } catch (Exception e){ - + } catch (Exception e) { } return false; } - public ArrayList subGroupListCopy(){ + + public ArrayList subGroupListCopy() { ArrayList val = new ArrayList(); - for(String gstr: subGroups){ + for (String gstr : subGroups) { Group g = getDataSource().getGroup(gstr); - if(g==null){ + if (g == null) { removeSubGroup(g); continue; } @@ -161,7 +164,8 @@ public class User extends DataUnit implements Cloneable { } return val; } - public ArrayList subGroupListStringCopy(){ + + public ArrayList subGroupListStringCopy() { return (ArrayList) subGroups.clone(); } @@ -179,7 +183,7 @@ public class User extends DataUnit implements Cloneable { public void setVariables(Map varList) { UserVariables temp = new UserVariables(this, varList); variables.clearVars(); - for(String key: temp.getVarKeyList()){ + for (String key : temp.getVarKeyList()) { variables.addVar(key, temp.getVarObject(key)); } flagAsChanged(); diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/UserVariables.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/UserVariables.java old mode 100644 new mode 100755 index 45dfc31e7..3f3a6c374 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/UserVariables.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/UserVariables.java @@ -2,7 +2,6 @@ * To change this template, choose Tools | Templates * and open the template in the editor. */ - package org.anjocaido.groupmanager.data; import java.util.Map; @@ -11,19 +10,23 @@ import java.util.Map; * * @author gabrielcouto */ -public class UserVariables extends Variables{ +public class UserVariables extends Variables { + private User owner; - public UserVariables(User owner){ + + public UserVariables(User owner) { super(owner); this.owner = owner; } + public UserVariables(User owner, Map varList) { super(owner); this.variables = varList; this.owner = owner; } + /** - * A clone of all vars here. + * A clone of all vars here. * @return */ protected UserVariables clone(User newOwner) { @@ -34,6 +37,7 @@ public class UserVariables extends Variables{ newOwner.flagAsChanged(); return clone; } + /** * @return the owner */ @@ -41,5 +45,4 @@ public class UserVariables extends Variables{ public User getOwner() { return owner; } - } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Variables.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Variables.java old mode 100644 new mode 100755 index 31ed0d795..547e6266d --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Variables.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Variables.java @@ -19,12 +19,14 @@ import java.util.Set; * @author gabrielcouto */ public abstract class Variables implements Cloneable { + private DataUnit owner; protected Map variables = new HashMap(); - public Variables(DataUnit owner){ + public Variables(DataUnit owner) { this.owner = owner; } + /** * Add var to the the INFO node. * examples: @@ -45,7 +47,7 @@ public abstract class Variables implements Cloneable { } /** - * Returns the object inside the var + * Returns the object inside the var * @param name * @return a Object if exists. null if doesn't exists */ @@ -112,7 +114,7 @@ public abstract class Variables implements Cloneable { } /** - * All variable keys this is holding + * All variable keys this is holding * @return */ public Set getVarKeyList() { @@ -122,7 +124,7 @@ public abstract class Variables implements Cloneable { } /** - * verify is a var exists + * verify is a var exists * @param name the key name of the var * @return true if that var exists */ @@ -174,7 +176,7 @@ public abstract class Variables implements Cloneable { } - public void clearVars(){ + public void clearVars() { variables.clear(); owner.flagAsChanged(); } @@ -186,7 +188,7 @@ public abstract class Variables implements Cloneable { return owner; } - public boolean isEmpty(){ + public boolean isEmpty() { return variables.isEmpty(); } } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java old mode 100644 new mode 100755 index f735ff5e6..42c78cccf --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java @@ -25,6 +25,7 @@ public class OverloadedWorldHolder extends WorldDataHolder { * * @param ph */ + @SuppressWarnings("deprecation") public OverloadedWorldHolder(WorldDataHolder ph) { super(ph.getName()); this.f = ph.f; @@ -135,7 +136,7 @@ public class OverloadedWorldHolder extends WorldDataHolder { } /** - * + * * @return */ @Override @@ -185,7 +186,7 @@ public class OverloadedWorldHolder extends WorldDataHolder { } /** - * Gets the user in normal state. Surpassing the overload state. + * Gets the user in normal state. Surpassing the overload state. * It doesn't affect permissions. But it enables plugins change the * actual user permissions even in overload mode. * @param userName @@ -201,4 +202,4 @@ public class OverloadedWorldHolder extends WorldDataHolder { User newUser = createUser(userName); return newUser; } -} +} \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java old mode 100644 new mode 100755 index ac26138c4..1331a92ad --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java @@ -42,7 +42,7 @@ public class WorldDataHolder { */ protected String name; /** - * The actual groups holder + * The actual groups holder */ protected Map groups = new HashMap(); /** @@ -50,7 +50,7 @@ public class WorldDataHolder { */ protected Map users = new HashMap(); /** - * Points to the default group + * Points to the default group */ protected Group defaultGroup = null; /** @@ -81,7 +81,7 @@ public class WorldDataHolder { protected boolean haveGroupsChanged = false; /** - * Prevent direct instantiation + * Prevent direct instantiation * @param worldName */ protected WorldDataHolder(String worldName) { @@ -90,7 +90,7 @@ public class WorldDataHolder { /** * The main constructor for a new WorldDataHolder - * Please don't set the default group as null + * Please don't set the default group as null * @param worldName * @param defaultGroup the default group. its good to start with one */ @@ -116,7 +116,7 @@ public class WorldDataHolder { } /** - * Add a user to the list. If it already exists, overwrite the old. + * Add a user to the list. If it already exists, overwrite the old. * @param theUser the user you want to add to the permission list */ public void addUser(User theUser) { @@ -158,7 +158,7 @@ public class WorldDataHolder { } /** - * Change the default group of the file. + * Change the default group of the file. * @param group the group you want make default. */ public void setDefaultGroup(Group group) { @@ -170,7 +170,7 @@ public class WorldDataHolder { } /** - * Returns the default group of the file + * Returns the default group of the file * @return the default group */ public Group getDefaultGroup() { @@ -178,7 +178,7 @@ public class WorldDataHolder { } /** - * Returns a group of the given name + * Returns a group of the given name * @param groupName the name of the group * @return a group if it is found. null if not found. */ @@ -187,7 +187,7 @@ public class WorldDataHolder { } /** - * Check if a group exists. + * Check if a group exists. * Its the same of getGroup, but check if it is null. * @param groupName the name of the group * @return true if exists. false if not. @@ -210,7 +210,7 @@ public class WorldDataHolder { } /** - * Remove the group to the list + * Remove the group to the list * @param groupName * @return true if had something to remove. false the group was default or non-existant */ @@ -277,7 +277,7 @@ public class WorldDataHolder { } /** - * reads the file again + * reads the file again */ public void reload() { try { @@ -301,13 +301,14 @@ public class WorldDataHolder { } /** - * Returns a data holder for the given file + * Returns a data holder for the given file * @param worldName * @param file * @return * @throws Exception * @deprecated */ + @SuppressWarnings({"rawtypes", "unchecked"}) @Deprecated public static WorldDataHolder load(String worldName, File file) throws Exception { WorldDataHolder ph = new WorldDataHolder(worldName); @@ -387,7 +388,7 @@ public class WorldDataHolder { } } catch (Exception ex) { ex.printStackTrace(); - throw new Exception("Your Permissions config file is invalid. See console for details."); + throw new Exception("Your Permissions config file is invalid. See console for details."); } if (ph.defaultGroup == null) { throw new IllegalArgumentException("There was no Default Group declared."); @@ -409,7 +410,7 @@ public class WorldDataHolder { User thisUser = ph.createUser(usersKey); if (thisUser == null) { GroupManager.logger.warning("I think this user was declared more than once: " + usersKey); - continue; + continue; } if (thisUserNode.get("permissions") == null) { thisUserNode.put("permissions", new ArrayList()); @@ -436,8 +437,8 @@ public class WorldDataHolder { Group hisGroup = ph.getGroup(thisUserNode.get("group").toString()); if (hisGroup == null) { GroupManager.logger.warning("There is no group " + thisUserNode.get("group").toString() + ", as stated for player " + thisUser.getName()); - thisUser.setGroup(ph.defaultGroup); - } + thisUser.setGroup(ph.defaultGroup); + } thisUser.setGroup(hisGroup); } else { thisUser.setGroup(ph.defaultGroup); @@ -447,7 +448,7 @@ public class WorldDataHolder { } /** - * Returns a data holder for the given file + * Returns a data holder for the given file * @param worldName * @param groupsFile * @param usersFile @@ -455,6 +456,7 @@ public class WorldDataHolder { * @throws FileNotFoundException * @throws IOException */ + @SuppressWarnings({"rawtypes", "unchecked"}) public static WorldDataHolder load(String worldName, File groupsFile, File usersFile) throws FileNotFoundException, IOException { WorldDataHolder ph = new WorldDataHolder(worldName); ph.groupsFile = groupsFile; @@ -539,7 +541,7 @@ public class WorldDataHolder { } } catch (Exception ex) { ex.printStackTrace(); - throw new IllegalArgumentException("Your Permissions config file is invalid. See console for details."); + throw new IllegalArgumentException("Your Permissions config file is invalid. See console for details."); } if (ph.defaultGroup == null) { throw new IllegalArgumentException("There was no Default Group declared."); @@ -639,7 +641,7 @@ public class WorldDataHolder { } /** - * Write a dataHolder in a specified file + * Write a dataHolder in a specified file * @param ph * @param file * @deprecated @@ -726,7 +728,7 @@ public class WorldDataHolder { } /** - * Write a dataHolder in a specified file + * Write a dataHolder in a specified file * @param ph * @param groupsFile */ @@ -761,28 +763,28 @@ public class WorldDataHolder { DumperOptions opt = new DumperOptions(); opt.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); final Yaml yaml = new Yaml(opt); - try { - yaml.dump(root, new OutputStreamWriter(new FileOutputStream(groupsFile), "UTF-8")); - } catch (UnsupportedEncodingException ex) { - } catch (FileNotFoundException ex) { - } + try { + yaml.dump(root, new OutputStreamWriter(new FileOutputStream(groupsFile), "UTF-8")); + } catch (UnsupportedEncodingException ex) { + } catch (FileNotFoundException ex) { + } /*FileWriter tx = null; try { - tx = new FileWriter(groupsFile, false); - tx.write(yaml.dump(root)); - tx.flush(); + tx = new FileWriter(groupsFile, false); + tx.write(yaml.dump(root)); + tx.flush(); } catch (Exception e) { } finally { - try { - tx.close(); - } catch (IOException ex) { - } + try { + tx.close(); + } catch (IOException ex) { + } }*/ } /** - * Write a dataHolder in a specified file + * Write a dataHolder in a specified file * @param ph * @param usersFile */ @@ -823,22 +825,22 @@ public class WorldDataHolder { DumperOptions opt = new DumperOptions(); opt.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); final Yaml yaml = new Yaml(opt); - try { - yaml.dump(root, new OutputStreamWriter(new FileOutputStream(usersFile), "UTF-8")); - } catch (UnsupportedEncodingException ex) { - } catch (FileNotFoundException ex) { - } + try { + yaml.dump(root, new OutputStreamWriter(new FileOutputStream(usersFile), "UTF-8")); + } catch (UnsupportedEncodingException ex) { + } catch (FileNotFoundException ex) { + } /*FileWriter tx = null; try { - tx = new FileWriter(usersFile, false); - tx.write(yaml.dump(root)); - tx.flush(); + tx = new FileWriter(usersFile, false); + tx.write(yaml.dump(root)); + tx.flush(); } catch (Exception e) { } finally { - try { - tx.close(); - } catch (IOException ex) { - } + try { + tx.close(); + } catch (IOException ex) { + } }*/ } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java old mode 100644 new mode 100755 index 83073c10b..b4d50b431 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java @@ -37,7 +37,7 @@ public class WorldsHolder { * Map of mirrors: * The key is the mirror. * The object is the mirrored. - * + * * Mirror shows the same data of mirrored. */ private Map mirrors = new HashMap(); @@ -63,7 +63,8 @@ public class WorldsHolder { initialWorldLoading(); mirrorSetUp(); } - private void initialWorldLoading(){ + + private void initialWorldLoading() { //LOAD EVERY WORLD POSSIBLE loadWorld(serverDefaultWorldName); defaultWorld = worldsData.get(serverDefaultWorldName); @@ -77,7 +78,9 @@ public class WorldsHolder { } } } - public void mirrorSetUp(){ + + @SuppressWarnings("rawtypes") + public void mirrorSetUp() { mirrors.clear(); Map mirrorsMap = plugin.getConfig().getMirrorsMap(); if (mirrorsMap != null) { @@ -122,7 +125,7 @@ public class WorldsHolder { } /** - * + * */ public void saveChanges() { ArrayList alreadyDone = new ArrayList(); @@ -136,7 +139,7 @@ public class WorldsHolder { continue; } if (w.haveGroupsChanged()) { - String groupsFolderName = w.getGroupsFile().getParentFile().getName(); + //String groupsFolderName = w.getGroupsFile().getParentFile().getName(); File backupGroups = new File(plugin.getBackupFolder(), "bkp_" + w.getName() + "_g_" + Tasks.getDateString() + ".yml"); try { Tasks.copy(w.getGroupsFile(), backupGroups); @@ -368,7 +371,7 @@ public class WorldsHolder { GroupManager.logger.log(Level.SEVERE, null, ex); return; } - GroupManager.logger.severe("Failed to load world " + worldName + "..."); + //GroupManager.logger.severe("Failed to load world " + worldName + "..."); } } @@ -376,7 +379,7 @@ public class WorldsHolder { * Tells if the such world has been mapped. * * It will return true if world is a mirror. - * + * * @param worldName * @return true if world is loaded or mirrored. false if not listed */ diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java old mode 100644 new mode 100755 index ca223da81..b892e653e --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -13,10 +13,11 @@ import org.anjocaido.groupmanager.data.Group; import org.anjocaido.groupmanager.dataholder.WorldDataHolder; import org.anjocaido.groupmanager.data.User; import org.anjocaido.groupmanager.utils.PermissionCheckResult; +import org.anjocaido.groupmanager.utils.PermissionCheckResult.Type; import org.bukkit.entity.Player; /** - * Everything here maintains the model created by Nijikokun + * Everything here maintains the model created by Nijikokun * * But implemented to use GroupManager system. Which provides instant changes, * without file access. @@ -49,7 +50,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * Checks if a player can use that permission node. + * Checks if a player can use that permission node. * @param player * @param permission * @return @@ -59,6 +60,16 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { return checkUserPermission(ph.getUser(player.getName()), permission); } + /** + * Checks if a player can use that permission node. + * @param playerName + * @param permission + * @return + */ + public boolean permission(String playerName, String permission) { + return checkUserPermission(ph.getUser(playerName), permission); + } + /** * Returns the name of the group of that player name. * @param userName @@ -70,7 +81,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * Verify if player is in suck group. + * Verify if player is in suck group. * It will check it's groups inheritance. * * So if you have a group Admin > Moderator @@ -98,6 +109,75 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { return false; } + /** + * Gets the appropriate prefix for the user. + * This method is a utility method for chat plugins to get the user's prefix + * without having to look at every one of the user's ancestors. + * Returns an empty string if user has no parent groups. + * @param user Player's name + * @return Player's prefix + */ + @Override + public String getUserPrefix(String user) { + + String prefix = ph.getUser(user).getVariables().getVarString("prefix"); + if (prefix.length() != 0) { + return prefix; + } + + return getGroupPrefix(getGroup(user)); + } + + /** + * Gets the appropriate prefix for the user. + * This method is a utility method for chat plugins to get the user's prefix + * without having to look at every one of the user's ancestors. + * Returns an empty string if user has no parent groups. + * @param user Player's name + * @return Player's prefix + */ + @Override + public String getUserSuffix(String user) { + + String suffix = ph.getUser(user).getVariables().getVarString("suffix"); + if (suffix.length() != 0) { + return suffix; + } + + return getGroupSuffix(getGroup(user)); + + } + + /** + * Gets name of the primary group of the user. + * Returns the name of the default group if user has no parent groups, + * or "Default" if there is no default group for that world. + * @param user Player's name + * @return Name of player's primary group + */ + public String getPrimaryGroup(String user) { + + return getGroup(user); + + } + + /** + * Check if user can build. + * @param world Player's world + * @param user Player's name + * @return Whether the user can build + */ + public boolean canUserBuild(String user) { + boolean test = ph.getUser(user).getVariables().getVarBoolean("build"); + + if (test) { + return test; + } + + return canGroupBuild(getGroup(user)); + + } + /** * Returns the String prefix for the given group * @param groupName @@ -107,7 +187,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { public String getGroupPrefix(String groupName) { Group g = ph.getGroup(groupName); if (g == null) { - return null; + return ""; } return g.getVariables().getVarString("prefix"); } @@ -121,7 +201,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { public String getGroupSuffix(String groupName) { Group g = ph.getGroup(groupName); if (g == null) { - return null; + return ""; } return g.getVariables().getVarString("suffix"); } @@ -161,7 +241,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * It returns a Integer variable value + * It returns a Integer variable value * It will harvest inheritance for value. * @param groupName * @param variable @@ -619,8 +699,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { @Deprecated public boolean checkGroupPermissionWithInheritance(Group start, String permission, List alreadyChecked) { PermissionCheckResult result = checkGroupPermissionWithInheritance(start, permission); - if (result.resultType.equals(result.resultType.EXCEPTION) - || result.resultType.equals(result.resultType.FOUND)) { + if (result.resultType.equals(Type.EXCEPTION) + || result.resultType.equals(Type.FOUND)) { return true; } return false; @@ -682,8 +762,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { @Deprecated public Group nextGroupWithPermission(Group start, String permission, List alreadyChecked) { PermissionCheckResult result = checkGroupPermissionWithInheritance(start, permission); - if (result.resultType.equals(result.resultType.EXCEPTION) - || result.resultType.equals(result.resultType.FOUND)) { + if (result.resultType.equals(Type.EXCEPTION) + || result.resultType.equals(Type.FOUND)) { return (Group) checkGroupPermissionWithInheritance(start, permission).owner; } return null; @@ -699,7 +779,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { * @param start * @param alreadyChecked * @return the group that passed on test. null if no group passed. - * @deprecated use the other method with same name, instead + * @deprecated use the other method with same name, instead */ @Deprecated public ArrayList listAllGroupsInherited(Group start, ArrayList alreadyChecked) { @@ -807,9 +887,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { * @param userName * @return */ + @Override public String[] getGroups(String userName) { ArrayList allGroups = listAllGroupsInherited(ph.getUser(userName).getGroup()); - for(Group subg: ph.getUser(userName).subGroupListCopy()){ + for (Group subg : ph.getUser(userName).subGroupListCopy()) { allGroups.addAll(listAllGroupsInherited(subg)); } String[] arr = new String[allGroups.size()]; @@ -825,6 +906,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { * @param targerPermission * @return */ + @SuppressWarnings("unused") private Group breadthFirstSearch(Group start, String targerPermission) { if (start == null || targerPermission == null) { return null; @@ -853,4 +935,102 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } return null; } + + @Override + public Group getDefaultGroup() { + return ph.getDefaultGroup(); + } + + @Override + public String getInfoString(String entryName, String path, + boolean isGroup) { + if (isGroup) { + Group data = ph.getGroup(entryName); + if (data == null) { + return null; + } + return data.getVariables().getVarString(path); + } else { + User data = ph.getUser(entryName); + if (data == null) { + return null; + } + return data.getVariables().getVarString(path); + } + } + + @Override + public int getInfoInteger(String entryName, String path, + boolean isGroup) { + if (isGroup) { + Group data = ph.getGroup(entryName); + if (data == null) { + return -1; + } + return data.getVariables().getVarInteger(path); + } else { + User data = ph.getUser(entryName); + if (data == null) { + return -1; + } + return data.getVariables().getVarInteger(path); + } + } + + @Override + public double getInfoDouble(String entryName, String path, + boolean isGroup) { + if (isGroup) { + Group data = ph.getGroup(entryName); + if (data == null) { + return -1; + } + return data.getVariables().getVarDouble(path); + } else { + User data = ph.getUser(entryName); + if (data == null) { + return -1; + } + return data.getVariables().getVarDouble(path); + } + + } + + @Override + public boolean getInfoBoolean(String entryName, String path, + boolean isGroup) { + if (isGroup) { + Group data = ph.getGroup(entryName); + if (data == null) { + return false; + } + return data.getVariables().getVarBoolean(path); + } else { + User data = ph.getUser(entryName); + if (data == null) { + return false; + } + return data.getVariables().getVarBoolean(path); + } + } + + @Override + public void addUserInfo(String name, String path, Object data) { + ph.getUser(name).getVariables().addVar(path, data); + } + + @Override + public void removeUserInfo(String name, String path) { + ph.getUser(name).getVariables().removeVar(path); + } + + @Override + public void addGroupInfo(String name, String path, Object data) { + ph.getGroup(name).getVariables().addVar(path, data); + } + + @Override + public void removeGroupInfo(String name, String path) { + ph.getGroup(name).getVariables().removeVar(path); + } } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java old mode 100644 new mode 100755 index 90194cddd..ede097ea4 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java @@ -1,10 +1,15 @@ package org.anjocaido.groupmanager.permissions; +//import java.util.Collection; +//import java.util.Map; +//import java.util.Set; +import org.anjocaido.groupmanager.data.Group; +//import org.anjocaido.groupmanager.data.User; import org.bukkit.entity.Player; /** - * Made by Nijikokun. Changed by Gabriel Couto - * + * Made by Nijikokun. Changed by Gabriel Couto + * * This class is intended to *read* permissions from a single world. * * @author Nijikokun @@ -12,7 +17,6 @@ import org.bukkit.entity.Player; */ public abstract class PermissionsReaderInterface { - /** * * @param player @@ -90,7 +94,7 @@ public abstract class PermissionsReaderInterface { public abstract boolean getGroupPermissionBoolean(String string, String string1); /** - * + * * @param string * @param string1 * @return @@ -160,4 +164,69 @@ public abstract class PermissionsReaderInterface { * @return */ public abstract double getPermissionDouble(String string, String string1); + +///////////////////////////// + /** + * Gets the appropriate prefix for the user. + * This method is a utility method for chat plugins to get the user's prefix + * without having to look at every one of the user's ancestors. + * Returns an empty string if user has no parent groups. + * @param world Player's world + * @param user Player's name + * @return Player's prefix + */ + public abstract String getUserPrefix(String user); + + /** + * Gets the appropriate suffix for the user. + * This method is a utility method for chat plugins to get the user's suffix + * without having to look at every one of the user's ancestors. + * Returns an empty string if user has no parent groups. + * @param world Player's world + * @param user Player's name + * @return Player's suffix + */ + public abstract String getUserSuffix(String user); + + /** + * Returns the group object representing the default group of the given world. + * This method will return null if the object does not exist or the world has no default group. + * @return Group object representing default world, or null if it doesn't exist or is not defined. + */ + public abstract Group getDefaultGroup(); + + /** + * Gets a array of the names of all parent groups in the same world. + * @param name Target user's name + * @return An array containing the names of all parent groups (including ancestors) that are in the same world + */ + public abstract String[] getGroups(String name); + + public abstract String getInfoString(String entryName, String path, boolean isGroup); + //public abstract String getInfoString(String entryName, String path, boolean isGroup, Comparator comparator); + + public abstract int getInfoInteger(String entryName, String path, boolean isGroup); + //public abstract int getInfoInteger(String entryName, String path, boolean isGroup, Comparator comparator); + + /** + * Gets a double from the Info node without inheritance. + * @param entryName + * @param path + * @param isGroup + * @return + */ + public abstract double getInfoDouble(String entryName, String path, boolean isGroup); + //public abstract double getInfoDouble(String entryName, String path, boolean isGroup, Comparator comparator); + + public abstract boolean getInfoBoolean(String entryName, String path, boolean isGroup); + //public abstract boolean getInfoBoolean(String entryName, String path, boolean isGroup, Comparator comparator); + + public abstract void addUserInfo(String name, String path, Object data); + + public abstract void removeUserInfo(String name, String path); + + public abstract void addGroupInfo(String name, String path, Object data); + + public abstract void removeGroupInfo(String name, String path); +////////////////////////////// } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GMLoggerHandler.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GMLoggerHandler.java old mode 100644 new mode 100755 diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GroupManagerPermissions.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GroupManagerPermissions.java old mode 100644 new mode 100755 index 781f2753c..0262bb33e --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GroupManagerPermissions.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/GroupManagerPermissions.java @@ -9,6 +9,7 @@ package org.anjocaido.groupmanager.utils; * @author gabrielcouto */ public enum GroupManagerPermissions { + manuadd, manudel, manuaddsub, diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/PermissionCheckResult.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/PermissionCheckResult.java old mode 100644 new mode 100755 index 3ee6fdf30..88ac48427 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/PermissionCheckResult.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/PermissionCheckResult.java @@ -11,6 +11,7 @@ import org.anjocaido.groupmanager.data.DataUnit; * @author gabrielcouto */ public class PermissionCheckResult { + /** * It should be the owner of the access level found. * diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/StringPermissionComparator.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/StringPermissionComparator.java old mode 100644 new mode 100755 index 2e192118d..ab2fd605b --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/StringPermissionComparator.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/StringPermissionComparator.java @@ -2,7 +2,6 @@ * To change this template, choose Tools | Templates * and open the template in the editor. */ - package org.anjocaido.groupmanager.utils; import java.util.Comparator; @@ -19,32 +18,32 @@ public class StringPermissionComparator implements Comparator { boolean bp = permB.startsWith("+"); boolean am = permA.startsWith("-"); boolean bm = permB.startsWith("-"); - if(ap&&bp){ + if (ap && bp) { return 0; } - if(ap&&!bp){ + if (ap && !bp) { return -1; } - if(!ap&&bp){ + if (!ap && bp) { return 1; } - if(am&&bm){ + if (am && bm) { return 0; } - if(am&&!bm){ + if (am && !bm) { return -1; } - if(!am&&bm){ + if (!am && bm) { return 1; } return permA.compareToIgnoreCase(permB); } private static StringPermissionComparator instance; - public static StringPermissionComparator getInstance(){ - if(instance==null){ + + public static StringPermissionComparator getInstance() { + if (instance == null) { instance = new StringPermissionComparator(); } return instance; } - } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/Tasks.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/Tasks.java old mode 100644 new mode 100755 index 64bdb6209..579ee72a6 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/Tasks.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/utils/Tasks.java @@ -10,7 +10,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.util.ArrayList; +import java.util.Calendar; import java.util.GregorianCalendar; import java.util.List; import org.anjocaido.groupmanager.data.Group; @@ -62,48 +62,51 @@ public abstract class Tasks { public static String getDateString() { GregorianCalendar now = new GregorianCalendar(); String date = ""; - date += now.get(GregorianCalendar.DAY_OF_MONTH); + date += now.get(Calendar.DAY_OF_MONTH); date += "-"; - date += now.get(GregorianCalendar.HOUR); + date += now.get(Calendar.HOUR); date += "-"; - date += now.get(GregorianCalendar.MINUTE); + date += now.get(Calendar.MINUTE); return date; } - public static String getStringListInString(List list){ - if(list==null){ + + public static String getStringListInString(List list) { + if (list == null) { return ""; } - String result=""; - for(int i=0;i list){ - if(list==null){ + + public static String getGroupListInString(List list) { + if (list == null) { return ""; } - String result=""; - for(int i=0;i Date: Mon, 29 Aug 2011 21:15:33 +0100 Subject: [PATCH 03/20] Test commit to see if push works Updated plugin.yml to alpha-6 for GM --- EssentialsGroupManager/src/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EssentialsGroupManager/src/plugin.yml b/EssentialsGroupManager/src/plugin.yml index 86fb874af..0318f43f6 100644 --- a/EssentialsGroupManager/src/plugin.yml +++ b/EssentialsGroupManager/src/plugin.yml @@ -1,5 +1,5 @@ name: GroupManager -version: "1.0(alpha-5) [Zombie-Version, please switch to Permissions 3]" +version: "1.0(alpha-6)" main: org.anjocaido.groupmanager.GroupManager website: http://www.anjocaido.info/ description: Provides on-the-fly system for Permission system created by Nijikokun. But all in memory, and with flat-file saving schedule. From b140f606b41cbb30fd0acff3f9c6f416967d82c2 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 31 Aug 2011 01:56:31 +0100 Subject: [PATCH 04/20] added PermissionHandler.class and .project/.classpath so this will build in eclipse --- .classpath | 8 ++++++++ .project | 17 +++++++++++++++++ .../nijiko/permissions/PermissionHandler.class | Bin 0 -> 5289 bytes 3 files changed, 25 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 EssentialsGroupBridge/src/com/nijiko/permissions/PermissionHandler.class diff --git a/.classpath b/.classpath new file mode 100644 index 000000000..0683da590 --- /dev/null +++ b/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 000000000..2c69e0560 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + Essentials + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/EssentialsGroupBridge/src/com/nijiko/permissions/PermissionHandler.class b/EssentialsGroupBridge/src/com/nijiko/permissions/PermissionHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..d3022a484c3422ca49686702e085318a505c74e8 GIT binary patch literal 5289 zcmcIoc~{#;5Fdew!QlvJpiP>lX&RfhQJXf+0VM?-2#G@oCeV^zYk6%JWXY8!jvgPX zf91XY(GSoM)z{h8t|TL=@#FA&_Go8z=Qr1mcKy%4fBg*rci@j4bi+{=e$B#f8eEuV z7IWt`=*|~5HOMU5RjR>IiCJ{jYgDMSK`JJ4MoP9p%uV7jK99kZ&zc)qkt_K9v1tFD(_hgtO* zZcEPCp~l|-P1@F=&$LNZ&dEJKG-%W1&{_ChgTb2Z7_<~l=&Ms76pbFv7kpUHWu{)H zF51>tW_63Wo`VkGJT9M&TRDeoGTZ=+qeK0NY>VvEdDBD*f6}1WFzuGl>E0oTtmjL% zQ`alr-X3#xYPrlk($`FKgz<@E6wt{B2@#6VjC1(fT$m7anpCT=TGR;>a|-2{qA`ay z?0tG%pgtS~waEpgv)cLu>3X9GAVC z7!RR*&0!7V90^zr`VC_76$>8Y^?0i@Y>e%&GJTyKtVy^iPeEQn0D*<`B*?`UsnKQM zQVkY6gG}3J+;}X-eyLNsRXm+ip#`<7c)qCYQp3evrJPm_9#FZXCGwpFRw=}1}T7n=sp5_H77L?;~HNd}lz#@=jFndQ#9QsH%6Kb9&68k?kw_1%sP zjW+D(q>1@5PqHo{Y`%%=O^`5QZiZ)Z5Z`l6;?OP1>N_r`@(csKa*9rjYcF9yvAe8T zHQRrMp4_QmnHtjOY*-}+ zX9^PaR$Pg3v2&}w6#W{&PI9H@i zhZ@ACcq=BeQ}hrHg15>&JMJ<>rk5cL0BHKg0r@| zT?7nuwHQ!W3wf`|m2D3%y-SQ=+9yH-GqJ-1C@RgwV;C>K=2grXI8PDK&7QPPTb2xq^eR>4ni1qVwJTJ!&VL|X0 zp%|=tjO&(QS@4(OiJ&X+RM2Obd~VNkSQYdItO@#3%3s2Ipr?%UHst&bcopzBk-sI^ zZ^5?#|2yPwOMTn$I^chg{2$;)f%B8h!OwC` Date: Fri, 2 Sep 2011 23:07:23 +0100 Subject: [PATCH 05/20] Bukkit Superperms support --- EssentialsGroupBridge/.classpath | 10 + EssentialsGroupBridge/.project | 17 ++ .../bukkit/Permissions/Permissions.java | 4 +- .../permissions/NijikoPermissionsProxy.java | 131 ++++++------ EssentialsGroupManager/.classpath | 7 + EssentialsGroupManager/.project | 17 ++ .../anjocaido/groupmanager/GroupManager.java | 14 +- .../anjocaido/groupmanager/data/Group.java | 9 +- .../org/anjocaido/groupmanager/data/User.java | 12 ++ .../permissions/BukkitPermissions.java | 195 ++++++++++++++++++ 10 files changed, 344 insertions(+), 72 deletions(-) create mode 100644 EssentialsGroupBridge/.classpath create mode 100644 EssentialsGroupBridge/.project mode change 100755 => 100644 EssentialsGroupBridge/src/com/nijikokun/bukkit/Permissions/Permissions.java mode change 100755 => 100644 EssentialsGroupBridge/src/org/anjocaido/groupmanager/permissions/NijikoPermissionsProxy.java create mode 100644 EssentialsGroupManager/.classpath create mode 100644 EssentialsGroupManager/.project mode change 100755 => 100644 EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java mode change 100755 => 100644 EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java mode change 100755 => 100644 EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java create mode 100644 EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java diff --git a/EssentialsGroupBridge/.classpath b/EssentialsGroupBridge/.classpath new file mode 100644 index 000000000..a1bc47710 --- /dev/null +++ b/EssentialsGroupBridge/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/EssentialsGroupBridge/.project b/EssentialsGroupBridge/.project new file mode 100644 index 000000000..0780b7dbb --- /dev/null +++ b/EssentialsGroupBridge/.project @@ -0,0 +1,17 @@ + + + EssentialsGroupBridge + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/EssentialsGroupBridge/src/com/nijikokun/bukkit/Permissions/Permissions.java b/EssentialsGroupBridge/src/com/nijikokun/bukkit/Permissions/Permissions.java old mode 100755 new mode 100644 index c7a85fc71..5d027cccc --- a/EssentialsGroupBridge/src/com/nijikokun/bukkit/Permissions/Permissions.java +++ b/EssentialsGroupBridge/src/com/nijikokun/bukkit/Permissions/Permissions.java @@ -2,7 +2,7 @@ package com.nijikokun.bukkit.Permissions; import com.nijiko.permissions.PermissionHandler; import java.util.logging.Logger; -import org.anjocaido.groupmanager.GroupManager; +//import org.anjocaido.groupmanager.GroupManager; import org.anjocaido.groupmanager.permissions.NijikoPermissionsProxy; import org.bukkit.event.Event.Priority; import org.bukkit.event.Event.Type; @@ -63,7 +63,7 @@ public class Permissions extends JavaPlugin { } private void setGM(final Plugin p) { - GroupManager groupManager = (GroupManager) p; + //GroupManager groupManager = (GroupManager) p; ((NijikoPermissionsProxy) Security).setGM(p); } diff --git a/EssentialsGroupBridge/src/org/anjocaido/groupmanager/permissions/NijikoPermissionsProxy.java b/EssentialsGroupBridge/src/org/anjocaido/groupmanager/permissions/NijikoPermissionsProxy.java old mode 100755 new mode 100644 index bc9cde437..a41a51bc9 --- a/EssentialsGroupBridge/src/org/anjocaido/groupmanager/permissions/NijikoPermissionsProxy.java +++ b/EssentialsGroupBridge/src/org/anjocaido/groupmanager/permissions/NijikoPermissionsProxy.java @@ -47,12 +47,12 @@ public class NijikoPermissionsProxy extends PermissionHandler { @Override public void addGroupInfo(String world, String group, String node, Object data) { - plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().addGroupInfo(group, node, data); + GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().addGroupInfo(group, node, data); } @Override public void removeGroupInfo(String world, String group, String node) { - plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().removeGroupInfo(group, node); + GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().removeGroupInfo(group, node); } @Override @@ -67,17 +67,17 @@ public class NijikoPermissionsProxy extends PermissionHandler { @Override public void addUserInfo(String world, String user, String node, Object data) { - plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().addUserInfo(user, node, data); + GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().addUserInfo(user, node, data); } @Override public void removeUserInfo(String world, String user, String node) { - plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().removeUserInfo(user, node); + GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().removeUserInfo(user, node); } @Deprecated public void removeUserInfo(String user, String node) { - plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().removeUserInfo(user, node); + GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().removeUserInfo(user, node); } @Deprecated @@ -92,12 +92,12 @@ public class NijikoPermissionsProxy extends PermissionHandler { @Deprecated public void addGroupInfo(String group, String node, Object data) { - plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().addGroupInfo(group, node, data); + GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().addGroupInfo(group, node, data); } @Deprecated public void removeGroupInfo(String group, String node) { - plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().removeGroupInfo(group, node); + GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().removeGroupInfo(group, node); } @Deprecated @@ -112,7 +112,7 @@ public class NijikoPermissionsProxy extends PermissionHandler { @Deprecated public void addUserInfo(String user, String node, Object data) { - plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().addUserInfo(user, node, data); + GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().addUserInfo(user, node, data); } @Override @@ -147,13 +147,13 @@ public class NijikoPermissionsProxy extends PermissionHandler { @Override public void reload() { - plugin.getWorldsHolder().reloadAll(); + GroupManager.getWorldsHolder().reloadAll(); //throw new UnsupportedOperationException("Not supported yet."); } @Override public boolean reload(String world) { - plugin.getWorldsHolder().reloadWorld(world); + GroupManager.getWorldsHolder().reloadWorld(world); return true; } @@ -175,214 +175,214 @@ public class NijikoPermissionsProxy extends PermissionHandler { } if (player.getWorld() == null) { GroupManager.logger.warning("The player " + player.getName() + " has a null world? Treating as default world!"); - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().has(player, permission); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().has(player, permission); } - return plugin.getWorldsHolder().getWorldData(player.getWorld().getName()).getPermissionsHandler().has(player, permission); + return GroupManager.getWorldsHolder().getWorldData(player.getWorld().getName()).getPermissionsHandler().has(player, permission); } @Override public String getGroupRawPrefix(String world, String group) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPrefix(group); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPrefix(group); } @Override public String getGroupRawSuffix(String world, String group) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupSuffix(group); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupSuffix(group); } @Override public String getUserPrefix(String world, String user) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPrefix(user); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPrefix(user); } @Override public String getUserSuffix(String world, String user) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserSuffix(user); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserSuffix(user); } @Override public String getGroup(String world, String user) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroup(user); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroup(user); } @Override public String getPrimaryGroup(String world, String user) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroup(user); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroup(user); } @Override public boolean canUserBuild(String world, String user) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().canUserBuild(user); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().canUserBuild(user); } @Deprecated public String getGroup(String name) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroup(name); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroup(name); } @Override public String[] getGroups(String world, String name) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroups(name); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroups(name); } @Override public boolean inGroup(String world, String name, String group) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().inGroup(name, group); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().inGroup(name, group); } @Deprecated public boolean inGroup(String name, String group) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().inGroup(name, group); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().inGroup(name, group); } @Override public String getGroupPrefix(String world, String group) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPrefix(group); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPrefix(group); } @Deprecated public String getGroupPrefix(String group) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPrefix(group); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPrefix(group); } @Override public String getGroupSuffix(String world, String group) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupSuffix(group); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupSuffix(group); } @Deprecated public String getGroupSuffix(String group) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupSuffix(group); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupSuffix(group); } @Override public boolean canGroupBuild(String world, String group) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().canGroupBuild(group); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().canGroupBuild(group); } @Deprecated public boolean canGroupBuild(String group) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().canGroupBuild(group); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().canGroupBuild(group); } @Override public String getGroupPermissionString(String world, String group, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionString(group, permission); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionString(group, permission); } @Deprecated public String getGroupPermissionString(String group, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionString(group, permission); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionString(group, permission); } @Override public int getGroupPermissionInteger(String world, String group, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionInteger(group, permission); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionInteger(group, permission); } @Deprecated public int getGroupPermissionInteger(String group, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionInteger(group, permission); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionInteger(group, permission); } @Override public boolean getGroupPermissionBoolean(String world, String group, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionBoolean(group, permission); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionBoolean(group, permission); } @Deprecated public boolean getGroupPermissionBoolean(String group, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionBoolean(group, permission); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionBoolean(group, permission); } @Override public double getGroupPermissionDouble(String world, String group, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionDouble(group, permission); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getGroupPermissionDouble(group, permission); } @Deprecated public double getGroupPermissionDouble(String group, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionDouble(group, permission); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getGroupPermissionDouble(group, permission); } @Override public String getUserPermissionString(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionString(name, permission); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionString(name, permission); } @Deprecated public String getUserPermissionString(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionString(name, permission); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionString(name, permission); } @Override public int getUserPermissionInteger(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionInteger(name, permission); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionInteger(name, permission); } @Deprecated public int getUserPermissionInteger(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionInteger(name, permission); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionInteger(name, permission); } @Override public boolean getUserPermissionBoolean(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionBoolean(name, permission); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionBoolean(name, permission); } @Deprecated public boolean getUserPermissionBoolean(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionBoolean(name, permission); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionBoolean(name, permission); } @Override public double getUserPermissionDouble(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionDouble(name, permission); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getUserPermissionDouble(name, permission); } @Deprecated public double getUserPermissionDouble(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionDouble(name, permission); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getUserPermissionDouble(name, permission); } @Override public String getPermissionString(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionString(name, permission); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionString(name, permission); } @Deprecated public String getPermissionString(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionString(name, permission); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionString(name, permission); } @Override public int getPermissionInteger(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionInteger(name, permission); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionInteger(name, permission); } @Deprecated public int getPermissionInteger(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionInteger(name, permission); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionInteger(name, permission); } @Override public boolean getPermissionBoolean(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionBoolean(name, permission); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionBoolean(name, permission); } @Deprecated public boolean getPermissionBoolean(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionBoolean(name, permission); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionBoolean(name, permission); } @Override public double getPermissionDouble(String world, String name, String permission) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionDouble(name, permission); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getPermissionDouble(name, permission); } @Deprecated public double getPermissionDouble(String name, String permission) { - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionDouble(name, permission); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().getPermissionDouble(name, permission); } public void setGM(Plugin p) { @@ -391,7 +391,7 @@ public class NijikoPermissionsProxy extends PermissionHandler { @Override public boolean canGroupRawBuild(String world, String group) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().canGroupBuild(group); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().canGroupBuild(group); } @Override @@ -432,7 +432,7 @@ public class NijikoPermissionsProxy extends PermissionHandler { @Override public Boolean getInfoBoolean(String world, String entryName, String path, boolean isGroup) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getInfoBoolean(entryName, path, isGroup); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getInfoBoolean(entryName, path, isGroup); } @Override @@ -443,7 +443,7 @@ public class NijikoPermissionsProxy extends PermissionHandler { @Override public Double getInfoDouble(String world, String entryName, String path, boolean isGroup) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getInfoDouble(entryName, path, isGroup); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getInfoDouble(entryName, path, isGroup); } @Override @@ -455,7 +455,7 @@ public class NijikoPermissionsProxy extends PermissionHandler { @Override public Integer getInfoInteger(String world, String entryName, String path, boolean isGroup) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getInfoInteger(entryName, path, isGroup); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getInfoInteger(entryName, path, isGroup); } @Override @@ -466,7 +466,7 @@ public class NijikoPermissionsProxy extends PermissionHandler { @Override public String getInfoString(String world, String entryName, String path, boolean isGroup) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().getInfoString(entryName, path, isGroup); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().getInfoString(entryName, path, isGroup); } @Override @@ -530,14 +530,14 @@ public class NijikoPermissionsProxy extends PermissionHandler { } if (world == null) { GroupManager.logger.warning("The player " + playerName + " has a null world? Treating as default world!"); - return plugin.getWorldsHolder().getDefaultWorld().getPermissionsHandler().permission(playerName, permission); + return GroupManager.getWorldsHolder().getDefaultWorld().getPermissionsHandler().permission(playerName, permission); } - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().permission(playerName, permission); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().permission(playerName, permission); } @Override public boolean inGroup(String world, String user, String groupWorld, String group) { - return plugin.getWorldsHolder().getWorldData(world).getPermissionsHandler().inGroup(user, group); + return GroupManager.getWorldsHolder().getWorldData(world).getPermissionsHandler().inGroup(user, group); } @Override @@ -580,8 +580,9 @@ public class NijikoPermissionsProxy extends PermissionHandler { throw new UnsupportedOperationException("Not supported yet."); } - @Override - public Group getPrimaryGroupObject(String string, String string1) { - throw new UnsupportedOperationException("Not supported yet."); - } + //@Override + public Group getPrimaryGroupObject(String arg0, String arg1) { + throw new UnsupportedOperationException("Not supported yet."); + } + } diff --git a/EssentialsGroupManager/.classpath b/EssentialsGroupManager/.classpath new file mode 100644 index 000000000..eafae0c2b --- /dev/null +++ b/EssentialsGroupManager/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/EssentialsGroupManager/.project b/EssentialsGroupManager/.project new file mode 100644 index 000000000..6ad74b347 --- /dev/null +++ b/EssentialsGroupManager/.project @@ -0,0 +1,17 @@ + + + EssentialsGroupManager + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java old mode 100755 new mode 100644 index 7f6e0fb85..2e094558c --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java @@ -5,6 +5,7 @@ package org.anjocaido.groupmanager; import org.anjocaido.groupmanager.permissions.AnjoPermissionsHandler; +import org.anjocaido.groupmanager.permissions.BukkitPermissions; import org.anjocaido.groupmanager.utils.GroupManagerPermissions; import org.anjocaido.groupmanager.data.Variables; import org.anjocaido.groupmanager.data.User; @@ -45,15 +46,19 @@ public class GroupManager extends JavaPlugin { private ScheduledThreadPoolExecutor scheduler; private Map> overloadedUsers = new HashMap>(); private Map selectedWorlds = new HashMap(); - private WorldsHolder worldsHolder; + private static WorldsHolder worldsHolder; private boolean validateOnlinePlayer = true; private boolean isReady = false; + public static boolean isLoaded = false; private GMConfiguration config; private GMLoggerHandler ch; + public static BukkitPermissions BukkitPermissions; public static final Logger logger = Logger.getLogger(GroupManager.class.getName()); @Override public void onDisable() { + isLoaded = false; + if (worldsHolder != null) { worldsHolder.saveChanges(); } @@ -82,8 +87,11 @@ public class GroupManager extends JavaPlugin { this.getServer().getPluginManager().disablePlugin(this); throw new IllegalStateException("An error ocurred while loading GroupManager"); } + + BukkitPermissions = new BukkitPermissions(this); enableScheduler(); + isLoaded = true; System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!"); } @@ -110,7 +118,7 @@ public class GroupManager extends JavaPlugin { @Override public void run() { - GroupManager.this.worldsHolder.saveChanges(); + GroupManager.worldsHolder.saveChanges(); } }; scheduler = new ScheduledThreadPoolExecutor(1); @@ -153,7 +161,7 @@ public class GroupManager extends JavaPlugin { worldsHolder.reloadAll(); } - public WorldsHolder getWorldsHolder() { + public static WorldsHolder getWorldsHolder() { return worldsHolder; } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java old mode 100755 new mode 100644 index 4af5449fc..7523831e7 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/Group.java @@ -4,6 +4,7 @@ */ package org.anjocaido.groupmanager.data; +import org.anjocaido.groupmanager.GroupManager; import org.anjocaido.groupmanager.dataholder.WorldDataHolder; import java.util.ArrayList; import java.util.Map; @@ -52,7 +53,7 @@ public class Group extends DataUnit implements Cloneable { /** * Use this to deliver a group from a different dataSource to another * @param dataSource - * @return + * @return Null or Clone */ public Group clone(WorldDataHolder dataSource) { if (dataSource.groupExists(this.getName())) { @@ -79,7 +80,7 @@ public class Group extends DataUnit implements Cloneable { } /** - * @param inherits the inherits to set + * @param inherit the inherits to set */ public void addInherits(Group inherit) { if (!this.getDataSource().groupExists(inherit.getName())) { @@ -89,6 +90,8 @@ public class Group extends DataUnit implements Cloneable { inherits.add(inherit.getName().toLowerCase()); } flagAsChanged(); + if (GroupManager.isLoaded) + GroupManager.BukkitPermissions.updateAllPlayers(); } public boolean removeInherits(String inherit) { @@ -118,5 +121,7 @@ public class Group extends DataUnit implements Cloneable { variables.addVar(key, temp.getVarObject(key)); } flagAsChanged(); + if (GroupManager.isLoaded) + GroupManager.BukkitPermissions.updateAllPlayers(); } } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java old mode 100755 new mode 100644 index b90cf4ff1..f3ea1d0f5 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java @@ -6,6 +6,8 @@ package org.anjocaido.groupmanager.data; //import com.sun.org.apache.bcel.internal.generic.AALOAD; import java.util.ArrayList; + +import org.anjocaido.groupmanager.GroupManager; import org.anjocaido.groupmanager.dataholder.WorldDataHolder; import java.util.Map; @@ -102,6 +104,8 @@ public class User extends DataUnit implements Cloneable { public void setGroup(String group) { this.group = group; flagAsChanged(); + if (GroupManager.isLoaded) + GroupManager.BukkitPermissions.updateAllPlayers(); } /** @@ -114,6 +118,8 @@ public class User extends DataUnit implements Cloneable { group = getDataSource().getGroup(group.getName()); this.group = group.getName(); flagAsChanged(); + if (GroupManager.isLoaded) + GroupManager.BukkitPermissions.updateAllPlayers(); } public void addSubGroup(Group subGroup) { @@ -127,6 +133,8 @@ public class User extends DataUnit implements Cloneable { removeSubGroup(subGroup); subGroups.add(subGroup.getName()); flagAsChanged(); + if (GroupManager.isLoaded) + GroupManager.BukkitPermissions.updateAllPlayers(); } public int subGroupsSize() { @@ -145,6 +153,8 @@ public class User extends DataUnit implements Cloneable { try { if (subGroups.remove(subGroup.getName())) { flagAsChanged(); + if (GroupManager.isLoaded) + GroupManager.BukkitPermissions.updateAllPlayers(); return true; } } catch (Exception e) { @@ -187,5 +197,7 @@ public class User extends DataUnit implements Cloneable { variables.addVar(key, temp.getVarObject(key)); } flagAsChanged(); + if (GroupManager.isLoaded) + GroupManager.BukkitPermissions.updateAllPlayers(); } } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java new file mode 100644 index 000000000..e396118b4 --- /dev/null +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java @@ -0,0 +1,195 @@ +/* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +package org.anjocaido.groupmanager.permissions; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.anjocaido.groupmanager.GroupManager; +import org.anjocaido.groupmanager.data.User; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerListener; +import org.bukkit.event.player.PlayerPortalEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.server.PluginDisableEvent; +import org.bukkit.event.server.PluginEnableEvent; +import org.bukkit.event.server.ServerListener; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionAttachment; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; + + +/** + * + * BukkitPermissions overrides to force GM reponses to Superperms + * + * @author ElgarL, based upon PermissionsEX implementation + */ +public class BukkitPermissions { + + protected Map attachments = new HashMap(); + protected Set registeredPermissions = new HashSet(); + protected Plugin plugin; + protected boolean dumpAllPermissions = true; + protected boolean dumpMatchedPermissions = true; + + public BukkitPermissions(Plugin plugin) { + this.plugin = plugin; + + this.collectPermissions(); + this.registerEvents(); + + this.updateAllPlayers(); + + GroupManager.logger.info("Superperms support enabled."); + } + + private void registerEvents() { + PluginManager manager = plugin.getServer().getPluginManager(); + + PlayerEvents playerEventListener = new PlayerEvents(); + + manager.registerEvent(Event.Type.PLAYER_JOIN, playerEventListener, Event.Priority.Normal, plugin); + manager.registerEvent(Event.Type.PLAYER_KICK, playerEventListener, Event.Priority.Normal, plugin); + manager.registerEvent(Event.Type.PLAYER_QUIT, playerEventListener, Event.Priority.Normal, plugin); + + manager.registerEvent(Event.Type.PLAYER_RESPAWN, playerEventListener, Event.Priority.Normal, plugin); + manager.registerEvent(Event.Type.PLAYER_TELEPORT, playerEventListener, Event.Priority.Normal, plugin); + manager.registerEvent(Event.Type.PLAYER_PORTAL, playerEventListener, Event.Priority.Normal, plugin); + + ServerListener serverListener = new BukkitEvents(); + + manager.registerEvent(Event.Type.PLUGIN_ENABLE, serverListener, Event.Priority.Normal, plugin); + manager.registerEvent(Event.Type.PLUGIN_DISABLE, serverListener, Event.Priority.Normal, plugin); + } + + private void collectPermissions() { + registeredPermissions.clear(); + for (Plugin bukkitPlugin : Bukkit.getServer().getPluginManager().getPlugins()) { + registeredPermissions.addAll(bukkitPlugin.getDescription().getPermissions()); + } + } + + public void updatePermissions(Player player){ + this.updatePermissions(player, null); + } + + public void updatePermissions(Player player, String world) { + if (player == null || !this.plugin.isEnabled()) { + return; + } + + if (!this.attachments.containsKey(player)) { + this.attachments.put(player, player.addAttachment(plugin)); + } + + if(world == null){ + world = player.getWorld().getName(); + } + + PermissionAttachment attachment = this.attachments.get(player); + + User user = GroupManager.getWorldsHolder().getWorldData(world).getUser(player.getName()); + + // clear permissions + for (String permission : attachment.getPermissions().keySet()) { + attachment.unsetPermission(permission); + } + + for (Permission permission : registeredPermissions) { + boolean permissionValue = user.getGroup().hasSamePermissionNode(permission.getName()); + + //GroupManager.logger.info(permission.getName() + " : " + Boolean.toString(permissionValue)); + + attachment.setPermission(permission, permissionValue); + } + + player.recalculatePermissions(); + + } + + public void updateAllPlayers() { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + updatePermissions(player); + } + } + + protected class PlayerEvents extends PlayerListener { + + @Override + public void onPlayerJoin(PlayerJoinEvent event) { + updatePermissions(event.getPlayer()); + } + + @Override + public void onPlayerPortal(PlayerPortalEvent event) { // will portal into another world + if(event.getPlayer().getWorld().equals(event.getTo().getWorld())){ // only if world actually changed + return; + } + + updatePermissions(event.getPlayer(), event.getTo().getWorld().getName()); + } + + @Override + public void onPlayerRespawn(PlayerRespawnEvent event) { // can be respawned in another world + updatePermissions(event.getPlayer(), event.getRespawnLocation().getWorld().getName()); + } + + @Override + public void onPlayerTeleport(PlayerTeleportEvent event) { // can be teleported into another world + if (!event.getFrom().getWorld().equals(event.getTo().getWorld())) { // only if world actually changed + updatePermissions(event.getPlayer(), event.getTo().getWorld().getName()); + } + } + + @Override + public void onPlayerQuit(PlayerQuitEvent event) { + attachments.remove(event.getPlayer()); + } + + @Override + public void onPlayerKick(PlayerKickEvent event) { + attachments.remove(event.getPlayer()); + } + } + + protected class BukkitEvents extends ServerListener { + + @Override + public void onPluginEnable(PluginEnableEvent event) { + collectPermissions(); + updateAllPlayers(); + } + + @Override + public void onPluginDisable(PluginDisableEvent event) { + collectPermissions(); + updateAllPlayers(); + } + } + +} \ No newline at end of file From a220b267d4a443788ed40d2f5619213399e35a6f Mon Sep 17 00:00:00 2001 From: ElgarL Date: Sat, 3 Sep 2011 11:33:14 +0100 Subject: [PATCH 06/20] - Fixed users being able to use 'manuadd' to add users to higher groups than their own. - Added SuperPerms support so GM will update adn provide the permissions to plugins which only support Bukkit Perms. - Added more helpful output to errors on argument lengths. --- EssentialsGroupManager/src/Changelog.txt | 6 ++ .../anjocaido/groupmanager/GroupManager.java | 79 ++++++++++++------- EssentialsGroupManager/src/plugin.yml | 2 +- 3 files changed, 56 insertions(+), 31 deletions(-) create mode 100644 EssentialsGroupManager/src/Changelog.txt diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt new file mode 100644 index 000000000..716242e3b --- /dev/null +++ b/EssentialsGroupManager/src/Changelog.txt @@ -0,0 +1,6 @@ +Changelog + +v 1.1: + - Fixed users being able to use 'manuadd' to add users to higher groups than their own. + - Added SuperPerms support so GM will update adn provide the permissions to plugins which only support Bukkit Perms. + - Added more helpful output to errors on argument lengths. \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java index 2e094558c..71a379976 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java @@ -291,7 +291,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -311,11 +311,29 @@ public class GroupManager extends JavaPlugin { sender.sendMessage(ChatColor.RED + "Group not found!"); return false; } + //VALIDANDO PERMISSAO if (!isConsole && !senderPlayer.isOp() && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) { sender.sendMessage(ChatColor.RED + "Can't modify player with same permissions than you, or higher."); return false; } + if (!isConsole && !senderPlayer.isOp() && (permissionHandler.hasGroupInInheritance(auxGroup, senderGroup.getName()))) { + sender.sendMessage(ChatColor.RED + "The destination group can't be the same as yours, or higher."); + return false; + } + if (!isConsole && !senderPlayer.isOp() && (!permissionHandler.inGroup(senderUser.getName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getName(), auxGroup.getName()))) { + sender.sendMessage(ChatColor.RED + "Can't modify player involving a group that you don't inherit."); + return false; + } + if (!isConsole && !senderPlayer.isOp() && (!permissionHandler.hasGroupInInheritance(auxUser.getGroup(), auxGroup.getName()) && !permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) { + sender.sendMessage(ChatColor.RED + "Can't modify player using groups with different heritage line."); + return false; + } + if (!isConsole && !senderPlayer.isOp() && (!permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) { + sender.sendMessage(ChatColor.RED + "The new group must be a higher rank."); + return false; + } + //PARECE OK auxUser.setGroup(auxGroup); sender.sendMessage(ChatColor.YELLOW + "You changed player '" + auxUser.getName() + "' group to '" + auxGroup.getName() + "'."); @@ -331,7 +349,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -365,7 +383,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -403,8 +421,8 @@ public class GroupManager extends JavaPlugin { return true; } //VALIDANDO ARGUMENTOS - if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + if (args.length != 2) { + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/manudelsub )"); return false; } if (validateOnlinePlayer) { @@ -438,7 +456,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -460,7 +478,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -482,7 +500,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -547,7 +565,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -599,7 +617,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -654,7 +672,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -702,7 +720,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -756,6 +774,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -795,7 +814,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -844,7 +863,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -879,7 +898,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -911,7 +930,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -947,7 +966,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length < 3) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -983,7 +1002,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -1015,7 +1034,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -1053,7 +1072,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -1096,7 +1115,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length < 3) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -1126,7 +1145,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -1152,7 +1171,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -1190,7 +1209,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } auxGroup = dataHolder.getGroup(args[0]); @@ -1218,7 +1237,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -1253,7 +1272,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -1292,7 +1311,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -1449,7 +1468,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -1505,7 +1524,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ARGUMENTOS if (args.length != 2) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); return false; } if (validateOnlinePlayer) { @@ -1585,7 +1604,7 @@ public class GroupManager extends JavaPlugin { return true; case manselect: if (args.length < 1) { - sender.sendMessage(ChatColor.RED + "Review your arguments count!"); + sender.sendMessage(ChatColor.RED + "Review your arguments count! (/ )"); sender.sendMessage(ChatColor.YELLOW + "Worlds available: "); ArrayList worlds = worldsHolder.allWorldsDataList(); auxString = ""; diff --git a/EssentialsGroupManager/src/plugin.yml b/EssentialsGroupManager/src/plugin.yml index 0318f43f6..ace9701cd 100644 --- a/EssentialsGroupManager/src/plugin.yml +++ b/EssentialsGroupManager/src/plugin.yml @@ -1,5 +1,5 @@ name: GroupManager -version: "1.0(alpha-6)" +version: "1.1" main: org.anjocaido.groupmanager.GroupManager website: http://www.anjocaido.info/ description: Provides on-the-fly system for Permission system created by Nijikokun. But all in memory, and with flat-file saving schedule. From 16e19a77759585118e97f3f1d4ca7bc7041e800f Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 3 Sep 2011 14:24:32 +0100 Subject: [PATCH 07/20] - GroupManager will now attempt to select the default world when using commands instead of failing and telling you to use '/manselect '. --- EssentialsGroupManager/src/Changelog.txt | 5 +- .../anjocaido/groupmanager/GroupManager.java | 192 +++++++++--------- 2 files changed, 96 insertions(+), 101 deletions(-) diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index 716242e3b..86f6e521f 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -2,5 +2,6 @@ Changelog v 1.1: - Fixed users being able to use 'manuadd' to add users to higher groups than their own. - - Added SuperPerms support so GM will update adn provide the permissions to plugins which only support Bukkit Perms. - - Added more helpful output to errors on argument lengths. \ No newline at end of file + - Added SuperPerms support so GM will update and provide the permissions to plugins which only support Bukkit Perms. + - Added more helpful output to errors on argument lengths. + - GroupManager will now attempt to select the default world when using commands instead of failing and telling you to use '/manselect '. \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java index 71a379976..7663e0930 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java @@ -285,9 +285,8 @@ public class GroupManager extends JavaPlugin { case manuadd: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -343,9 +342,8 @@ public class GroupManager extends JavaPlugin { case manudel: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { @@ -377,9 +375,11 @@ public class GroupManager extends JavaPlugin { case manuaddsub: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) { + sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); + sender.sendMessage(ChatColor.RED + "Use /manselect "); + return true; + } } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -416,9 +416,8 @@ public class GroupManager extends JavaPlugin { case manudelsub: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -450,9 +449,8 @@ public class GroupManager extends JavaPlugin { case mangadd: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { @@ -472,9 +470,8 @@ public class GroupManager extends JavaPlugin { case mangdel: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { @@ -494,9 +491,8 @@ public class GroupManager extends JavaPlugin { case manuaddp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -559,9 +555,8 @@ public class GroupManager extends JavaPlugin { case manudelp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -611,9 +606,8 @@ public class GroupManager extends JavaPlugin { case manulistp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { @@ -666,9 +660,8 @@ public class GroupManager extends JavaPlugin { case manucheckp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -714,9 +707,8 @@ public class GroupManager extends JavaPlugin { case mangaddp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -768,9 +760,8 @@ public class GroupManager extends JavaPlugin { case mangdelp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -808,9 +799,8 @@ public class GroupManager extends JavaPlugin { case manglistp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { @@ -857,9 +847,8 @@ public class GroupManager extends JavaPlugin { case mangcheckp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -892,9 +881,8 @@ public class GroupManager extends JavaPlugin { case mangaddi: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -924,9 +912,8 @@ public class GroupManager extends JavaPlugin { case mangdeli: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -960,9 +947,8 @@ public class GroupManager extends JavaPlugin { case manuaddv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length < 3) { @@ -996,9 +982,8 @@ public class GroupManager extends JavaPlugin { case manudelv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -1028,9 +1013,8 @@ public class GroupManager extends JavaPlugin { case manulistv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { @@ -1066,9 +1050,8 @@ public class GroupManager extends JavaPlugin { case manucheckv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -1109,9 +1092,8 @@ public class GroupManager extends JavaPlugin { case mangaddv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length < 3) { @@ -1139,9 +1121,8 @@ public class GroupManager extends JavaPlugin { case mangdelv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -1165,9 +1146,8 @@ public class GroupManager extends JavaPlugin { case manglistv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { @@ -1203,9 +1183,8 @@ public class GroupManager extends JavaPlugin { case mangcheckv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -1231,9 +1210,8 @@ public class GroupManager extends JavaPlugin { case manwhois: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { @@ -1266,9 +1244,8 @@ public class GroupManager extends JavaPlugin { case tempadd: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { @@ -1305,9 +1282,8 @@ public class GroupManager extends JavaPlugin { case tempdel: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 1) { @@ -1346,9 +1322,8 @@ public class GroupManager extends JavaPlugin { case templist: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //WORKING auxString = ""; @@ -1376,9 +1351,8 @@ public class GroupManager extends JavaPlugin { case tempdelall: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //WORKING removeList = new ArrayList(); @@ -1420,9 +1394,8 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //WORKING config.load(); @@ -1445,9 +1418,8 @@ public class GroupManager extends JavaPlugin { case listgroups: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //WORKING auxString = ""; @@ -1462,9 +1434,8 @@ public class GroupManager extends JavaPlugin { case manpromote: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -1518,9 +1489,8 @@ public class GroupManager extends JavaPlugin { case mandemote: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); - sender.sendMessage(ChatColor.RED + "Use /manselect "); - return true; + if (!seDefaulttWorldHandler(sender)) + return true; } //VALIDANDO ARGUMENTOS if (args.length != 2) { @@ -1648,6 +1618,30 @@ public class GroupManager extends JavaPlugin { sender.sendMessage(ChatColor.RED + "You are not allowed to use that command."); return false; } + + /** + * Sets up the default world for use. + */ + private boolean seDefaulttWorldHandler(CommandSender sender) { + + //PERMISSIONS FOR COMMAND BEING LOADED + OverloadedWorldHolder dataHolder = null; + AnjoPermissionsHandler permissionHandler = null; + + dataHolder = worldsHolder.getWorldData(worldsHolder.getDefaultWorld().getName()); + permissionHandler = dataHolder.getPermissionsHandler(); + selectedWorlds.put(sender, dataHolder.getName()); + + if ((dataHolder != null) && (permissionHandler != null)) { + sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. Default world '" + worldsHolder.getDefaultWorld().getName() + "' selected."); + return true; + } + + sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); + sender.sendMessage(ChatColor.RED + "Use /manselect "); + return false; + + } /** * @return the config From f67e13122dad5710f0ea381c1dbbb2b4b89f2aca Mon Sep 17 00:00:00 2001 From: ElgarL Date: Sat, 3 Sep 2011 14:33:47 +0100 Subject: [PATCH 08/20] correct typo on setDefaulttWorldHandler --- .../anjocaido/groupmanager/GroupManager.java | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java index 7663e0930..0412e4181 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java @@ -285,7 +285,7 @@ public class GroupManager extends JavaPlugin { case manuadd: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -342,7 +342,7 @@ public class GroupManager extends JavaPlugin { case manudel: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -375,7 +375,7 @@ public class GroupManager extends JavaPlugin { case manuaddsub: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) { + if (!setDefaulttWorldHandler(sender)) { sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); sender.sendMessage(ChatColor.RED + "Use /manselect "); return true; @@ -416,7 +416,7 @@ public class GroupManager extends JavaPlugin { case manudelsub: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -449,7 +449,7 @@ public class GroupManager extends JavaPlugin { case mangadd: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -470,7 +470,7 @@ public class GroupManager extends JavaPlugin { case mangdel: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -491,7 +491,7 @@ public class GroupManager extends JavaPlugin { case manuaddp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -555,7 +555,7 @@ public class GroupManager extends JavaPlugin { case manudelp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -606,7 +606,7 @@ public class GroupManager extends JavaPlugin { case manulistp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -660,7 +660,7 @@ public class GroupManager extends JavaPlugin { case manucheckp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -707,7 +707,7 @@ public class GroupManager extends JavaPlugin { case mangaddp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -760,7 +760,7 @@ public class GroupManager extends JavaPlugin { case mangdelp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -799,7 +799,7 @@ public class GroupManager extends JavaPlugin { case manglistp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -847,7 +847,7 @@ public class GroupManager extends JavaPlugin { case mangcheckp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -881,7 +881,7 @@ public class GroupManager extends JavaPlugin { case mangaddi: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -912,7 +912,7 @@ public class GroupManager extends JavaPlugin { case mangdeli: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -947,7 +947,7 @@ public class GroupManager extends JavaPlugin { case manuaddv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -982,7 +982,7 @@ public class GroupManager extends JavaPlugin { case manudelv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1013,7 +1013,7 @@ public class GroupManager extends JavaPlugin { case manulistv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1050,7 +1050,7 @@ public class GroupManager extends JavaPlugin { case manucheckv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1092,7 +1092,7 @@ public class GroupManager extends JavaPlugin { case mangaddv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1121,7 +1121,7 @@ public class GroupManager extends JavaPlugin { case mangdelv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1146,7 +1146,7 @@ public class GroupManager extends JavaPlugin { case manglistv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1183,7 +1183,7 @@ public class GroupManager extends JavaPlugin { case mangcheckv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1210,7 +1210,7 @@ public class GroupManager extends JavaPlugin { case manwhois: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1244,7 +1244,7 @@ public class GroupManager extends JavaPlugin { case tempadd: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1282,7 +1282,7 @@ public class GroupManager extends JavaPlugin { case tempdel: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1322,7 +1322,7 @@ public class GroupManager extends JavaPlugin { case templist: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //WORKING @@ -1351,7 +1351,7 @@ public class GroupManager extends JavaPlugin { case tempdelall: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //WORKING @@ -1394,7 +1394,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //WORKING @@ -1418,7 +1418,7 @@ public class GroupManager extends JavaPlugin { case listgroups: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //WORKING @@ -1434,7 +1434,7 @@ public class GroupManager extends JavaPlugin { case manpromote: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1489,7 +1489,7 @@ public class GroupManager extends JavaPlugin { case mandemote: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!seDefaulttWorldHandler(sender)) + if (!setDefaulttWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1622,7 +1622,7 @@ public class GroupManager extends JavaPlugin { /** * Sets up the default world for use. */ - private boolean seDefaulttWorldHandler(CommandSender sender) { + private boolean setDefaulttWorldHandler(CommandSender sender) { //PERMISSIONS FOR COMMAND BEING LOADED OverloadedWorldHolder dataHolder = null; From 80491513a2ba82889d95dd246bfd0482a519e276 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Sat, 3 Sep 2011 14:39:10 +0100 Subject: [PATCH 09/20] Damn typos --- .../anjocaido/groupmanager/GroupManager.java | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java index 0412e4181..f7e797f36 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java @@ -285,7 +285,7 @@ public class GroupManager extends JavaPlugin { case manuadd: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -342,7 +342,7 @@ public class GroupManager extends JavaPlugin { case manudel: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -375,7 +375,7 @@ public class GroupManager extends JavaPlugin { case manuaddsub: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) { + if (!setDefaultWorldHandler(sender)) { sender.sendMessage(ChatColor.RED + "Couldn't retrieve your world. World selection is needed."); sender.sendMessage(ChatColor.RED + "Use /manselect "); return true; @@ -416,7 +416,7 @@ public class GroupManager extends JavaPlugin { case manudelsub: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -449,7 +449,7 @@ public class GroupManager extends JavaPlugin { case mangadd: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -470,7 +470,7 @@ public class GroupManager extends JavaPlugin { case mangdel: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -491,7 +491,7 @@ public class GroupManager extends JavaPlugin { case manuaddp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -555,7 +555,7 @@ public class GroupManager extends JavaPlugin { case manudelp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -606,7 +606,7 @@ public class GroupManager extends JavaPlugin { case manulistp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -660,7 +660,7 @@ public class GroupManager extends JavaPlugin { case manucheckp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -707,7 +707,7 @@ public class GroupManager extends JavaPlugin { case mangaddp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -760,7 +760,7 @@ public class GroupManager extends JavaPlugin { case mangdelp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -799,7 +799,7 @@ public class GroupManager extends JavaPlugin { case manglistp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -847,7 +847,7 @@ public class GroupManager extends JavaPlugin { case mangcheckp: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -881,7 +881,7 @@ public class GroupManager extends JavaPlugin { case mangaddi: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -912,7 +912,7 @@ public class GroupManager extends JavaPlugin { case mangdeli: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -947,7 +947,7 @@ public class GroupManager extends JavaPlugin { case manuaddv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -982,7 +982,7 @@ public class GroupManager extends JavaPlugin { case manudelv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1013,7 +1013,7 @@ public class GroupManager extends JavaPlugin { case manulistv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1050,7 +1050,7 @@ public class GroupManager extends JavaPlugin { case manucheckv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1092,7 +1092,7 @@ public class GroupManager extends JavaPlugin { case mangaddv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1121,7 +1121,7 @@ public class GroupManager extends JavaPlugin { case mangdelv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1146,7 +1146,7 @@ public class GroupManager extends JavaPlugin { case manglistv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1183,7 +1183,7 @@ public class GroupManager extends JavaPlugin { case mangcheckv: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1210,7 +1210,7 @@ public class GroupManager extends JavaPlugin { case manwhois: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1244,7 +1244,7 @@ public class GroupManager extends JavaPlugin { case tempadd: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1282,7 +1282,7 @@ public class GroupManager extends JavaPlugin { case tempdel: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1322,7 +1322,7 @@ public class GroupManager extends JavaPlugin { case templist: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //WORKING @@ -1351,7 +1351,7 @@ public class GroupManager extends JavaPlugin { case tempdelall: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //WORKING @@ -1394,7 +1394,7 @@ public class GroupManager extends JavaPlugin { } //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //WORKING @@ -1418,7 +1418,7 @@ public class GroupManager extends JavaPlugin { case listgroups: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //WORKING @@ -1434,7 +1434,7 @@ public class GroupManager extends JavaPlugin { case manpromote: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1489,7 +1489,7 @@ public class GroupManager extends JavaPlugin { case mandemote: //VALIDANDO ESTADO DO SENDER if (dataHolder == null || permissionHandler == null) { - if (!setDefaulttWorldHandler(sender)) + if (!setDefaultWorldHandler(sender)) return true; } //VALIDANDO ARGUMENTOS @@ -1622,7 +1622,7 @@ public class GroupManager extends JavaPlugin { /** * Sets up the default world for use. */ - private boolean setDefaulttWorldHandler(CommandSender sender) { + private boolean setDefaultWorldHandler(CommandSender sender) { //PERMISSIONS FOR COMMAND BEING LOADED OverloadedWorldHolder dataHolder = null; From e2024ca2b63112cbb343812e4d4354c98245e03b Mon Sep 17 00:00:00 2001 From: ElgarL Date: Sat, 3 Sep 2011 15:29:44 +0100 Subject: [PATCH 10/20] - Invalid groups assigned to players in users.yml will no longer cause a crash. GM will now set them to the default group instead. --- EssentialsGroupManager/src/Changelog.txt | 3 ++- .../src/org/anjocaido/groupmanager/GroupManager.java | 12 ++++++------ .../groupmanager/dataholder/WorldDataHolder.java | 4 +++- 3 files changed, 11 insertions(+), 8 deletions(-) mode change 100755 => 100644 EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index 86f6e521f..401d762f1 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -4,4 +4,5 @@ v 1.1: - Fixed users being able to use 'manuadd' to add users to higher groups than their own. - Added SuperPerms support so GM will update and provide the permissions to plugins which only support Bukkit Perms. - Added more helpful output to errors on argument lengths. - - GroupManager will now attempt to select the default world when using commands instead of failing and telling you to use '/manselect '. \ No newline at end of file + - GroupManager will now attempt to select the default world when using commands instead of failing and telling you to use '/manselect '. + - Invalid groups assigned to players in users.yml will no longer cause a crash. GM will now set them to the default group instead. \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java index f7e797f36..e0a29f509 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java @@ -54,6 +54,10 @@ public class GroupManager extends JavaPlugin { private GMLoggerHandler ch; public static BukkitPermissions BukkitPermissions; public static final Logger logger = Logger.getLogger(GroupManager.class.getName()); + + //PERMISSIONS FOR COMMAND BEING LOADED + OverloadedWorldHolder dataHolder = null; + AnjoPermissionsHandler permissionHandler = null; @Override public void onDisable() { @@ -222,8 +226,8 @@ public class GroupManager extends JavaPlugin { } //PERMISSIONS FOR COMMAND BEING LOADED - OverloadedWorldHolder dataHolder = null; - AnjoPermissionsHandler permissionHandler = null; + dataHolder = null; + permissionHandler = null; if (senderPlayer != null) { dataHolder = worldsHolder.getWorldData(senderPlayer); @@ -1623,10 +1627,6 @@ public class GroupManager extends JavaPlugin { * Sets up the default world for use. */ private boolean setDefaultWorldHandler(CommandSender sender) { - - //PERMISSIONS FOR COMMAND BEING LOADED - OverloadedWorldHolder dataHolder = null; - AnjoPermissionsHandler permissionHandler = null; dataHolder = worldsHolder.getWorldData(worldsHolder.getDefaultWorld().getName()); permissionHandler = dataHolder.getPermissionsHandler(); diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java old mode 100755 new mode 100644 index 1331a92ad..ae68e03cc --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java @@ -630,7 +630,9 @@ public class WorldDataHolder { if (thisUserNode.get("group") != null) { Group hisGroup = ph.getGroup(thisUserNode.get("group").toString()); if (hisGroup == null) { - throw new IllegalArgumentException("There is no group " + thisUserNode.get("group").toString() + ", as stated for player " + thisUser.getName()); + GroupManager.logger.warning("There is no group " + thisUserNode.get("group").toString() + ", as stated for player " + thisUser.getName() + ": Set to '" + ph.getDefaultGroup().getName() + "'."); + hisGroup = ph.defaultGroup; + //throw new IllegalArgumentException("There is no group " + thisUserNode.get("group").toString() + ", as stated for player " + thisUser.getName()); } thisUser.setGroup(hisGroup); } else { From 8f28073b29a99c46ed3782784cc928c54addcb26 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Sat, 3 Sep 2011 15:41:23 +0100 Subject: [PATCH 11/20] Minor change to GM's config.yml to make it slightly easier to understand mirroring --- EssentialsGroupManager/src/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/EssentialsGroupManager/src/config.yml b/EssentialsGroupManager/src/config.yml index 68308cca2..688d3f3ea 100644 --- a/EssentialsGroupManager/src/config.yml +++ b/EssentialsGroupManager/src/config.yml @@ -7,7 +7,8 @@ settings: permission: world: mirror: - world1: + world: + - world_nether - world2 - world3 world4: From e3756623a1531241b40084c0aa9a8e4b4e8cda31 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Sat, 3 Sep 2011 16:13:43 +0100 Subject: [PATCH 12/20] - Fix for Users.yml containing only 'users:' causing a crash. - GroupManager will now generate a fresh Users and Groups yml if either file is empty. --- EssentialsGroupManager/src/Changelog.txt | 4 +++- .../anjocaido/groupmanager/dataholder/WorldDataHolder.java | 5 +++++ .../groupmanager/dataholder/worlds/WorldsHolder.java | 4 ++-- EssentialsGroupManager/src/plugin.yml | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) mode change 100755 => 100644 EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index 401d762f1..2879a9d33 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -5,4 +5,6 @@ v 1.1: - Added SuperPerms support so GM will update and provide the permissions to plugins which only support Bukkit Perms. - Added more helpful output to errors on argument lengths. - GroupManager will now attempt to select the default world when using commands instead of failing and telling you to use '/manselect '. - - Invalid groups assigned to players in users.yml will no longer cause a crash. GM will now set them to the default group instead. \ No newline at end of file + - Invalid groups assigned to players in users.yml will no longer cause a crash. GM will now set them to the default group instead. + - Fix for Users.yml containing only 'users:' causing a crash. + - GroupManager will now generate a fresh Users and Groups yml if either file is empty. \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java index ae68e03cc..77d933fa0 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java @@ -578,6 +578,11 @@ public class WorldDataHolder { // PROCESS USERS FILE Map allUsersNode = (Map) usersRootDataNode.get("users"); + + // Stop loading if the file is empty + if (allUsersNode == null) + return ph; + for (String usersKey : allUsersNode.keySet()) { Map thisUserNode = (Map) allUsersNode.get(usersKey); User thisUser = ph.createUser(usersKey); diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java old mode 100755 new mode 100644 index b4d50b431..a2c34be16 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java @@ -265,7 +265,7 @@ public class WorldsHolder { File groupsFile = new File(defaultWorldFolder, "groups.yml"); File usersFile = new File(defaultWorldFolder, "users.yml"); File oldDataFile = new File(plugin.getDataFolder(), "data.yml"); - if (!groupsFile.exists()) { + if (!groupsFile.exists() || groupsFile.length() == 0) { if (oldDataFile.exists()) { try { Tasks.copy(oldDataFile, groupsFile); @@ -281,7 +281,7 @@ public class WorldsHolder { } } } - if (!usersFile.exists()) { + if (!usersFile.exists() || usersFile.length() == 0) { if (oldDataFile.exists()) { try { Tasks.copy(oldDataFile, usersFile); diff --git a/EssentialsGroupManager/src/plugin.yml b/EssentialsGroupManager/src/plugin.yml index ace9701cd..6863df1de 100644 --- a/EssentialsGroupManager/src/plugin.yml +++ b/EssentialsGroupManager/src/plugin.yml @@ -1,5 +1,5 @@ name: GroupManager -version: "1.1" +version: "1.1 (Phoenix)" main: org.anjocaido.groupmanager.GroupManager website: http://www.anjocaido.info/ description: Provides on-the-fly system for Permission system created by Nijikokun. But all in memory, and with flat-file saving schedule. From 2e1c88050222c0be59a290a0b796677483daf066 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Sat, 3 Sep 2011 17:53:34 +0100 Subject: [PATCH 13/20] - Fix for an infinite loop bug with the new Bukkit Perms during a new user creation. --- EssentialsGroupManager/src/Changelog.txt | 3 ++- .../src/org/anjocaido/groupmanager/data/User.java | 10 +++++----- .../groupmanager/permissions/BukkitPermissions.java | 10 +++++++++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index 2879a9d33..7005c8cc1 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -7,4 +7,5 @@ v 1.1: - GroupManager will now attempt to select the default world when using commands instead of failing and telling you to use '/manselect '. - Invalid groups assigned to players in users.yml will no longer cause a crash. GM will now set them to the default group instead. - Fix for Users.yml containing only 'users:' causing a crash. - - GroupManager will now generate a fresh Users and Groups yml if either file is empty. \ No newline at end of file + - GroupManager will now generate a fresh Users and Groups yml if either file is empty. + - Fix for an infinite loop bug with the new Bukkit Perms during a new user creation. \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java index f3ea1d0f5..e9bf79aa9 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/User.java @@ -104,7 +104,7 @@ public class User extends DataUnit implements Cloneable { public void setGroup(String group) { this.group = group; flagAsChanged(); - if (GroupManager.isLoaded) + if ((GroupManager.isLoaded) && (GroupManager.BukkitPermissions.player_join = false)) GroupManager.BukkitPermissions.updateAllPlayers(); } @@ -118,7 +118,7 @@ public class User extends DataUnit implements Cloneable { group = getDataSource().getGroup(group.getName()); this.group = group.getName(); flagAsChanged(); - if (GroupManager.isLoaded) + if ((GroupManager.isLoaded) && (GroupManager.BukkitPermissions.player_join = false)) GroupManager.BukkitPermissions.updateAllPlayers(); } @@ -133,7 +133,7 @@ public class User extends DataUnit implements Cloneable { removeSubGroup(subGroup); subGroups.add(subGroup.getName()); flagAsChanged(); - if (GroupManager.isLoaded) + if ((GroupManager.isLoaded) && (GroupManager.BukkitPermissions.player_join = false)) GroupManager.BukkitPermissions.updateAllPlayers(); } @@ -153,7 +153,7 @@ public class User extends DataUnit implements Cloneable { try { if (subGroups.remove(subGroup.getName())) { flagAsChanged(); - if (GroupManager.isLoaded) + if ((GroupManager.isLoaded) && (GroupManager.BukkitPermissions.player_join = false)) GroupManager.BukkitPermissions.updateAllPlayers(); return true; } @@ -197,7 +197,7 @@ public class User extends DataUnit implements Cloneable { variables.addVar(key, temp.getVarObject(key)); } flagAsChanged(); - if (GroupManager.isLoaded) + if ((GroupManager.isLoaded) && (GroupManager.BukkitPermissions.player_join = false)) GroupManager.BukkitPermissions.updateAllPlayers(); } } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java index e396118b4..5df263eb4 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java @@ -56,6 +56,7 @@ public class BukkitPermissions { protected Plugin plugin; protected boolean dumpAllPermissions = true; protected boolean dumpMatchedPermissions = true; + public boolean player_join = false; public BukkitPermissions(Plugin plugin) { this.plugin = plugin; @@ -142,7 +143,14 @@ public class BukkitPermissions { @Override public void onPlayerJoin(PlayerJoinEvent event) { - updatePermissions(event.getPlayer()); + player_join = true; + Player player = event.getPlayer(); + //force GM to create the player if they are not already listed. + if (GroupManager.getWorldsHolder().getWorldData(player.getWorld().getName()).getUser(player.getName()) != null) { + player_join = false; + updatePermissions(event.getPlayer()); + } else + player_join = false; } @Override From aa085de3e78fe09452f815aa92f6c06783fa06bd Mon Sep 17 00:00:00 2001 From: ElgarL Date: Sun, 4 Sep 2011 02:09:11 +0100 Subject: [PATCH 14/20] Push to Build dev version --- EssentialsGroupManager/src/users.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EssentialsGroupManager/src/users.yml b/EssentialsGroupManager/src/users.yml index c3324f0c0..43d030e9a 100644 --- a/EssentialsGroupManager/src/users.yml +++ b/EssentialsGroupManager/src/users.yml @@ -1,6 +1,6 @@ # "For a more advanced configuration example utilizing the advanced features of GroupManager, see http://pastebin.com/a8ZA0j5G" users: - kimkandor: + snowleo: subgroups: [] permissions: [] group: Admin @@ -8,7 +8,7 @@ users: subgroups: [] permissions: [] group: Builder - zenexer: + ElgarL: subgroups: [] permissions: [] group: Admin From 0654a76ccc64b62549ef8f9389b145a2e9a602a4 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Tue, 6 Sep 2011 10:11:21 +0100 Subject: [PATCH 15/20] - Fixed BukkitPerms population. Wasn't correctly setting superperms. --- EssentialsGroupManager/src/Changelog.txt | 4 +- .../permissions/BukkitPermissions.java | 40 +++++++++++++++---- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index 7005c8cc1..56f52a998 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -8,4 +8,6 @@ v 1.1: - Invalid groups assigned to players in users.yml will no longer cause a crash. GM will now set them to the default group instead. - Fix for Users.yml containing only 'users:' causing a crash. - GroupManager will now generate a fresh Users and Groups yml if either file is empty. - - Fix for an infinite loop bug with the new Bukkit Perms during a new user creation. \ No newline at end of file + - Fix for an infinite loop bug with the new Bukkit Perms during a new user creation. +v 1.2: + - Fixed BukkitPerms population. Wasn't correctly setting superperms. \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java index 5df263eb4..383020a7c 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java @@ -16,8 +16,10 @@ package org.anjocaido.groupmanager.permissions; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -39,6 +41,7 @@ import org.bukkit.event.server.PluginEnableEvent; import org.bukkit.event.server.ServerListener; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionAttachment; +import org.bukkit.permissions.PermissionAttachmentInfo; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; @@ -115,22 +118,45 @@ public class BukkitPermissions { PermissionAttachment attachment = this.attachments.get(player); User user = GroupManager.getWorldsHolder().getWorldData(world).getUser(player.getName()); - + List permissions = user.getPermissionList(); + // clear permissions for (String permission : attachment.getPermissions().keySet()) { attachment.unsetPermission(permission); - } - + } + + // find matching permissions for (Permission permission : registeredPermissions) { boolean permissionValue = user.getGroup().hasSamePermissionNode(permission.getName()); - - //GroupManager.logger.info(permission.getName() + " : " + Boolean.toString(permissionValue)); - attachment.setPermission(permission, permissionValue); - } + } + + // all permissions + for (String permission : permissions) { + Boolean value = true; + if (permission.startsWith("-")) { + permission = permission.substring(1); // cut off - + value = false; + } + if (!attachment.getPermissions().containsKey(permission)) { + attachment.setPermission(permission, value); + } + } + player.recalculatePermissions(); + /* + // List perms for this player + GroupManager.logger.info("Attachment Permissions:"); + for(Map.Entry entry : attachment.getPermissions().entrySet()){ + GroupManager.logger.info(" " + entry.getKey() + " = " + entry.getValue()); + } + GroupManager.logger.info("Effective Permissions:"); + for(PermissionAttachmentInfo info : player.getEffectivePermissions()){ + GroupManager.logger.info(" " + info.getPermission() + " = " + info.getValue()); + } + */ } public void updateAllPlayers() { From ab530f35d0ece2f9ceb5bd532e658d29210229c4 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Tue, 6 Sep 2011 10:12:15 +0100 Subject: [PATCH 16/20] removed unneeded include --- .../anjocaido/groupmanager/permissions/BukkitPermissions.java | 1 - EssentialsGroupManager/src/plugin.yml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java index 383020a7c..9dac878ef 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java @@ -41,7 +41,6 @@ import org.bukkit.event.server.PluginEnableEvent; import org.bukkit.event.server.ServerListener; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionAttachment; -import org.bukkit.permissions.PermissionAttachmentInfo; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; diff --git a/EssentialsGroupManager/src/plugin.yml b/EssentialsGroupManager/src/plugin.yml index 6863df1de..3beae0125 100644 --- a/EssentialsGroupManager/src/plugin.yml +++ b/EssentialsGroupManager/src/plugin.yml @@ -1,5 +1,5 @@ name: GroupManager -version: "1.1 (Phoenix)" +version: "1.2 (Phoenix)" main: org.anjocaido.groupmanager.GroupManager website: http://www.anjocaido.info/ description: Provides on-the-fly system for Permission system created by Nijikokun. But all in memory, and with flat-file saving schedule. From b110ce79cc33cddb5e30423a6ae960a9f13062c1 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Tue, 6 Sep 2011 10:13:32 +0100 Subject: [PATCH 17/20] Final tidy up of superperms for GM 1.2 --- .../anjocaido/groupmanager/permissions/BukkitPermissions.java | 1 - 1 file changed, 1 deletion(-) diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java index 9dac878ef..9e500b123 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java @@ -16,7 +16,6 @@ package org.anjocaido.groupmanager.permissions; -import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; From bbab993ef1b06394bf835da0b01402bcb70cecfc Mon Sep 17 00:00:00 2001 From: ElgarL Date: Tue, 6 Sep 2011 10:19:11 +0100 Subject: [PATCH 18/20] Doh, jumped a version --- EssentialsGroupManager/src/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EssentialsGroupManager/src/plugin.yml b/EssentialsGroupManager/src/plugin.yml index 3beae0125..6863df1de 100644 --- a/EssentialsGroupManager/src/plugin.yml +++ b/EssentialsGroupManager/src/plugin.yml @@ -1,5 +1,5 @@ name: GroupManager -version: "1.2 (Phoenix)" +version: "1.1 (Phoenix)" main: org.anjocaido.groupmanager.GroupManager website: http://www.anjocaido.info/ description: Provides on-the-fly system for Permission system created by Nijikokun. But all in memory, and with flat-file saving schedule. From 63986265591eeddc72c4df3139afffc19eadbb9b Mon Sep 17 00:00:00 2001 From: KHobbits Date: Thu, 15 Sep 2011 07:08:05 +0200 Subject: [PATCH 19/20] Quickfix: Slightly changing syntax to stop conflict - This needs to be properly addressed --- EssentialsGroupManager/src/plugin.yml | 116 +++++++++++++------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/EssentialsGroupManager/src/plugin.yml b/EssentialsGroupManager/src/plugin.yml index 6863df1de..91f8df05c 100644 --- a/EssentialsGroupManager/src/plugin.yml +++ b/EssentialsGroupManager/src/plugin.yml @@ -2,7 +2,7 @@ name: GroupManager version: "1.1 (Phoenix)" main: org.anjocaido.groupmanager.GroupManager website: http://www.anjocaido.info/ -description: Provides on-the-fly system for Permission system created by Nijikokun. But all in memory, and with flat-file saving schedule. +description: Provides on-the-fly system for permissions system created by Nijikokun. But all in memory, and with flat-file saving schedule. authors: - AnjoCaido - Gabriel Couto @@ -10,156 +10,156 @@ commands: manuadd: description: Move a player to desired group.(Adds to the file if not exists) usage: / - permission: groupmanager.manuadd + permissions: groupmanager.manuadd manudel: description: Remove any user specific configuration. Make him default group. usage: / - permission: groupmanager.manudel + permissions: groupmanager.manudel manuaddsub: description: Add a group to a player's subgroup list. usage: / - permission: groupmanager.manuaddsub + permissions: groupmanager.manuaddsub manudelsub: description: Remove a group to a player's subgroup list. usage: / - permission: groupmanager.manudelsub + permissions: groupmanager.manudelsub mangadd: description: Add group to the system. usage: / - permission: groupmanager.mangadd + permissions: groupmanager.mangadd mangdel: description: Removes group from the system(all it's users become default) usage: / - permission: groupmanager.mangdel + permissions: groupmanager.mangdel manuaddp: - description: Add permission diretly to the player. - usage: / - permission: groupmanager.manuaddp + description: Add permissions diretly to the player. + usage: / + permissions: groupmanager.manuaddp manudelp: - description: Removes permission diretly from the player. - usage: / - permission: groupmanager.manudelp + description: Removes permissions diretly from the player. + usage: / + permissions: groupmanager.manudelp manulistp: - description: List all permissions from a player. + description: List all permissionss from a player. usage: / - permission: groupmanager.manulistp + permissions: groupmanager.manulistp manucheckp: - description: Verify if user has a permission, and where it comes from. - usage: / - permission: groupmanager.manucheckp + description: Verify if user has a permissions, and where it comes from. + usage: / + permissions: groupmanager.manucheckp mangaddp: - description: Add permission to a group. - usage: / - permission: groupmanager.mangaddp + description: Add permissions to a group. + usage: / + permissions: groupmanager.mangaddp mangdelp: - description: Removes permission from a group. - usage: / - permission: groupmanager.mangdelp + description: Removes permissions from a group. + usage: / + permissions: groupmanager.mangdelp manglistp: - description: Lists all permissions from a group. + description: Lists all permissionss from a group. usage: / - permission: groupmanager.manglistp + permissions: groupmanager.manglistp mangcheckp: - description: Check if group has a permission, and where it comes from. - usage: / - permission: groupmanager.mangcheckp + description: Check if group has a permissions, and where it comes from. + usage: / + permissions: groupmanager.mangcheckp mangaddi: description: Add a group to another group inheritance list. usage: / - permission: groupmanager.mangaddi + permissions: groupmanager.mangaddi mangdeli: description: Remove a group from another group inheritance list. usage: / - permission: groupmanager.mangdeli + permissions: groupmanager.mangdeli manuaddv: description: Add, or replaces, a variable to a user (like prefix or suffix). usage: / - permission: groupmanager.manuaddv + permissions: groupmanager.manuaddv manudelv: description: Remove a variable from a user. usage: / - permission: groupmanager.manudelv + permissions: groupmanager.manudelv manulistv: description: List variables a user has (like prefix or suffix). usage: / - permission: groupmanager.manulistv + permissions: groupmanager.manulistv manucheckv: description: Verify a value of a variable of user, and where it comes from. usage: / - permission: groupmanager.manucheckv + permissions: groupmanager.manucheckv mangaddv: description: Add, or replaces, a variable to a group (like prefix or suffix). usage: / - permission: groupmanager.mangaddv + permissions: groupmanager.mangaddv mangdelv: description: Remove a variable from a group. usage: / - permission: groupmanager.mangdelv + permissions: groupmanager.mangdelv manglistv: description: List variables a group has (like prefix or suffix). usage: / - permission: groupmanager.manglistv + permissions: groupmanager.manglistv mangcheckv: description: Verify a value of a variable of group, and where it comes from. usage: / - permission: groupmanager.mangckeckv + permissions: groupmanager.mangckeckv manwhois: description: Tell the group that user belongs. usage: / - permission: groupmanager.manwhois + permissions: groupmanager.manwhois tempadd: - description: Creates a temporary permission copy for that user. + description: Creates a temporary permissions copy for that user. usage: / - permission: groupmanager.tempadd + permissions: groupmanager.tempadd tempdel: - description: Remove the temporary permission copy for player. + description: Remove the temporary permissions copy for player. usage: / - permission: groupmanager.tempdel + permissions: groupmanager.tempdel templist: - description: List players in overload-permissions mode made by /tempadd. + description: List players in overload-permissionss mode made by /tempadd. usage: / - permission: groupmanager.templist + permissions: groupmanager.templist tempdelall: description: Remove all overrides made by command /tempadd. usage: / - permission: groupmanager.tempdelall + permissions: groupmanager.tempdelall mansave: - description: Save all permissions on file. + description: Save all permissionss on file. usage: / - permission: groupmanager.mansave + permissions: groupmanager.mansave manload: description: Reload current world and config.yml. Or load given world. usage: / [world] - permission: groupmanager.manload + permissions: groupmanager.manload listgroups: description: List the groups available. usage: / - permission: groupmanager.listgroups + permissions: groupmanager.listgroups manpromote: description: Promote a player in the same heritage line to a higher rank. usage: / - permission: groupmanager.manpromote + permissions: groupmanager.manpromote mandemote: description: Demote a player in the same heritage line to a lower rank. usage: / - permission: groupmanager.mandemote + permissions: groupmanager.mandemote mantogglevalidate: description: Toggle on/off the validating if player is online. usage: / - permission: groupmanager.mantogglevalidate + permissions: groupmanager.mantogglevalidate mantogglesave: description: Toggle on/ff the autosave. usage: / - permission: groupmanager.mantogglesave + permissions: groupmanager.mantogglesave manworld: description: Prints the selected world name usage: / - permission: groupmanager.manworld + permissions: groupmanager.manworld manselect: description: Select a world to work with next commands. usage: / - permission: groupmanager.manselect + permissions: groupmanager.manselect manclear: description: Clear world selection. Next commands will work on your world. usage: / - permission: groupmanager.manclear \ No newline at end of file + permissions: groupmanager.manclear \ No newline at end of file From 73b5fe971f1dc77c008373652c49efa53b86990e Mon Sep 17 00:00:00 2001 From: ElgarL Date: Fri, 16 Sep 2011 20:15:25 +0100 Subject: [PATCH 20/20] Read from group not user for setting superperms --- .../nijiko/permissions/PermissionHandler.class | Bin 5289 -> 0 bytes .../permissions/BukkitPermissions.java | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 EssentialsGroupBridge/src/com/nijiko/permissions/PermissionHandler.class diff --git a/EssentialsGroupBridge/src/com/nijiko/permissions/PermissionHandler.class b/EssentialsGroupBridge/src/com/nijiko/permissions/PermissionHandler.class deleted file mode 100644 index d3022a484c3422ca49686702e085318a505c74e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5289 zcmcIoc~{#;5Fdew!QlvJpiP>lX&RfhQJXf+0VM?-2#G@oCeV^zYk6%JWXY8!jvgPX zf91XY(GSoM)z{h8t|TL=@#FA&_Go8z=Qr1mcKy%4fBg*rci@j4bi+{=e$B#f8eEuV z7IWt`=*|~5HOMU5RjR>IiCJ{jYgDMSK`JJ4MoP9p%uV7jK99kZ&zc)qkt_K9v1tFD(_hgtO* zZcEPCp~l|-P1@F=&$LNZ&dEJKG-%W1&{_ChgTb2Z7_<~l=&Ms76pbFv7kpUHWu{)H zF51>tW_63Wo`VkGJT9M&TRDeoGTZ=+qeK0NY>VvEdDBD*f6}1WFzuGl>E0oTtmjL% zQ`alr-X3#xYPrlk($`FKgz<@E6wt{B2@#6VjC1(fT$m7anpCT=TGR;>a|-2{qA`ay z?0tG%pgtS~waEpgv)cLu>3X9GAVC z7!RR*&0!7V90^zr`VC_76$>8Y^?0i@Y>e%&GJTyKtVy^iPeEQn0D*<`B*?`UsnKQM zQVkY6gG}3J+;}X-eyLNsRXm+ip#`<7c)qCYQp3evrJPm_9#FZXCGwpFRw=}1}T7n=sp5_H77L?;~HNd}lz#@=jFndQ#9QsH%6Kb9&68k?kw_1%sP zjW+D(q>1@5PqHo{Y`%%=O^`5QZiZ)Z5Z`l6;?OP1>N_r`@(csKa*9rjYcF9yvAe8T zHQRrMp4_QmnHtjOY*-}+ zX9^PaR$Pg3v2&}w6#W{&PI9H@i zhZ@ACcq=BeQ}hrHg15>&JMJ<>rk5cL0BHKg0r@| zT?7nuwHQ!W3wf`|m2D3%y-SQ=+9yH-GqJ-1C@RgwV;C>K=2grXI8PDK&7QPPTb2xq^eR>4ni1qVwJTJ!&VL|X0 zp%|=tjO&(QS@4(OiJ&X+RM2Obd~VNkSQYdItO@#3%3s2Ipr?%UHst&bcopzBk-sI^ zZ^5?#|2yPwOMTn$I^chg{2$;)f%B8h!OwC` permissions = user.getPermissionList(); + List permissions = user.getGroup().getPermissionList(); // clear permissions for (String permission : attachment.getPermissions().keySet()) { @@ -136,7 +136,7 @@ public class BukkitPermissions { permission = permission.substring(1); // cut off - value = false; } - + if (!attachment.getPermissions().containsKey(permission)) { attachment.setPermission(permission, value); }