diff --git a/.gitignore b/.gitignore
index 9035e9eae..fd2e7e598 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,4 +22,5 @@
/EssentialsXMPP/dist/
/EssentialsXMPP/build/
/EssentialsProtect/dist/
-/EssentialsProtect/build/
\ No newline at end of file
+/EssentialsProtect/build/
+/EssentialsPermissionsCommands/nbproject/private/
\ No newline at end of file
diff --git a/BuildAll/nbproject/build-impl.xml b/BuildAll/nbproject/build-impl.xml
index 61cea7f34..576a464dd 100644
--- a/BuildAll/nbproject/build-impl.xml
+++ b/BuildAll/nbproject/build-impl.xml
@@ -624,15 +624,8 @@ is divided into following sections:
-
-
-
-
-
-
-
-
-
+
+
@@ -1116,15 +1109,8 @@ is divided into following sections:
-
-
-
-
-
-
-
-
-
+
+
diff --git a/BuildAll/nbproject/genfiles.properties b/BuildAll/nbproject/genfiles.properties
index 5bff626f0..c5989c1d3 100644
--- a/BuildAll/nbproject/genfiles.properties
+++ b/BuildAll/nbproject/genfiles.properties
@@ -1,8 +1,8 @@
-build.xml.data.CRC32=51b33957
+build.xml.data.CRC32=2eb9432b
build.xml.script.CRC32=7a797370
build.xml.stylesheet.CRC32=28e38971@1.43.1.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=51b33957
-nbproject/build-impl.xml.script.CRC32=7a6cee4f
+nbproject/build-impl.xml.data.CRC32=2eb9432b
+nbproject/build-impl.xml.script.CRC32=f6f34008
nbproject/build-impl.xml.stylesheet.CRC32=0c01fd8e@1.43.1.45
diff --git a/BuildAll/nbproject/project.properties b/BuildAll/nbproject/project.properties
index d0076cd5f..ec2dbb574 100644
--- a/BuildAll/nbproject/project.properties
+++ b/BuildAll/nbproject/project.properties
@@ -31,9 +31,8 @@ jar.compress=false
javac.classpath=\
${reference.Essentials.jar}:\
${reference.EssentialsChat.jar}:\
- ${reference.EssentialsGroupBridge.jar}:\
- ${reference.EssentialsGroupManager.jar}:\
${reference.EssentialsProtect.jar}:\
+ ${reference.EssentialsPermissionsCommands.jar}:\
${reference.EssentialsSpawn.jar}:\
${reference.EssentialsGeoIP.jar}:\
${reference.EssentialsXMPP.jar}
@@ -68,16 +67,14 @@ platform.active=default_platform
project.Essentials=../Essentials
project.EssentialsChat=../EssentialsChat
project.EssentialsGeoIP=../EssentialsGeoIP
-project.EssentialsGroupBridge=../EssentialsGroupBridge
-project.EssentialsGroupManager=../EssentialsGroupManager
+project.EssentialsPermissionsCommands=../EssentialsPermissionsCommands
project.EssentialsProtect=../EssentialsProtect
project.EssentialsSpawn=../EssentialsSpawn
project.EssentialsXMPP=../EssentialsXMPP
reference.Essentials.jar=${project.Essentials}/dist/Essentials.jar
reference.EssentialsChat.jar=${project.EssentialsChat}/dist/EssentialsChat.jar
reference.EssentialsGeoIP.jar=${project.EssentialsGeoIP}/dist/EssentialsGeoIP.jar
-reference.EssentialsGroupBridge.jar=${project.EssentialsGroupBridge}/dist/EssentialsGroupBridge.jar
-reference.EssentialsGroupManager.jar=${project.EssentialsGroupManager}/dist/EssentialsGroupManager.jar
+reference.EssentialsPermissionsCommands.jar=${project.EssentialsPermissionsCommands}/dist/EssentialsPermissionsCommands.jar
reference.EssentialsProtect.jar=${project.EssentialsProtect}/dist/EssentialsProtect.jar
reference.EssentialsSpawn.jar=${project.EssentialsSpawn}/dist/EssentialsSpawn.jar
reference.EssentialsXMPP.jar=${project.EssentialsXMPP}/dist/original-EssentialsXMPP.jar
diff --git a/BuildAll/nbproject/project.xml b/BuildAll/nbproject/project.xml
index 420233ac9..16460d7fc 100644
--- a/BuildAll/nbproject/project.xml
+++ b/BuildAll/nbproject/project.xml
@@ -40,15 +40,7 @@
jar
- EssentialsGroupBridge
- jar
-
- jar
- clean
- jar
-
-
- EssentialsGroupManager
+ EssentialsPermissionsCommands
jar
jar
diff --git a/Essentials/nbproject/project.properties b/Essentials/nbproject/project.properties
index 0f92879ab..850d0d4d8 100644
--- a/Essentials/nbproject/project.properties
+++ b/Essentials/nbproject/project.properties
@@ -31,11 +31,11 @@ file.reference.craftbukkit-0.0.1-SNAPSHOT.jar=..\\lib\\craftbukkit-0.0.1-SNAPSHO
file.reference.iCo4.jar=../lib/iCo4.jar
file.reference.iCo5.jar=../lib/iCo5.jar
file.reference.junit-4.5.jar=..\\lib\\junit_4\\junit-4.5.jar
-file.reference.Permissions.jar=..\\lib\\Permissions.jar
+file.reference.Permissions3.jar=../lib/Permissions3.jar
includes=**
jar.compress=false
javac.classpath=\
- ${file.reference.Permissions.jar}:\
+ ${file.reference.Permissions3.jar}:\
${file.reference.craftbukkit-0.0.1-SNAPSHOT.jar}:\
${file.reference.BOSEconomy.jar}:\
${file.reference.iCo4.jar}:\
diff --git a/Essentials/src/com/earth2me/essentials/ConfigPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/ConfigPermissionsHandler.java
new file mode 100644
index 000000000..9e3b24b0d
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/ConfigPermissionsHandler.java
@@ -0,0 +1,45 @@
+package com.earth2me.essentials;
+
+import org.bukkit.entity.Player;
+
+
+public class ConfigPermissionsHandler implements IPermissionsHandler
+{
+ private final transient IEssentials ess;
+
+ public ConfigPermissionsHandler(final IEssentials ess)
+ {
+ this.ess = ess;
+ }
+
+ public String getGroup(final Player base)
+ {
+ return "default";
+ }
+
+ public boolean canBuild(final Player base, final String group)
+ {
+ return true;
+ }
+
+ public boolean inGroup(final Player base, final String group)
+ {
+ return false;
+ }
+
+ public boolean hasPermission(final Player base, final String node)
+ {
+ final String[] cmds = node.split("\\.", 2);
+ return !ess.getSettings().isCommandRestricted(cmds[cmds.length - 1]);
+ }
+
+ public String getPrefix(final Player base)
+ {
+ return "";
+ }
+
+ public String getSuffix(final Player base)
+ {
+ return "";
+ }
+}
diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java
index 2dfb09344..2b30c5b02 100644
--- a/Essentials/src/com/earth2me/essentials/Essentials.java
+++ b/Essentials/src/com/earth2me/essentials/Essentials.java
@@ -62,6 +62,7 @@ public class Essentials extends JavaPlugin implements IEssentials
private final Methods paymentMethod = new Methods();
private final static boolean enableErrorLogging = false;
private final EssentialsErrorHandler errorHandler = new EssentialsErrorHandler();
+ private IPermissionsHandler permissionsHandler;
public static IEssentials getStatic()
{
@@ -139,6 +140,20 @@ public class Essentials extends JavaPlugin implements IEssentials
logger.log(Level.INFO, Util.i18n("bukkitFormatChanged"));
}
+ Plugin permissionsPlugin = pm.getPlugin("Permissions");
+
+ if (permissionsPlugin != null)
+ {
+ if (permissionsPlugin.getDescription().getVersion().charAt(0) == '3') {
+ this.permissionsHandler = new Permissions3Handler(permissionsPlugin);
+ } else {
+ this.permissionsHandler = new Permissions2Handler(permissionsPlugin);
+ }
+ }
+ else
+ {
+ this.permissionsHandler = new ConfigPermissionsHandler(this);
+ }
final ServerListener serverListener = new EssentialsPluginListener(paymentMethod);
pm.registerEvent(Type.PLUGIN_ENABLE, serverListener, Priority.Low, this);
@@ -753,10 +768,14 @@ public class Essentials extends JavaPlugin implements IEssentials
{
return tntListener;
}
-
+
public EssentialsDependancyChecker getDependancyChecker()
{
return essDep;
}
+ public IPermissionsHandler getPermissionsHandler()
+ {
+ return permissionsHandler;
+ }
}
diff --git a/Essentials/src/com/earth2me/essentials/IEssentials.java b/Essentials/src/com/earth2me/essentials/IEssentials.java
index 10d3f16de..824de99a9 100644
--- a/Essentials/src/com/earth2me/essentials/IEssentials.java
+++ b/Essentials/src/com/earth2me/essentials/IEssentials.java
@@ -71,4 +71,6 @@ public interface IEssentials
TNTExplodeListener getTNTListener();
EssentialsDependancyChecker getDependancyChecker();
+
+ IPermissionsHandler getPermissionsHandler();
}
diff --git a/Essentials/src/com/earth2me/essentials/IPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/IPermissionsHandler.java
new file mode 100644
index 000000000..a7bcc80b7
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/IPermissionsHandler.java
@@ -0,0 +1,21 @@
+package com.earth2me.essentials;
+
+import org.bukkit.entity.Player;
+
+
+public interface IPermissionsHandler
+{
+
+ String getGroup(Player base);
+
+ boolean canBuild(Player base, String group);
+
+ boolean inGroup(Player base, String group);
+
+ boolean hasPermission(Player base, String node);
+
+ String getPrefix(Player base);
+
+ String getSuffix(Player base);
+
+}
diff --git a/Essentials/src/com/earth2me/essentials/Permissions2Handler.java b/Essentials/src/com/earth2me/essentials/Permissions2Handler.java
new file mode 100644
index 000000000..c588bb5fa
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/Permissions2Handler.java
@@ -0,0 +1,48 @@
+package com.earth2me.essentials;
+
+import com.nijiko.permissions.PermissionHandler;
+import com.nijikokun.bukkit.Permissions.Permissions;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+
+
+public class Permissions2Handler implements IPermissionsHandler
+{
+ private final transient PermissionHandler permissionHandler;
+
+ Permissions2Handler(final Plugin permissionsPlugin)
+ {
+ permissionHandler = ((Permissions)permissionsPlugin).getHandler();
+ }
+
+ public String getGroup(final Player base)
+ {
+ return permissionHandler.getGroup(base.getWorld().getName(), base.getName());
+ }
+
+ public boolean canBuild(final Player base, final String group)
+ {
+ return permissionHandler.canGroupBuild(base.getWorld().getName(), getGroup(base));
+ }
+
+ public boolean inGroup(final Player base, final String group)
+ {
+ return permissionHandler.inGroup(base.getWorld().getName(), base.getName(), group);
+ }
+
+ public boolean hasPermission(final Player base, final String node)
+ {
+ return permissionHandler.permission(base, node);
+ }
+
+ public String getPrefix(final Player base)
+ {
+ return permissionHandler.getGroupPrefix(base.getWorld().getName(), getGroup(base));
+ }
+
+ public String getSuffix(final Player base)
+ {
+ return permissionHandler.getGroupSuffix(base.getWorld().getName(), getGroup(base));
+ }
+
+}
diff --git a/Essentials/src/com/earth2me/essentials/Permissions3Handler.java b/Essentials/src/com/earth2me/essentials/Permissions3Handler.java
new file mode 100644
index 000000000..99c95da0a
--- /dev/null
+++ b/Essentials/src/com/earth2me/essentials/Permissions3Handler.java
@@ -0,0 +1,48 @@
+package com.earth2me.essentials;
+
+import com.nijiko.permissions.PermissionHandler;
+import com.nijikokun.bukkit.Permissions.Permissions;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+
+
+public class Permissions3Handler implements IPermissionsHandler
+{
+ private final transient PermissionHandler permissionHandler;
+
+ Permissions3Handler(final Plugin permissionsPlugin)
+ {
+ permissionHandler = ((Permissions)permissionsPlugin).getHandler();
+ }
+
+ public String getGroup(final Player base)
+ {
+ return permissionHandler.getPrimaryGroup(base.getWorld().getName(), base.getName());
+ }
+
+ public boolean canBuild(final Player base, final String group)
+ {
+ return permissionHandler.canUserBuild(base.getWorld().getName(), base.getName());
+ }
+
+ public boolean inGroup(final Player base, final String group)
+ {
+ return permissionHandler.inGroup(base.getWorld().getName(), base.getName(), group);
+ }
+
+ public boolean hasPermission(final Player base, final String node)
+ {
+ return permissionHandler.has(base, node);
+ }
+
+ public String getPrefix(final Player base)
+ {
+ return permissionHandler.getUserPrefix(base.getWorld().getName(), base.getName());
+ }
+
+ public String getSuffix(final Player base)
+ {
+ return permissionHandler.getUserSuffix(base.getWorld().getName(), base.getName());
+ }
+
+}
diff --git a/Essentials/src/com/earth2me/essentials/PlayerExtension.java b/Essentials/src/com/earth2me/essentials/PlayerExtension.java
index 901edd345..c090dff2f 100644
--- a/Essentials/src/com/earth2me/essentials/PlayerExtension.java
+++ b/Essentials/src/com/earth2me/essentials/PlayerExtension.java
@@ -53,38 +53,17 @@ public class PlayerExtension extends PlayerWrapper
public String getGroup()
{
- try
- {
- return com.nijikokun.bukkit.Permissions.Permissions.Security.getGroup(getWorld().getName(), getName());
- }
- catch (Throwable ex)
- {
- return "default";
- }
+ return ess.getPermissionsHandler().getGroup(base);
}
public boolean inGroup(String group)
{
- try
- {
- return com.nijikokun.bukkit.Permissions.Permissions.Security.inGroup(getWorld().getName(), getName(), group);
- }
- catch (Throwable ex)
- {
- return false;
- }
+ return ess.getPermissionsHandler().inGroup(base, group);
}
public boolean canBuild()
{
- try
- {
- return isOp() || com.nijikokun.bukkit.Permissions.Permissions.Security.canGroupBuild(getWorld().getName(), getGroup());
- }
- catch (Throwable ex)
- {
- return true;
- }
+ return ess.getPermissionsHandler().canBuild(base, getGroup());
}
public EntityPlayer getHandle()
diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java
index 8365aabe3..befbf111f 100644
--- a/Essentials/src/com/earth2me/essentials/User.java
+++ b/Essentials/src/com/earth2me/essentials/User.java
@@ -48,16 +48,8 @@ public class User extends UserData implements Comparable, IReplyTo, IUser
{
return false;
}
-
- try
- {
- return com.nijikokun.bukkit.Permissions.Permissions.Security.permission(base, node);
- }
- catch (Throwable ex)
- {
- String[] cmds = node.split("\\.", 2);
- return !ess.getSettings().isCommandRestricted(cmds[cmds.length - 1]);
- }
+
+ return ess.getPermissionsHandler().hasPermission(this, node);
}
public void healCooldown() throws Exception
diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChat.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChat.java
index 0271fff6f..428413661 100644
--- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChat.java
+++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChat.java
@@ -6,30 +6,25 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.event.Event.Priority;
import org.bukkit.event.Event.Type;
-import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
public class EssentialsChat extends JavaPlugin
{
- private static final Logger logger = Logger.getLogger("Minecraft");
-
- public EssentialsChat()
- {
- super();
- }
+ private static final Logger LOGGER = Logger.getLogger("Minecraft");
public void onEnable()
{
- PluginManager pm = getServer().getPluginManager();
- EssentialsChatPlayerListener playerListener = new EssentialsChatPlayerListener(getServer());
- pm.registerEvent(Type.PLAYER_JOIN, playerListener, Priority.Monitor, this);
- pm.registerEvent(Type.PLAYER_CHAT, playerListener, Priority.Highest, this);
- if (!this.getDescription().getVersion().equals(Essentials.getStatic().getDescription().getVersion())) {
- logger.log(Level.WARNING, Util.i18n("versionMismatchAll"));
+ final PluginManager pluginManager = getServer().getPluginManager();
+ final EssentialsChatPlayerListener playerListener = new EssentialsChatPlayerListener(getServer());
+ pluginManager.registerEvent(Type.PLAYER_JOIN, playerListener, Priority.Lowest, this);
+ pluginManager.registerEvent(Type.PLAYER_CHAT, playerListener, Priority.Highest, this);
+ if (!this.getDescription().getVersion().equals(Essentials.getStatic().getDescription().getVersion()))
+ {
+ LOGGER.log(Level.WARNING, Util.i18n("versionMismatchAll"));
}
- logger.info(Util.format("loadinfo", this.getDescription().getName(), this.getDescription().getVersion(), Essentials.AUTHORS));
+ LOGGER.info(Util.format("loadinfo", this.getDescription().getName(), this.getDescription().getVersion(), Essentials.AUTHORS));
}
public void onDisable()
diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListener.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListener.java
index d3dff8538..211733818 100644
--- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListener.java
+++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListener.java
@@ -1,7 +1,14 @@
package com.earth2me.essentials.chat;
import com.earth2me.essentials.Essentials;
+import com.earth2me.essentials.IEssentials;
+import com.earth2me.essentials.User;
+import com.earth2me.essentials.Util;
+import java.util.logging.Logger;
+import org.bukkit.Location;
import org.bukkit.Server;
+import org.bukkit.World;
+import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerChatEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerListener;
@@ -10,52 +17,109 @@ import org.bukkit.event.player.PlayerRespawnEvent;
public class EssentialsChatPlayerListener extends PlayerListener
{
- private final Server server;
+ private static final Logger LOGGER = Logger.getLogger("Minecraft");
+ private final transient IEssentials ess = Essentials.getStatic();
+ private final transient Server server;
- public EssentialsChatPlayerListener(Server server)
+ public EssentialsChatPlayerListener(final Server server)
{
this.server = server;
}
@Override
- @SuppressWarnings("CallToThreadDumpStack")
- public void onPlayerJoin(PlayerJoinEvent event)
+ public void onPlayerJoin(final PlayerJoinEvent event)
{
- try
- {
- EssentialsChatWorker.onPlayerJoin(server, event);
- }
- catch (Throwable ex)
- {
- ex.printStackTrace();
- }
+ final User user = ess.getUser(event.getPlayer());
+ updateDisplayName(user);
+ }
+
+ private void updateDisplayName(final User user)
+ {
+ final String prefix = ess.getPermissionsHandler().getPrefix(user).replace('&', '§').replace("{WORLDNAME}", user.getWorld().getName());
+ final String suffix = ess.getPermissionsHandler().getSuffix(user).replace('&', '§').replace("{WORLDNAME}", user.getWorld().getName());
+
+ user.setDisplayName(prefix + user.getNick() + suffix + (suffix.length() > 1 && suffix.substring(suffix.length() - 2, suffix.length() - 1).equals("§") ? "" : "§f"));
}
@Override
- @SuppressWarnings("CallToThreadDumpStack")
- public void onPlayerRespawn(PlayerRespawnEvent event)
+ public void onPlayerChat(final PlayerChatEvent event)
{
- try
+ if (event.isCancelled())
{
- EssentialsChatWorker.onPlayerRespawn(server, event);
+ return;
}
- catch (Throwable ex)
- {
- ex.printStackTrace();
- }
- }
+ final User user = ess.getUser(event.getPlayer());
+ updateDisplayName(user);
- @Override
- @SuppressWarnings("CallToThreadDumpStack")
- public void onPlayerChat(PlayerChatEvent event)
- {
- try
+ if (user.isAuthorized("essentials.chat.color"))
{
- EssentialsChatWorker.onPlayerChat(server, event);
+ event.setMessage(event.getMessage().replaceAll("&([0-9a-f])", "§$1"));
}
- catch (Throwable ex)
+
+ event.setFormat(ess.getSettings().getChatFormat(user.getGroup()).replace('&', '§').replace("§§", "&").replace("{DISPLAYNAME}", "%1$s").replace("{GROUP}", user.getGroup()).replace("{MESSAGE}", "%2$s").replace("{WORLDNAME}", user.getWorld().getName()).replace("{SHORTWORLDNAME}", user.getWorld().getName().substring(0, 1).toUpperCase()));
+
+ final int radius = ess.getSettings().getChatRadius();
+ if (radius < 1)
{
- ex.printStackTrace();
+ return;
+ }
+
+ if (event.getMessage().startsWith("!") && event.getMessage().length() > 1)
+ {
+ if (user.isAuthorized("essentials.chat.shout"))
+ {
+ event.setMessage(event.getMessage().substring(1));
+ event.setFormat(Util.format("shoutFormat", event.getFormat()));
+ return;
+ }
+ user.sendMessage(Util.i18n("notAllowedToShout"));
+ event.setCancelled(true);
+ return;
+ }
+
+ if (event.getMessage().startsWith("?") && event.getMessage().length() > 1)
+ {
+ if (user.isAuthorized("essentials.chat.question"))
+ {
+ event.setMessage(event.getMessage().substring(1));
+ event.setFormat(Util.format("questionFormat", event.getFormat()));
+ return;
+ }
+ user.sendMessage(Util.i18n("notAllowedToQuestion"));
+ event.setCancelled(true);
+ return;
+ }
+
+ event.setCancelled(true);
+ LOGGER.info(Util.format("localFormat", user.getName(), event.getMessage()));
+
+ final Location loc = user.getLocation();
+ final World world = loc.getWorld();
+ final int x = loc.getBlockX();
+ final int y = loc.getBlockY();
+ final int z = loc.getBlockZ();
+
+ for (Player p : server.getOnlinePlayers())
+ {
+ final User u = ess.getUser(p);
+ if (u.isIgnoredPlayer(user.getName()) && !user.isOp())
+ {
+ continue;
+ }
+ if (u.equals(user) && !u.isAuthorized("essentials.chat.spy"))
+ {
+ final Location l = u.getLocation();
+ final int dx = Math.abs(x - l.getBlockX());
+ final int dy = Math.abs(y - l.getBlockY());
+ final int dz = Math.abs(z - l.getBlockZ());
+ final int delta = dx + dy + dz;
+ if (delta > radius || world != l.getWorld())
+ {
+ continue;
+ }
+ }
+
+ u.sendMessage(String.format(event.getFormat(), user.getDisplayName(), event.getMessage()));
}
}
}
diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatWorker.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatWorker.java
deleted file mode 100644
index f43ed29a7..000000000
--- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatWorker.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package com.earth2me.essentials.chat;
-
-import com.earth2me.essentials.Essentials;
-import com.earth2me.essentials.User;
-import com.earth2me.essentials.Util;
-import com.nijikokun.bukkit.Permissions.Permissions;
-import java.util.logging.Logger;
-import org.bukkit.Location;
-import org.bukkit.Server;
-import org.bukkit.World;
-import org.bukkit.entity.Player;
-import org.bukkit.event.player.PlayerChatEvent;
-import org.bukkit.event.player.PlayerEvent;
-import org.bukkit.event.player.PlayerRespawnEvent;
-
-
-public class EssentialsChatWorker
-{
- private static final Logger logger = Logger.getLogger("Minecraft");
-
- public static void onPlayerRespawn(Server server, PlayerRespawnEvent event)
- {
- User user = Essentials.getStatic().getUser(event.getPlayer());
- updateDisplayName(user);
- }
-
- public static void onPlayerJoin(Server server, PlayerEvent event)
- {
- User user = Essentials.getStatic().getUser(event.getPlayer());
- updateDisplayName(user);
- }
-
- private static void updateDisplayName(User user)
- {
- try
- {
- String group = user.getGroup();
- try
- {
- String prefix = Permissions.Security.getGroupPrefix(user.getWorld().getName(), group).replace('&', '§').replace("{WORLDNAME}", user.getWorld().getName());
- String suffix = Permissions.Security.getGroupSuffix(user.getWorld().getName(), group).replace('&', '§').replace("{WORLDNAME}", user.getWorld().getName());
-
- user.setDisplayName(prefix + user.getNick() + suffix + (suffix.length() > 1 && suffix.substring(suffix.length() -2).equals("§") ? "" : "§f"));
- }
- catch (Throwable ex)
- {
- logger.warning(Util.format("missingPrefixSuffix", group));
- }
- }
- catch (Throwable ex)
- {
- logger.warning(Util.i18n("permissionsError"));
- }
- }
-
- public static void onPlayerChat(Server server, PlayerChatEvent event)
- {
- if (event.isCancelled()) return;
- User user = Essentials.getStatic().getUser(event.getPlayer());
- updateDisplayName(user);
-
- if (user.isAuthorized("essentials.chat.color"))
- event.setMessage(event.getMessage().replaceAll("&([0-9a-f])", "§$1"));
-
- event.setFormat(Essentials.getStatic().getSettings().getChatFormat(user.getGroup()).replace('&', '§').replace("§§", "&").replace("{DISPLAYNAME}", "%1$s").replace("{GROUP}", user.getGroup()).replace("{MESSAGE}", "%2$s").replace("{WORLDNAME}", user.getWorld().getName()).replace("{SHORTWORLDNAME}", user.getWorld().getName().substring(0, 1).toUpperCase()));
-
- int radius = Essentials.getStatic().getSettings().getChatRadius();
- if (radius < 1) return;
-
- if (event.getMessage().startsWith("!") && event.getMessage().length() > 1)
- {
- if (user.isAuthorized("essentials.chat.shout"))
- {
- event.setMessage(event.getMessage().substring(1));
- event.setFormat(Util.format("shoutFormat", event.getFormat()));
- return;
- }
- user.sendMessage(Util.i18n("notAllowedToShout"));
- event.setCancelled(true);
- return;
- }
-
- if (event.getMessage().startsWith("?") && event.getMessage().length() > 1)
- {
- if (user.isAuthorized("essentials.chat.question"))
- {
- event.setMessage(event.getMessage().substring(1));
- event.setFormat(Util.format("questionFormat", event.getFormat()));
- return;
- }
- user.sendMessage(Util.i18n("notAllowedToQuestion"));
- event.setCancelled(true);
- return;
- }
-
- event.setCancelled(true);
- logger.info(Util.format("localFormat", user.getName(), event.getMessage()));
-
- Location loc = user.getLocation();
- World w = loc.getWorld();
- int x = loc.getBlockX();
- int y = loc.getBlockY();
- int z = loc.getBlockZ();
-
- for (Player p : server.getOnlinePlayers())
- {
- User u = Essentials.getStatic().getUser(p);
- if (u.isIgnoredPlayer(user.getName()) && !user.isOp()) {
- continue;
- }
- if (u != user && !u.isAuthorized("essentials.chat.spy"))
- {
- Location l = u.getLocation();
- int dx = Math.abs(x - l.getBlockX());
- int dy = Math.abs(y - l.getBlockY());
- int dz = Math.abs(z - l.getBlockZ());
- int delta = dx + dy + dz;
- if (delta > radius || w != l.getWorld()) continue;
- }
-
- u.sendMessage(String.format(event.getFormat(), user.getDisplayName(), event.getMessage()));
- }
- }
-}
diff --git a/EssentialsGeoIP/nbproject/project.properties b/EssentialsGeoIP/nbproject/project.properties
index ed96af206..bc9576f9a 100644
--- a/EssentialsGeoIP/nbproject/project.properties
+++ b/EssentialsGeoIP/nbproject/project.properties
@@ -1,9 +1,9 @@
annotation.processing.enabled=true
annotation.processing.enabled.in.editor=false
-annotation.processing.processor.options=
-annotation.processing.processors.list=
annotation.processing.run.all.processors=true
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+application.title=EssentialsGeoIP
+application.vendor=snowleo
build.classes.dir=${build.dir}/classes
build.classes.excludes=**/*.java,**/*.form
# This directory is removed when the project is cleaned:
@@ -24,6 +24,7 @@ debug.test.classpath=\
dist.dir=dist
dist.jar=${dist.dir}/EssentialsGeoIP.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
includes=**
diff --git a/EssentialsPermissionsCommands/build.xml b/EssentialsPermissionsCommands/build.xml
new file mode 100644
index 000000000..507230993
--- /dev/null
+++ b/EssentialsPermissionsCommands/build.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+ Builds, tests, and runs the project EssentialsPermissionsCommands.
+
+
+
diff --git a/EssentialsPermissionsCommands/manifest.mf b/EssentialsPermissionsCommands/manifest.mf
new file mode 100644
index 000000000..328e8e5bc
--- /dev/null
+++ b/EssentialsPermissionsCommands/manifest.mf
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: Main-Class will be added automatically by build
+
diff --git a/EssentialsPermissionsCommands/nbproject/build-impl.xml b/EssentialsPermissionsCommands/nbproject/build-impl.xml
new file mode 100644
index 000000000..5147dc1c2
--- /dev/null
+++ b/EssentialsPermissionsCommands/nbproject/build-impl.xml
@@ -0,0 +1,1080 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set src.dir
+ Must set test.src.dir
+ Must set build.dir
+ Must set dist.dir
+ Must set build.classes.dir
+ Must set dist.javadoc.dir
+ Must set build.test.classes.dir
+ Must set build.test.results.dir
+ Must set build.classes.excludes
+ Must set dist.jar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set JVM to use for profiling in profiler.info.jvm
+ Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ To run this application from the command line without Ant, try:
+
+
+
+
+
+
+ java -cp "${run.classpath.with.dist.jar}" ${main.class}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ To run this application from the command line without Ant, try:
+
+ java -jar "${dist.jar.resolved}"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set debug.class
+
+
+
+
+ Must select one file in the IDE or set debug.class
+
+
+
+
+ Must set fix.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set profile.class
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Some tests failed; see details above.
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+ Some tests failed; see details above.
+
+
+
+
+ Must select one file in the IDE or set test.class
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/EssentialsPermissionsCommands/nbproject/genfiles.properties b/EssentialsPermissionsCommands/nbproject/genfiles.properties
new file mode 100644
index 000000000..bb1e587db
--- /dev/null
+++ b/EssentialsPermissionsCommands/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=9c3a069f
+build.xml.script.CRC32=0a912bb3
+build.xml.stylesheet.CRC32=28e38971@1.43.1.45
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=9c3a069f
+nbproject/build-impl.xml.script.CRC32=dd030a92
+nbproject/build-impl.xml.stylesheet.CRC32=0c01fd8e@1.43.1.45
diff --git a/EssentialsPermissionsCommands/nbproject/project.properties b/EssentialsPermissionsCommands/nbproject/project.properties
new file mode 100644
index 000000000..d92776f5b
--- /dev/null
+++ b/EssentialsPermissionsCommands/nbproject/project.properties
@@ -0,0 +1,79 @@
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=false
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+application.title=EssentialsPermissionsCommands
+application.vendor=snowleo
+build.classes.dir=${build.dir}/classes
+build.classes.excludes=**/*.java,**/*.form
+# This directory is removed when the project is cleaned:
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+# Only compile against the classpath explicitly listed here:
+build.sysclasspath=ignore
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+# Uncomment to specify the preferred debugger connection transport:
+#debug.transport=dt_socket
+debug.classpath=\
+ ${run.classpath}
+debug.test.classpath=\
+ ${run.test.classpath}
+# This directory is removed when the project is cleaned:
+dist.dir=dist
+dist.jar=${dist.dir}/EssentialsPermissionsCommands.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+endorsed.classpath=
+excludes=
+file.reference.bukkit-0.0.1-SNAPSHOT.jar=../lib/bukkit-0.0.1-SNAPSHOT.jar
+file.reference.Permissions3.jar=../lib/Permissions3.jar
+includes=**
+jar.compress=false
+javac.classpath=\
+ ${reference.Essentials.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
+javac.processorpath=\
+ ${javac.classpath}
+javac.source=1.6
+javac.target=1.6
+javac.test.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}
+javac.test.processorpath=\
+ ${javac.test.classpath}
+javadoc.additionalparam=
+javadoc.author=false
+javadoc.encoding=${source.encoding}
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.private=false
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=
+main.class=
+manifest.file=manifest.mf
+meta.inf.dir=${src.dir}/META-INF
+mkdist.disabled=false
+platform.active=default_platform
+project.Essentials=../Essentials
+reference.Essentials.jar=${project.Essentials}/dist/Essentials.jar
+run.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}
+# Space-separated list of JVM arguments used when running the project
+# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
+# or test-sys-prop.name=value to set system properties for unit tests):
+run.jvmargs=
+run.test.classpath=\
+ ${javac.test.classpath}:\
+ ${build.test.classes.dir}
+source.encoding=UTF-8
+src.dir=src
+test.src.dir=test
diff --git a/EssentialsPermissionsCommands/nbproject/project.xml b/EssentialsPermissionsCommands/nbproject/project.xml
new file mode 100644
index 000000000..89e773c31
--- /dev/null
+++ b/EssentialsPermissionsCommands/nbproject/project.xml
@@ -0,0 +1,28 @@
+
+
+ org.netbeans.modules.java.j2seproject
+
+
+ EssentialsPermissionsCommands
+
+
+
+
+
+
+
+
+ ../lib/nblibraries.properties
+
+
+
+ Essentials
+ jar
+
+ jar
+ clean
+ jar
+
+
+
+
diff --git a/EssentialsPermissionsCommands/src/com/earth2me/essentials/permissions/Commandmanuadd.java b/EssentialsPermissionsCommands/src/com/earth2me/essentials/permissions/Commandmanuadd.java
new file mode 100644
index 000000000..1f41b890a
--- /dev/null
+++ b/EssentialsPermissionsCommands/src/com/earth2me/essentials/permissions/Commandmanuadd.java
@@ -0,0 +1,22 @@
+package com.earth2me.essentials.permissions;
+
+import com.earth2me.essentials.commands.EssentialsCommand;
+import org.bukkit.Server;
+import org.bukkit.command.CommandSender;
+
+
+public class Commandmanuadd extends EssentialsCommand
+{
+ public Commandmanuadd()
+ {
+ super("manuadd");
+ }
+
+ @Override
+ protected void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception
+ {
+
+ }
+
+
+}
diff --git a/EssentialsPermissionsCommands/src/com/earth2me/essentials/permissions/EssentialsPermissionsCommands.java b/EssentialsPermissionsCommands/src/com/earth2me/essentials/permissions/EssentialsPermissionsCommands.java
new file mode 100644
index 000000000..f8af12f28
--- /dev/null
+++ b/EssentialsPermissionsCommands/src/com/earth2me/essentials/permissions/EssentialsPermissionsCommands.java
@@ -0,0 +1,26 @@
+package com.earth2me.essentials.permissions;
+
+import com.earth2me.essentials.Essentials;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.plugin.java.JavaPlugin;
+
+
+public class EssentialsPermissionsCommands extends JavaPlugin
+{
+ @Override
+ public void onEnable()
+ {
+ }
+
+ @Override
+ public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args)
+ {
+ return Essentials.getStatic().onCommandEssentials(sender, command, label, args, EssentialsPermissionsCommands.class.getClassLoader(), "com.earth2me.essentials.permissions.Command");
+ }
+
+ @Override
+ public void onDisable()
+ {
+ }
+}
diff --git a/EssentialsPermissionsCommands/src/plugin.yml b/EssentialsPermissionsCommands/src/plugin.yml
new file mode 100644
index 000000000..3d75176a7
--- /dev/null
+++ b/EssentialsPermissionsCommands/src/plugin.yml
@@ -0,0 +1,166 @@
+# This determines the command prefix when there are conflicts (/name:home, /name:help, etc.)
+name: Essentials
+main: com.earth2me.essentials.permissions.EssentialsPermissionsCommands
+# Note to developers: This next line cannot change, or the automatic versioning system will break.
+version: TeamCity
+website: http://www.earth2me.net:8001/
+description: Adds commands aliases to Permissions 3
+authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology]
+depend: [Permissions, Essentials]
+commands:
+ manuadd:
+ description: Move a player to desired group.(Adds to the file if not exists)
+ usage: /
+ permission: groupmanager.manuadd
+ manudel:
+ description: Remove any user specific configuration. Make him default group.
+ usage: /
+ permission: groupmanager.manudel
+ manuaddsub:
+ description: Add a group to a player's subgroup list.
+ usage: /
+ permission: groupmanager.manuaddsub
+ manudelsub:
+ description: Remove a group to a player's subgroup list.
+ usage: /
+ permission: groupmanager.manudelsub
+ mangadd:
+ description: Add group to the system.
+ usage: /
+ permission: groupmanager.mangadd
+ mangdel:
+ description: Removes group from the system(all it's users become default)
+ usage: /
+ permission: groupmanager.mangdel
+ manuaddp:
+ description: Add permission diretly to the player.
+ usage: /
+ permission: groupmanager.manuaddp
+ manudelp:
+ description: Removes permission diretly from the player.
+ usage: /
+ permission: groupmanager.manudelp
+ manulistp:
+ description: List all permissions from a player.
+ usage: /
+ permission: groupmanager.manulistp
+ manucheckp:
+ description: Verify if user has a permission, and where it comes from.
+ usage: /
+ permission: groupmanager.manucheckp
+ mangaddp:
+ description: Add permission to a group.
+ usage: /
+ permission: groupmanager.mangaddp
+ mangdelp:
+ description: Removes permission from a group.
+ usage: /
+ permission: groupmanager.mangdelp
+ manglistp:
+ description: Lists all permissions from a group.
+ usage: /
+ permission: groupmanager.manglistp
+ mangcheckp:
+ description: Check if group has a permission, and where it comes from.
+ usage: /
+ permission: groupmanager.mangcheckp
+ mangaddi:
+ description: Add a group to another group inheritance list.
+ usage: /
+ permission: groupmanager.mangaddi
+ mangdeli:
+ description: Remove a group from another group inheritance list.
+ usage: /
+ permission: groupmanager.mangdeli
+ manuaddv:
+ description: Add, or replaces, a variable to a user (like prefix or suffix).
+ usage: /
+ permission: groupmanager.manuaddv
+ manudelv:
+ description: Remove a variable from a user.
+ usage: /
+ permission: groupmanager.manudelv
+ manulistv:
+ description: List variables a user has (like prefix or suffix).
+ usage: /
+ permission: groupmanager.manulistv
+ manucheckv:
+ description: Verify a value of a variable of user, and where it comes from.
+ usage: /
+ permission: groupmanager.manucheckv
+ mangaddv:
+ description: Add, or replaces, a variable to a group (like prefix or suffix).
+ usage: /
+ permission: groupmanager.mangaddv
+ mangdelv:
+ description: Remove a variable from a group.
+ usage: /
+ permission: groupmanager.mangdelv
+ manglistv:
+ description: List variables a group has (like prefix or suffix).
+ usage: /
+ permission: groupmanager.manglistv
+ mangcheckv:
+ description: Verify a value of a variable of group, and where it comes from.
+ usage: /
+ permission: groupmanager.mangckeckv
+ manwhois:
+ description: Tell the group that user belongs.
+ usage: /
+ permission: groupmanager.manwhois
+ tempadd:
+ description: Creates a temporary permission copy for that user.
+ usage: /
+ permission: groupmanager.tempadd
+ tempdel:
+ description: Remove the temporary permission copy for player.
+ usage: /
+ permission: groupmanager.tempdel
+ templist:
+ description: List players in overload-permissions mode made by /tempadd.
+ usage: /
+ permission: groupmanager.templist
+ tempdelall:
+ description: Remove all overrides made by command /tempadd.
+ usage: /
+ permission: groupmanager.tempdelall
+ mansave:
+ description: Save all permissions on file.
+ usage: /
+ permission: groupmanager.mansave
+ manload:
+ description: Reload current world and config.yml. Or load given world.
+ usage: / [world]
+ permission: groupmanager.manload
+ listgroups:
+ description: List the groups available.
+ usage: /
+ permission: groupmanager.listgroups
+ manpromote:
+ description: Promote a player in the same heritage line to a higher rank.
+ usage: /
+ permission: groupmanager.manpromote
+ mandemote:
+ description: Demote a player in the same heritage line to a lower rank.
+ usage: /
+ permission: groupmanager.mandemote
+ mantogglevalidate:
+ description: Toggle on/off the validating if player is online.
+ usage: /
+ permission: groupmanager.mantogglevalidate
+ mantogglesave:
+ description: Toggle on/ff the autosave.
+ usage: /
+ permission: groupmanager.mantogglesave
+ manworld:
+ description: Prints the selected world name
+ usage: /
+ permission: groupmanager.manworld
+ manselect:
+ description: Select a world to work with next commands.
+ usage: /
+ permission: groupmanager.manselect
+ manclear:
+ description: Clear world selection. Next commands will work on your world.
+ usage: /
+ permission: groupmanager.manclear
\ No newline at end of file
diff --git a/lib/Permissions3.jar b/lib/Permissions3.jar
new file mode 100755
index 000000000..7e2741283
Binary files /dev/null and b/lib/Permissions3.jar differ