mirror of
https://github.com/EssentialsX/Essentials.git
synced 2024-12-27 03:28:30 +01:00
Merge remote branch 'remotes/ess/groupmanager' into essmaster
This commit is contained in:
commit
aa0935c64b
@ -23,4 +23,16 @@ v 1.1:
|
|||||||
- Fix for GM not checking inheritance for known superperms nodes.
|
- Fix for GM not checking inheritance for known superperms nodes.
|
||||||
- Optimized getAllPlayersPermissions and fixed pushing unknown perms to superperms.
|
- Optimized getAllPlayersPermissions and fixed pushing unknown perms to superperms.
|
||||||
v 1.2:
|
v 1.2:
|
||||||
- Changed priority if Registered events to lowest.
|
- Changed priority of Registered events to lowest.
|
||||||
|
- Fixed an issue with superperms where plugins define perms with inheritance after the root perms
|
||||||
|
- Rewrote Config loading to use Bukkits Configuration features
|
||||||
|
- Added an opOverride setting in config.
|
||||||
|
If present and set to false, op's will not get overriding permissions in GroupManager.
|
||||||
|
(one op will not be able to alter another op's settings)
|
||||||
|
- GM will now create all relevant world data files for non mirrored worlds.
|
||||||
|
(for all worlds named in config.yml)
|
||||||
|
- Attempt to stop GM wiping groups/users yml's on a bad shut down.
|
||||||
|
- Added event handling to manage new world creation at runtime.
|
||||||
|
- Added the ability to handle unknown worlds at server start.
|
||||||
|
(GM will create the data files for any worlds it finds which are not in the config.yml)
|
||||||
|
- Fix for Bukkit passing a null To location on a player Portaling
|
@ -1,12 +1,19 @@
|
|||||||
settings:
|
settings:
|
||||||
|
config:
|
||||||
|
# With this enabled anyone set as op has full permissions when managing GroupManager
|
||||||
|
opOverrides: true
|
||||||
data:
|
data:
|
||||||
save:
|
save:
|
||||||
|
# How often GroupManager will save it's data back to groups and users.yml
|
||||||
minutes: 10
|
minutes: 10
|
||||||
logging:
|
logging:
|
||||||
|
# level of detail GroupManager will use when logging.
|
||||||
|
# Acceptable entries are - ALL,CONFIG,FINE,FINER,FINEST,INFO,OFF,SEVERE,WARNING
|
||||||
level: INFO
|
level: INFO
|
||||||
permission:
|
permission:
|
||||||
world:
|
world:
|
||||||
mirror:
|
mirror:
|
||||||
|
# Worlds listed here have their permissions mirrored in their children.
|
||||||
world:
|
world:
|
||||||
- world_nether
|
- world_nether
|
||||||
- world2
|
- world2
|
||||||
|
91
EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java
Executable file → Normal file
91
EssentialsGroupManager/src/org/anjocaido/groupmanager/GMConfiguration.java
Executable file → Normal file
@ -5,15 +5,12 @@
|
|||||||
package org.anjocaido.groupmanager;
|
package org.anjocaido.groupmanager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.anjocaido.groupmanager.utils.Tasks;
|
import org.anjocaido.groupmanager.utils.Tasks;
|
||||||
import org.yaml.snakeyaml.Yaml;
|
import org.bukkit.util.config.Configuration;
|
||||||
import org.yaml.snakeyaml.constructor.SafeConstructor;
|
|
||||||
import org.yaml.snakeyaml.reader.UnicodeReader;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -22,9 +19,9 @@ import org.yaml.snakeyaml.reader.UnicodeReader;
|
|||||||
public class GMConfiguration {
|
public class GMConfiguration {
|
||||||
|
|
||||||
private GroupManager plugin;
|
private GroupManager plugin;
|
||||||
private Map<String, Object> rootDataNode;
|
|
||||||
private File configFile;
|
private File configFile;
|
||||||
|
private Configuration GMconfig;
|
||||||
|
|
||||||
public GMConfiguration(GroupManager plugin) {
|
public GMConfiguration(GroupManager plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
load();
|
load();
|
||||||
@ -44,77 +41,37 @@ public class GMConfiguration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Yaml yaml = new Yaml(new SafeConstructor());
|
GMconfig = new Configuration(configFile);
|
||||||
FileInputStream rx = null;
|
|
||||||
try {
|
try {
|
||||||
rx = new FileInputStream(configFile);
|
GMconfig.load();
|
||||||
} catch (FileNotFoundException ex) {
|
|
||||||
GroupManager.logger.log(Level.SEVERE, null, ex);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
rootDataNode = (Map<String, Object>) yaml.load(new UnicodeReader(rx));
|
|
||||||
if (rootDataNode == null) {
|
|
||||||
throw new NullPointerException();
|
|
||||||
}
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
throw new IllegalArgumentException("The following file couldn't pass on Parser.\n" + configFile.getPath(), ex);
|
throw new IllegalArgumentException("The following file couldn't pass on Parser.\n" + configFile.getPath(), ex);
|
||||||
} finally {
|
|
||||||
try {
|
|
||||||
rx.close();
|
|
||||||
} catch (IOException ex) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
adjustLoggerLevel();
|
adjustLoggerLevel();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, Object> getMirrorsMap() {
|
public boolean isOpOverride() {
|
||||||
if (rootDataNode.get("settings") instanceof Map) {
|
return GMconfig.getBoolean("settings.config.opOverrides", true);
|
||||||
Map<String, Object> settingsNode = (Map<String, Object>) rootDataNode.get("settings");
|
|
||||||
if (settingsNode.get("permission") instanceof Map) {
|
|
||||||
Map<String, Object> permissionNode = (Map<String, Object>) settingsNode.get("permission");
|
|
||||||
if (permissionNode.get("world") instanceof Map) {
|
|
||||||
Map<String, Object> worldsNode = (Map<String, Object>) permissionNode.get("world");
|
|
||||||
if (worldsNode.get("mirror") instanceof Map) {
|
|
||||||
Map<String, Object> mirrorsNode = (Map<String, Object>) worldsNode.get("mirror");
|
|
||||||
return mirrorsNode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getSaveInterval() {
|
@SuppressWarnings("unchecked")
|
||||||
if (rootDataNode.get("settings") instanceof Map) {
|
public Map<String, Object> getMirrorsMap() {
|
||||||
Map<String, Object> settingsNode = (Map<String, Object>) rootDataNode.get("settings");
|
return (Map<String, Object>) GMconfig.getProperty("settings.permission.world.mirror");
|
||||||
if (settingsNode.get("data") instanceof Map) {
|
}
|
||||||
Map<String, Object> dataNode = (Map<String, Object>) settingsNode.get("data");
|
|
||||||
if (dataNode.get("save") instanceof Map) {
|
public Integer getSaveInterval() {
|
||||||
Map<String, Object> saveNode = (Map<String, Object>) dataNode.get("save");
|
return GMconfig.getInt("settings.data.save.minutes", 10);
|
||||||
if (saveNode.get("minutes") instanceof Integer) {
|
|
||||||
return (Integer) saveNode.get("minutes");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 10;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void adjustLoggerLevel() {
|
public void adjustLoggerLevel() {
|
||||||
if (rootDataNode.get("settings") instanceof Map) {
|
|
||||||
Map<String, Object> settingsNode = (Map<String, Object>) rootDataNode.get("settings");
|
try {
|
||||||
if (settingsNode.get("logging") instanceof Map) {
|
GroupManager.logger.setLevel(Level.parse(GMconfig.getString("settings.logging.level", "INFO")));
|
||||||
Map<String, Object> loggingNode = (Map<String, Object>) settingsNode.get("logging");
|
return;
|
||||||
if (loggingNode.get("level") instanceof String) {
|
} catch (Exception e) {
|
||||||
String level = (String) loggingNode.get("level");
|
|
||||||
try {
|
|
||||||
GroupManager.logger.setLevel(Level.parse(level));
|
|
||||||
return;
|
|
||||||
} catch (Exception e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
GroupManager.logger.setLevel(Level.INFO);
|
|
||||||
|
GroupManager.logger.setLevel(Level.INFO);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import org.anjocaido.groupmanager.dataholder.worlds.WorldsHolder;
|
import org.anjocaido.groupmanager.dataholder.worlds.WorldsHolder;
|
||||||
|
import org.anjocaido.groupmanager.events.GMWorldListener;
|
||||||
import org.anjocaido.groupmanager.utils.GMLoggerHandler;
|
import org.anjocaido.groupmanager.utils.GMLoggerHandler;
|
||||||
import org.anjocaido.groupmanager.utils.PermissionCheckResult;
|
import org.anjocaido.groupmanager.utils.PermissionCheckResult;
|
||||||
import org.anjocaido.groupmanager.utils.Tasks;
|
import org.anjocaido.groupmanager.utils.Tasks;
|
||||||
@ -32,9 +33,12 @@ import org.bukkit.command.Command;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.command.ConsoleCommandSender;
|
import org.bukkit.command.ConsoleCommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.world.WorldListener;
|
||||||
import org.bukkit.plugin.PluginDescriptionFile;
|
import org.bukkit.plugin.PluginDescriptionFile;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -55,6 +59,7 @@ public class GroupManager extends JavaPlugin {
|
|||||||
private GMConfiguration config;
|
private GMConfiguration config;
|
||||||
private GMLoggerHandler ch;
|
private GMLoggerHandler ch;
|
||||||
public static BukkitPermissions BukkitPermissions;
|
public static BukkitPermissions BukkitPermissions;
|
||||||
|
private static WorldListener WorldEvents;
|
||||||
public static final Logger logger = Logger.getLogger(GroupManager.class.getName());
|
public static final Logger logger = Logger.getLogger(GroupManager.class.getName());
|
||||||
|
|
||||||
//PERMISSIONS FOR COMMAND BEING LOADED
|
//PERMISSIONS FOR COMMAND BEING LOADED
|
||||||
@ -69,6 +74,10 @@ public class GroupManager extends JavaPlugin {
|
|||||||
worldsHolder.saveChanges();
|
worldsHolder.saveChanges();
|
||||||
}
|
}
|
||||||
disableScheduler();
|
disableScheduler();
|
||||||
|
|
||||||
|
WorldEvents = null;
|
||||||
|
BukkitPermissions = null;
|
||||||
|
|
||||||
// EXAMPLE: Custom code, here we just output some info so we can check all is well
|
// EXAMPLE: Custom code, here we just output some info so we can check all is well
|
||||||
PluginDescriptionFile pdfFile = this.getDescription();
|
PluginDescriptionFile pdfFile = this.getDescription();
|
||||||
System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is disabled!");
|
System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is disabled!");
|
||||||
@ -94,8 +103,10 @@ public class GroupManager extends JavaPlugin {
|
|||||||
throw new IllegalStateException("An error ocurred while loading GroupManager");
|
throw new IllegalStateException("An error ocurred while loading GroupManager");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Initialize the world listener and bukkit permissions to handle events.
|
||||||
|
WorldEvents = new GMWorldListener(this);
|
||||||
BukkitPermissions = new BukkitPermissions(this);
|
BukkitPermissions = new BukkitPermissions(this);
|
||||||
|
|
||||||
enableScheduler();
|
enableScheduler();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -108,9 +119,10 @@ public class GroupManager extends JavaPlugin {
|
|||||||
setLoaded(true);
|
setLoaded(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//setLoaded(true);
|
|
||||||
System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!");
|
System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static boolean isLoaded() {
|
public static boolean isLoaded() {
|
||||||
return isLoaded;
|
return isLoaded;
|
||||||
@ -232,6 +244,7 @@ public class GroupManager extends JavaPlugin {
|
|||||||
Player senderPlayer = null, targetPlayer = null;
|
Player senderPlayer = null, targetPlayer = null;
|
||||||
Group senderGroup = null;
|
Group senderGroup = null;
|
||||||
User senderUser = null;
|
User senderUser = null;
|
||||||
|
boolean isOpOverride = config.isOpOverride();
|
||||||
|
|
||||||
|
|
||||||
//DETERMINING PLAYER INFORMATION
|
//DETERMINING PLAYER INFORMATION
|
||||||
@ -239,8 +252,10 @@ public class GroupManager extends JavaPlugin {
|
|||||||
senderPlayer = (Player) sender;
|
senderPlayer = (Player) sender;
|
||||||
senderUser = worldsHolder.getWorldData(senderPlayer).getUser(senderPlayer.getName());
|
senderUser = worldsHolder.getWorldData(senderPlayer).getUser(senderPlayer.getName());
|
||||||
senderGroup = senderUser.getGroup();
|
senderGroup = senderUser.getGroup();
|
||||||
|
isOpOverride = (isOpOverride && senderPlayer.isOp());
|
||||||
|
|
||||||
System.out.println("[PLAYER_COMMAND] " + senderPlayer.getName() + ": /" + commandLabel + " " + Tasks.join(args, " "));
|
System.out.println("[PLAYER_COMMAND] " + senderPlayer.getName() + ": /" + commandLabel + " " + Tasks.join(args, " "));
|
||||||
if (senderPlayer.isOp() || worldsHolder.getWorldPermissions(senderPlayer).has(senderPlayer, "groupmanager." + cmd.getName())) {
|
if (isOpOverride || worldsHolder.getWorldPermissions(senderPlayer).has(senderPlayer, "groupmanager." + cmd.getName())) {
|
||||||
playerCanDo = true;
|
playerCanDo = true;
|
||||||
}
|
}
|
||||||
} else if (sender instanceof ConsoleCommandSender) {
|
} else if (sender instanceof ConsoleCommandSender) {
|
||||||
@ -338,23 +353,23 @@ public class GroupManager extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//VALIDANDO PERMISSAO
|
//VALIDANDO PERMISSAO
|
||||||
if (!isConsole && !senderPlayer.isOp() && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
|
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
|
||||||
sender.sendMessage(ChatColor.RED + "Can't modify player with same permissions than you, or higher.");
|
sender.sendMessage(ChatColor.RED + "Can't modify player with same permissions than you, or higher.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!isConsole && !senderPlayer.isOp() && (permissionHandler.hasGroupInInheritance(auxGroup, senderGroup.getName()))) {
|
if (!isConsole && !isOpOverride && (permissionHandler.hasGroupInInheritance(auxGroup, senderGroup.getName()))) {
|
||||||
sender.sendMessage(ChatColor.RED + "The destination group can't be the same as yours, or higher.");
|
sender.sendMessage(ChatColor.RED + "The destination group can't be the same as yours, or higher.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!isConsole && !senderPlayer.isOp() && (!permissionHandler.inGroup(senderUser.getName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getName(), auxGroup.getName()))) {
|
if (!isConsole && !isOpOverride && (!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.");
|
sender.sendMessage(ChatColor.RED + "Can't modify player involving a group that you don't inherit.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!isConsole && !senderPlayer.isOp() && (!permissionHandler.hasGroupInInheritance(auxUser.getGroup(), auxGroup.getName()) && !permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) {
|
if (!isConsole && !isOpOverride && (!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.");
|
sender.sendMessage(ChatColor.RED + "Can't modify player using groups with different heritage line.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!isConsole && !senderPlayer.isOp() && (!permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) {
|
if (!isConsole && !isOpOverride && (!permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) {
|
||||||
sender.sendMessage(ChatColor.RED + "The new group must be a higher rank.");
|
sender.sendMessage(ChatColor.RED + "The new group must be a higher rank.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -392,7 +407,7 @@ public class GroupManager extends JavaPlugin {
|
|||||||
auxUser = dataHolder.getUser(args[0]);
|
auxUser = dataHolder.getUser(args[0]);
|
||||||
}
|
}
|
||||||
//VALIDANDO PERMISSAO
|
//VALIDANDO PERMISSAO
|
||||||
if (!isConsole && !senderPlayer.isOp() && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
|
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
|
||||||
sender.sendMessage(ChatColor.RED + "Can't modify player with same permissions than you, or higher.");
|
sender.sendMessage(ChatColor.RED + "Can't modify player with same permissions than you, or higher.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -436,7 +451,7 @@ public class GroupManager extends JavaPlugin {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
//VALIDANDO PERMISSAO
|
//VALIDANDO PERMISSAO
|
||||||
if (!isConsole && !senderPlayer.isOp() && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
|
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
|
||||||
sender.sendMessage(ChatColor.RED + "Can't modify player with same permissions than you, or higher.");
|
sender.sendMessage(ChatColor.RED + "Can't modify player with same permissions than you, or higher.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -472,7 +487,7 @@ public class GroupManager extends JavaPlugin {
|
|||||||
auxUser = dataHolder.getUser(args[0]);
|
auxUser = dataHolder.getUser(args[0]);
|
||||||
}
|
}
|
||||||
//VALIDANDO PERMISSAO
|
//VALIDANDO PERMISSAO
|
||||||
if (!isConsole && !senderPlayer.isOp() && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
|
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
|
||||||
sender.sendMessage(ChatColor.RED + "Can't modify player with same permissions than you, or higher.");
|
sender.sendMessage(ChatColor.RED + "Can't modify player with same permissions than you, or higher.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -557,7 +572,7 @@ public class GroupManager extends JavaPlugin {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
permissionResult = permissionHandler.checkFullUserPermission(senderUser, args[1]);
|
permissionResult = permissionHandler.checkFullUserPermission(senderUser, args[1]);
|
||||||
if (!isConsole && !senderPlayer.isOp() && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)
|
if (!isConsole && !isOpOverride && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)
|
||||||
|| permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) {
|
|| permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) {
|
||||||
sender.sendMessage(ChatColor.RED + "Can't add a permission you don't have.");
|
sender.sendMessage(ChatColor.RED + "Can't add a permission you don't have.");
|
||||||
return false;
|
return false;
|
||||||
@ -620,12 +635,12 @@ public class GroupManager extends JavaPlugin {
|
|||||||
auxUser = dataHolder.getUser(args[0]);
|
auxUser = dataHolder.getUser(args[0]);
|
||||||
}
|
}
|
||||||
//VALIDANDO SUA PERMISSAO
|
//VALIDANDO SUA PERMISSAO
|
||||||
if (!isConsole && !senderPlayer.isOp() && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
|
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
|
||||||
sender.sendMessage(ChatColor.RED + "Can't modify player with same group than you, or higher.");
|
sender.sendMessage(ChatColor.RED + "Can't modify player with same group than you, or higher.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
permissionResult = permissionHandler.checkFullUserPermission(senderUser, args[1]);
|
permissionResult = permissionHandler.checkFullUserPermission(senderUser, args[1]);
|
||||||
if (!isConsole && !senderPlayer.isOp() && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)
|
if (!isConsole && !isOpOverride && (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)
|
||||||
|| permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) {
|
|| permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION))) {
|
||||||
sender.sendMessage(ChatColor.RED + "Can't remove a permission you don't have.");
|
sender.sendMessage(ChatColor.RED + "Can't remove a permission you don't have.");
|
||||||
return false;
|
return false;
|
||||||
@ -1554,23 +1569,23 @@ public class GroupManager extends JavaPlugin {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
//VALIDANDO PERMISSAO
|
//VALIDANDO PERMISSAO
|
||||||
if (!isConsole && !senderPlayer.isOp() && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
|
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
|
||||||
sender.sendMessage(ChatColor.RED + "Can't modify player with same permissions than you, or higher.");
|
sender.sendMessage(ChatColor.RED + "Can't modify player with same permissions than you, or higher.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!isConsole && !senderPlayer.isOp() && (permissionHandler.hasGroupInInheritance(auxGroup, senderGroup.getName()))) {
|
if (!isConsole && !isOpOverride && (permissionHandler.hasGroupInInheritance(auxGroup, senderGroup.getName()))) {
|
||||||
sender.sendMessage(ChatColor.RED + "The destination group can't be the same as yours, or higher.");
|
sender.sendMessage(ChatColor.RED + "The destination group can't be the same as yours, or higher.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!isConsole && !senderPlayer.isOp() && (!permissionHandler.inGroup(senderUser.getName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getName(), auxGroup.getName()))) {
|
if (!isConsole && !isOpOverride && (!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.");
|
sender.sendMessage(ChatColor.RED + "Can't modify player involving a group that you don't inherit.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!isConsole && !senderPlayer.isOp() && (!permissionHandler.hasGroupInInheritance(auxUser.getGroup(), auxGroup.getName()) && !permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) {
|
if (!isConsole && !isOpOverride && (!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.");
|
sender.sendMessage(ChatColor.RED + "Can't modify player using groups with different heritage line.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!isConsole && !senderPlayer.isOp() && (!permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) {
|
if (!isConsole && !isOpOverride && (!permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) {
|
||||||
sender.sendMessage(ChatColor.RED + "The new group must be a higher rank.");
|
sender.sendMessage(ChatColor.RED + "The new group must be a higher rank.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1612,23 +1627,23 @@ public class GroupManager extends JavaPlugin {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
//VALIDANDO PERMISSAO
|
//VALIDANDO PERMISSAO
|
||||||
if (!isConsole && !senderPlayer.isOp() && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
|
if (!isConsole && !isOpOverride && (senderGroup != null ? permissionHandler.inGroup(auxUser.getName(), senderGroup.getName()) : false)) {
|
||||||
sender.sendMessage(ChatColor.RED + "Can't modify player with same permissions than you, or higher.");
|
sender.sendMessage(ChatColor.RED + "Can't modify player with same permissions than you, or higher.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!isConsole && !senderPlayer.isOp() && (permissionHandler.hasGroupInInheritance(auxGroup, senderGroup.getName()))) {
|
if (!isConsole && !isOpOverride && (permissionHandler.hasGroupInInheritance(auxGroup, senderGroup.getName()))) {
|
||||||
sender.sendMessage(ChatColor.RED + "The destination group can't be the same as yours, or higher.");
|
sender.sendMessage(ChatColor.RED + "The destination group can't be the same as yours, or higher.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!isConsole && !senderPlayer.isOp() && (!permissionHandler.inGroup(senderUser.getName(), auxUser.getGroupName()) || !permissionHandler.inGroup(senderUser.getName(), auxGroup.getName()))) {
|
if (!isConsole && !isOpOverride && (!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' inherit.");
|
sender.sendMessage(ChatColor.RED + "Can't modify player involving a group that you don' inherit.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!isConsole && !senderPlayer.isOp() && (!permissionHandler.hasGroupInInheritance(auxUser.getGroup(), auxGroup.getName()) && !permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) {
|
if (!isConsole && !isOpOverride && (!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.");
|
sender.sendMessage(ChatColor.RED + "Can't modify player using groups with different heritage line.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!isConsole && !senderPlayer.isOp() && (permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) {
|
if (!isConsole && !isOpOverride && (permissionHandler.hasGroupInInheritance(auxGroup, auxUser.getGroupName()))) {
|
||||||
sender.sendMessage(ChatColor.RED + "The new group must be a lower rank.");
|
sender.sendMessage(ChatColor.RED + "The new group must be a lower rank.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ public class BukkitPermsUpdateTask implements Runnable {
|
|||||||
public void run() {
|
public void run() {
|
||||||
// Signal loaded and update BukkitPermissions.
|
// Signal loaded and update BukkitPermissions.
|
||||||
GroupManager.setLoaded(true);
|
GroupManager.setLoaded(true);
|
||||||
|
GroupManager.BukkitPermissions.collectPermissions();
|
||||||
GroupManager.BukkitPermissions.updateAllPlayers();
|
GroupManager.BukkitPermissions.updateAllPlayers();
|
||||||
|
|
||||||
GroupManager.logger.info("Bukkit Permissions Updated!");
|
GroupManager.logger.info("Bukkit Permissions Updated!");
|
||||||
|
@ -767,13 +767,15 @@ public class WorldDataHolder {
|
|||||||
aGroupMap.put("permissions", group.getPermissionList());
|
aGroupMap.put("permissions", group.getPermissionList());
|
||||||
}
|
}
|
||||||
|
|
||||||
DumperOptions opt = new DumperOptions();
|
if (!root.isEmpty()) {
|
||||||
opt.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
|
DumperOptions opt = new DumperOptions();
|
||||||
final Yaml yaml = new Yaml(opt);
|
opt.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
|
||||||
try {
|
final Yaml yaml = new Yaml(opt);
|
||||||
yaml.dump(root, new OutputStreamWriter(new FileOutputStream(groupsFile), "UTF-8"));
|
try {
|
||||||
} catch (UnsupportedEncodingException ex) {
|
yaml.dump(root, new OutputStreamWriter(new FileOutputStream(groupsFile), "UTF-8"));
|
||||||
} catch (FileNotFoundException ex) {
|
} catch (UnsupportedEncodingException ex) {
|
||||||
|
} catch (FileNotFoundException ex) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*FileWriter tx = null;
|
/*FileWriter tx = null;
|
||||||
@ -829,13 +831,16 @@ public class WorldDataHolder {
|
|||||||
aUserMap.put("subgroups", user.subGroupListStringCopy());
|
aUserMap.put("subgroups", user.subGroupListStringCopy());
|
||||||
//END SUBGROUPS NODE - BETA
|
//END SUBGROUPS NODE - BETA
|
||||||
}
|
}
|
||||||
DumperOptions opt = new DumperOptions();
|
|
||||||
opt.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
|
if (!root.isEmpty()) {
|
||||||
final Yaml yaml = new Yaml(opt);
|
DumperOptions opt = new DumperOptions();
|
||||||
try {
|
opt.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
|
||||||
yaml.dump(root, new OutputStreamWriter(new FileOutputStream(usersFile), "UTF-8"));
|
final Yaml yaml = new Yaml(opt);
|
||||||
} catch (UnsupportedEncodingException ex) {
|
try {
|
||||||
} catch (FileNotFoundException ex) {
|
yaml.dump(root, new OutputStreamWriter(new FileOutputStream(usersFile), "UTF-8"));
|
||||||
|
} catch (UnsupportedEncodingException ex) {
|
||||||
|
} catch (FileNotFoundException ex) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/*FileWriter tx = null;
|
/*FileWriter tx = null;
|
||||||
try {
|
try {
|
||||||
|
@ -21,6 +21,7 @@ import org.anjocaido.groupmanager.dataholder.WorldDataHolder;
|
|||||||
import org.anjocaido.groupmanager.dataholder.OverloadedWorldHolder;
|
import org.anjocaido.groupmanager.dataholder.OverloadedWorldHolder;
|
||||||
import org.anjocaido.groupmanager.permissions.AnjoPermissionsHandler;
|
import org.anjocaido.groupmanager.permissions.AnjoPermissionsHandler;
|
||||||
import org.anjocaido.groupmanager.utils.Tasks;
|
import org.anjocaido.groupmanager.utils.Tasks;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -52,6 +53,7 @@ public class WorldsHolder {
|
|||||||
*/
|
*/
|
||||||
public WorldsHolder(GroupManager plugin) {
|
public WorldsHolder(GroupManager plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
|
// Setup folders and check files exist for the primary world
|
||||||
verifyFirstRun();
|
verifyFirstRun();
|
||||||
initialLoad();
|
initialLoad();
|
||||||
if (defaultWorld == null) {
|
if (defaultWorld == null) {
|
||||||
@ -60,21 +62,48 @@ public class WorldsHolder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initialLoad() {
|
private void initialLoad() {
|
||||||
|
// load the initial world
|
||||||
initialWorldLoading();
|
initialWorldLoading();
|
||||||
|
// Configure and load any mirrors and additional worlds as defined in config.yml
|
||||||
mirrorSetUp();
|
mirrorSetUp();
|
||||||
|
// search the worlds folder for any manually created worlds (not listed in config.yml)
|
||||||
|
loadAllSearchedWorlds();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initialWorldLoading() {
|
private void initialWorldLoading() {
|
||||||
//LOAD EVERY WORLD POSSIBLE
|
//Load the default world
|
||||||
loadWorld(serverDefaultWorldName);
|
loadWorld(serverDefaultWorldName);
|
||||||
defaultWorld = worldsData.get(serverDefaultWorldName);
|
defaultWorld = worldsData.get(serverDefaultWorldName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadAllSearchedWorlds() {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read all known worlds from Bukkit
|
||||||
|
* Create the data files if they don't already exist,
|
||||||
|
* and they are not mirrored.
|
||||||
|
*/
|
||||||
|
for (World world: plugin.getServer().getWorlds())
|
||||||
|
if ((!worldsData.containsKey(world.getName().toLowerCase()))
|
||||||
|
&& (!mirrors.containsKey(world.getName().toLowerCase())))
|
||||||
|
setupWorldFolder(world.getName());
|
||||||
|
/*
|
||||||
|
* Loop over all folders within the worlds folder
|
||||||
|
* and attempt to load the world data
|
||||||
|
*/
|
||||||
for (File folder : worldsFolder.listFiles()) {
|
for (File folder : worldsFolder.listFiles()) {
|
||||||
if (folder.getName().equalsIgnoreCase(serverDefaultWorldName)) {
|
if (folder.isDirectory()) {
|
||||||
continue;
|
GroupManager.logger.info("World Found: " + folder.getName());
|
||||||
}
|
|
||||||
if (folder.isDirectory()) {
|
/*
|
||||||
loadWorld(folder.getName());
|
* don't load any worlds which are already loaded
|
||||||
|
* or mirrored worlds that don't need data.
|
||||||
|
*/
|
||||||
|
if (worldsData.containsKey(folder.getName().toLowerCase())
|
||||||
|
|| mirrors.containsKey(folder.getName().toLowerCase())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
loadWorld(folder.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -85,6 +114,12 @@ public class WorldsHolder {
|
|||||||
Map<String, Object> mirrorsMap = plugin.getConfig().getMirrorsMap();
|
Map<String, Object> mirrorsMap = plugin.getConfig().getMirrorsMap();
|
||||||
if (mirrorsMap != null) {
|
if (mirrorsMap != null) {
|
||||||
for (String source : mirrorsMap.keySet()) {
|
for (String source : mirrorsMap.keySet()) {
|
||||||
|
// Make sure all non mirrored worlds have a set of data files.
|
||||||
|
setupWorldFolder(source);
|
||||||
|
// Load the world data
|
||||||
|
if (!worldsData.containsKey(source.toLowerCase()))
|
||||||
|
loadWorld(source);
|
||||||
|
|
||||||
if (mirrorsMap.get(source) instanceof ArrayList) {
|
if (mirrorsMap.get(source) instanceof ArrayList) {
|
||||||
ArrayList mirrorList = (ArrayList) mirrorsMap.get(source);
|
ArrayList mirrorList = (ArrayList) mirrorsMap.get(source);
|
||||||
for (Object o : mirrorList) {
|
for (Object o : mirrorList) {
|
||||||
@ -246,18 +281,25 @@ public class WorldsHolder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void verifyFirstRun() {
|
private void verifyFirstRun() {
|
||||||
|
|
||||||
|
Properties server = new Properties();
|
||||||
|
try {
|
||||||
|
server.load(new FileInputStream(new File("server.properties")));
|
||||||
|
serverDefaultWorldName = server.getProperty("level-name").toLowerCase();
|
||||||
|
setupWorldFolder(serverDefaultWorldName);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
GroupManager.logger.log(Level.SEVERE, null, ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setupWorldFolder(String worldName) {
|
||||||
worldsFolder = new File(plugin.getDataFolder(), "worlds");
|
worldsFolder = new File(plugin.getDataFolder(), "worlds");
|
||||||
if (!worldsFolder.exists()) {
|
if (!worldsFolder.exists()) {
|
||||||
worldsFolder.mkdirs();
|
worldsFolder.mkdirs();
|
||||||
}
|
}
|
||||||
Properties server = new Properties();
|
|
||||||
try {
|
File defaultWorldFolder = new File(worldsFolder, worldName);
|
||||||
server.load(new FileInputStream(new File("server.properties")));
|
|
||||||
} catch (IOException ex) {
|
|
||||||
GroupManager.logger.log(Level.SEVERE, null, ex);
|
|
||||||
}
|
|
||||||
serverDefaultWorldName = server.getProperty("level-name").toLowerCase();
|
|
||||||
File defaultWorldFolder = new File(worldsFolder, serverDefaultWorldName);
|
|
||||||
if (!defaultWorldFolder.exists()) {
|
if (!defaultWorldFolder.exists()) {
|
||||||
defaultWorldFolder.mkdirs();
|
defaultWorldFolder.mkdirs();
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,43 @@
|
|||||||
|
package org.anjocaido.groupmanager.events;
|
||||||
|
|
||||||
|
import org.anjocaido.groupmanager.GroupManager;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.world.WorldInitEvent;
|
||||||
|
import org.bukkit.event.world.WorldListener;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ElgarL
|
||||||
|
*
|
||||||
|
* Handle new world creation from other plugins
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class GMWorldListener extends WorldListener {
|
||||||
|
|
||||||
|
private final GroupManager plugin;
|
||||||
|
|
||||||
|
public GMWorldListener(GroupManager instance) {
|
||||||
|
plugin = instance;
|
||||||
|
registerEvents();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerEvents() {
|
||||||
|
plugin.getServer().getPluginManager().registerEvent(Event.Type.WORLD_INIT, this, Event.Priority.Lowest, plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onWorldInit(WorldInitEvent event) {
|
||||||
|
String worldName = event.getWorld().getName();
|
||||||
|
|
||||||
|
if (GroupManager.isLoaded() && !plugin.getWorldsHolder().isInList(worldName)) {
|
||||||
|
GroupManager.logger.info("New world detected...");
|
||||||
|
GroupManager.logger.info("Creating data for: " + worldName);
|
||||||
|
plugin.getWorldsHolder().setupWorldFolder(worldName);
|
||||||
|
plugin.getWorldsHolder().loadWorld(worldName);
|
||||||
|
if (plugin.getWorldsHolder().isInList(worldName)) {
|
||||||
|
GroupManager.logger.info("Don't forget to configure/mirror this world in config.yml.");
|
||||||
|
} else
|
||||||
|
GroupManager.logger.severe("Failed to configure this world.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -43,7 +43,6 @@ import org.bukkit.event.server.ServerListener;
|
|||||||
import org.bukkit.permissions.Permission;
|
import org.bukkit.permissions.Permission;
|
||||||
import org.bukkit.permissions.PermissionAttachment;
|
import org.bukkit.permissions.PermissionAttachment;
|
||||||
import org.bukkit.permissions.PermissionAttachmentInfo;
|
import org.bukkit.permissions.PermissionAttachmentInfo;
|
||||||
//import org.bukkit.permissions.PermissionAttachmentInfo;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
|
|
||||||
@ -93,7 +92,7 @@ public class BukkitPermissions {
|
|||||||
manager.registerEvent(Event.Type.PLUGIN_DISABLE, serverListener, Event.Priority.Normal, plugin);
|
manager.registerEvent(Event.Type.PLUGIN_DISABLE, serverListener, Event.Priority.Normal, plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void collectPermissions() {
|
public void collectPermissions() {
|
||||||
registeredPermissions.clear();
|
registeredPermissions.clear();
|
||||||
for (Plugin bukkitPlugin : Bukkit.getServer().getPluginManager().getPlugins()) {
|
for (Plugin bukkitPlugin : Bukkit.getServer().getPluginManager().getPlugins()) {
|
||||||
for(Permission permission : bukkitPlugin.getDescription().getPermissions())
|
for(Permission permission : bukkitPlugin.getDescription().getPermissions())
|
||||||
@ -134,8 +133,8 @@ public class BukkitPermissions {
|
|||||||
Boolean value;
|
Boolean value;
|
||||||
for (Permission permission : registeredPermissions) {
|
for (Permission permission : registeredPermissions) {
|
||||||
value = worldData.getPermissionsHandler().checkUserPermission(user, permission.getName());
|
value = worldData.getPermissionsHandler().checkUserPermission(user, permission.getName());
|
||||||
|
if (value == true)
|
||||||
attachment.setPermission(permission, value);
|
attachment.setPermission(permission, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add any missing permissions for this player (non bukkit plugins)
|
// Add any missing permissions for this player (non bukkit plugins)
|
||||||
@ -199,7 +198,7 @@ public class BukkitPermissions {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayerPortal(PlayerPortalEvent event) { // will portal into another world
|
public void onPlayerPortal(PlayerPortalEvent event) { // will portal into another world
|
||||||
if(!event.getFrom().getWorld().equals(event.getTo().getWorld())){ // only if world actually changed
|
if(event.getTo() != null && !event.getFrom().getWorld().equals(event.getTo().getWorld())){ // only if world actually changed
|
||||||
updatePermissions(event.getPlayer(), event.getTo().getWorld().getName());
|
updatePermissions(event.getPlayer(), event.getTo().getWorld().getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -211,7 +210,7 @@ public class BukkitPermissions {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayerTeleport(PlayerTeleportEvent event) { // can be teleported into another world
|
public void onPlayerTeleport(PlayerTeleportEvent event) { // can be teleported into another world
|
||||||
if (!event.getFrom().getWorld().equals(event.getTo().getWorld())) { // only if world actually changed
|
if (event.getTo() != null && !event.getFrom().getWorld().equals(event.getTo().getWorld())) { // only if world actually changed
|
||||||
updatePermissions(event.getPlayer(), event.getTo().getWorld().getName());
|
updatePermissions(event.getPlayer(), event.getTo().getWorld().getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user