mirror of
https://github.com/TotalFreedomMC/TF-EssentialsX.git
synced 2025-02-12 12:23:59 +00:00
Merge branch 'groupmanager' of github.com:essentials/Essentials
This commit is contained in:
commit
2aed3af3c4
3 changed files with 87 additions and 56 deletions
|
@ -152,3 +152,6 @@ v 1.9:
|
||||||
- Expanded '/manuadd'to accept an optional variable for the world (eg '/manuadd <player> <group> <world>').
|
- Expanded '/manuadd'to accept an optional variable for the world (eg '/manuadd <player> <group> <world>').
|
||||||
- Removed some debug spam.
|
- Removed some debug spam.
|
||||||
- Don't remove an attachment on a player leaving as Bukkit never forgets it. This fixes non mirrored permissions being messed up if a player relogs.
|
- Don't remove an attachment on a player leaving as Bukkit never forgets it. This fixes non mirrored permissions being messed up if a player relogs.
|
||||||
|
- Treat all world names as lower case for file handling (please check in your worlds folder. You should have no folders with upper case letters from now).
|
||||||
|
- Auto rename all case sensitive world folders to lower case (if possible).
|
||||||
|
- Update GlobalGroups.yml for new/changed Towny permission nodes.
|
|
@ -181,47 +181,47 @@ groups:
|
||||||
- towny.nation.*
|
- towny.nation.*
|
||||||
- towny.chat.tc
|
- towny.chat.tc
|
||||||
- towny.chat.nc
|
- towny.chat.nc
|
||||||
- towny.wild.block.6.build
|
- towny.wild.build.6
|
||||||
- towny.wild.block.6.destroy
|
- towny.wild.destroy.6
|
||||||
- towny.wild.block.14.destroy
|
- towny.wild.destroy.14
|
||||||
- towny.wild.block.15.destroy
|
- towny.wild.destroy.15
|
||||||
- towny.wild.block.16.destroy
|
- towny.wild.destroy.16
|
||||||
- towny.wild.block.17.build
|
- towny.wild.build.17
|
||||||
- towny.wild.block.17.destroy
|
- towny.wild.destroy.17
|
||||||
- towny.wild.block.18.destroy
|
- towny.wild.destroy.18
|
||||||
- towny.wild.block.21.destroy
|
- towny.wild.destroy.21
|
||||||
- towny.wild.block.31.destroy
|
- towny.wild.destroy.31
|
||||||
- towny.wild.block.37.destroy
|
- towny.wild.destroy.37
|
||||||
- towny.wild.block.38.destroy
|
- towny.wild.destroy.38
|
||||||
- towny.wild.block.39.destroy
|
- towny.wild.destroy.39
|
||||||
- towny.wild.block.40.destroy
|
- towny.wild.destroy.40
|
||||||
- towny.wild.block.50.destroy
|
- towny.wild.destroy.50
|
||||||
- towny.wild.block.56.destroy
|
- towny.wild.destroy.56
|
||||||
- towny.wild.block.73.destroy
|
- towny.wild.destroy.73
|
||||||
- towny.wild.block.74.destroy
|
- towny.wild.destroy.74
|
||||||
- towny.wild.block.78.destroy
|
- towny.wild.destroy.78
|
||||||
- towny.wild.block.81.destroy
|
- towny.wild.destroy.81
|
||||||
- towny.wild.block.82.destroy
|
- towny.wild.destroy.82
|
||||||
- towny.wild.block.83.destroy
|
- towny.wild.destroy.83
|
||||||
- towny.wild.block.86.destroy
|
- towny.wild.destroy.86
|
||||||
- towny.wild.block.103.destroy
|
- towny.wild.destroy.103
|
||||||
- towny.wild.block.106.destroy
|
- towny.wild.destroy.106
|
||||||
- towny.wild.block.111.destroy
|
- towny.wild.destroy.111
|
||||||
- towny.wild.block.115.destroy
|
- towny.wild.destroy.115
|
||||||
|
|
||||||
g:towny_moderator:
|
g:towny_moderator:
|
||||||
permissions:
|
permissions:
|
||||||
- towny.chat.mod
|
- towny.chat.mod
|
||||||
- towny.wild.block.64.switch
|
- towny.wild.switch.64
|
||||||
- towny.wild.block.83.build
|
- towny.wild.build.83
|
||||||
- towny.wild.block.86.build
|
- towny.wild.build.86
|
||||||
- towny.wild.block.103.build
|
- towny.wild.build.103
|
||||||
- towny.wild.block.111.build
|
- towny.wild.build.111
|
||||||
- towny.wild.block.115.build
|
- towny.wild.build.115
|
||||||
|
|
||||||
g:towny_admin:
|
g:towny_admin:
|
||||||
permissions:
|
permissions:
|
||||||
- towny.admin
|
- towny.admin
|
||||||
- -towny.wild.block.119.destroy
|
- -towny.wild.destroy.119
|
||||||
- -towny.wild.block.120.destroy
|
- -towny.wild.destroy.120
|
||||||
- towny.chat.admin
|
- towny.chat.admin
|
|
@ -106,7 +106,12 @@ public class WorldsHolder {
|
||||||
if (!worldsData.containsKey(folder.getName().toLowerCase())
|
if (!worldsData.containsKey(folder.getName().toLowerCase())
|
||||||
&& ((!mirrorsGroup.containsKey(folder.getName().toLowerCase()))
|
&& ((!mirrorsGroup.containsKey(folder.getName().toLowerCase()))
|
||||||
|| (!mirrorsUser.containsKey(folder.getName().toLowerCase())))) {
|
|| (!mirrorsUser.containsKey(folder.getName().toLowerCase())))) {
|
||||||
loadWorld(folder.getName());
|
/*
|
||||||
|
* Call setupWorldFolder to check case sensitivity
|
||||||
|
* and convert to lower case, before we attempt to load this world.
|
||||||
|
*/
|
||||||
|
setupWorldFolder(folder.getName());
|
||||||
|
loadWorld(folder.getName().toLowerCase());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -362,9 +367,10 @@ public class WorldsHolder {
|
||||||
* @return updated world holder
|
* @return updated world holder
|
||||||
*/
|
*/
|
||||||
private OverloadedWorldHolder getUpdatedWorldData(String worldName) {
|
private OverloadedWorldHolder getUpdatedWorldData(String worldName) {
|
||||||
|
String worldNameLowered = worldName.toLowerCase();
|
||||||
|
|
||||||
if (worldsData.containsKey(worldName.toLowerCase())) {
|
if (worldsData.containsKey(worldNameLowered)) {
|
||||||
OverloadedWorldHolder data = worldsData.get(worldName.toLowerCase());
|
OverloadedWorldHolder data = worldsData.get(worldNameLowered);
|
||||||
data.updateDataSource();
|
data.updateDataSource();
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
@ -444,17 +450,34 @@ public class WorldsHolder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setupWorldFolder(String worldName) {
|
public void setupWorldFolder(String worldName) {
|
||||||
|
String worldNameLowered = worldName.toLowerCase();
|
||||||
|
|
||||||
worldsFolder = new File(plugin.getDataFolder(), "worlds");
|
worldsFolder = new File(plugin.getDataFolder(), "worlds");
|
||||||
if (!worldsFolder.exists()) {
|
if (!worldsFolder.exists()) {
|
||||||
worldsFolder.mkdirs();
|
worldsFolder.mkdirs();
|
||||||
}
|
}
|
||||||
|
|
||||||
File defaultWorldFolder = new File(worldsFolder, worldName);
|
File defaultWorldFolder = new File(worldsFolder, worldNameLowered);
|
||||||
if ((!defaultWorldFolder.exists()) && ((!mirrorsGroup.containsKey(worldName.toLowerCase()))) || (!mirrorsUser.containsKey(worldName.toLowerCase()))) {
|
if ((!defaultWorldFolder.exists()) && ((!mirrorsGroup.containsKey(worldNameLowered))) || (!mirrorsUser.containsKey(worldNameLowered))) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* check and convert all old case sensitive folders to lower case
|
||||||
|
*/
|
||||||
|
File casedWorldFolder = new File(worldsFolder, worldName);
|
||||||
|
if ((casedWorldFolder.exists()) && (casedWorldFolder.getName().toLowerCase().equals(worldNameLowered))) {
|
||||||
|
/*
|
||||||
|
* Rename the old folder to the new lower cased format
|
||||||
|
*/
|
||||||
|
casedWorldFolder.renameTo(new File(worldsFolder, worldNameLowered));
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Else we just create the folder
|
||||||
|
*/
|
||||||
defaultWorldFolder.mkdirs();
|
defaultWorldFolder.mkdirs();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (defaultWorldFolder.exists()) {
|
if (defaultWorldFolder.exists()) {
|
||||||
if (!mirrorsGroup.containsKey(worldName.toLowerCase())) {
|
if (!mirrorsGroup.containsKey(worldNameLowered)) {
|
||||||
File groupsFile = new File(defaultWorldFolder, "groups.yml");
|
File groupsFile = new File(defaultWorldFolder, "groups.yml");
|
||||||
if (!groupsFile.exists() || groupsFile.length() == 0) {
|
if (!groupsFile.exists() || groupsFile.length() == 0) {
|
||||||
|
|
||||||
|
@ -467,7 +490,7 @@ public class WorldsHolder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mirrorsUser.containsKey(worldName.toLowerCase())) {
|
if (!mirrorsUser.containsKey(worldNameLowered)) {
|
||||||
File usersFile = new File(defaultWorldFolder, "users.yml");
|
File usersFile = new File(defaultWorldFolder, "users.yml");
|
||||||
if (!usersFile.exists() || usersFile.length() == 0) {
|
if (!usersFile.exists() || usersFile.length() == 0) {
|
||||||
|
|
||||||
|
@ -485,13 +508,15 @@ public class WorldsHolder {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copies the specified world data to another world
|
* Copies the specified world data to another world
|
||||||
|
*
|
||||||
* @param fromWorld
|
* @param fromWorld
|
||||||
* @param toWorld
|
* @param toWorld
|
||||||
* @return true if successfully copied.
|
* @return true if successfully copied.
|
||||||
*/
|
*/
|
||||||
public boolean cloneWorld(String fromWorld, String toWorld) {
|
public boolean cloneWorld(String fromWorld, String toWorld) {
|
||||||
File fromWorldFolder = new File(worldsFolder, fromWorld);
|
|
||||||
File toWorldFolder = new File(worldsFolder, toWorld);
|
File fromWorldFolder = new File(worldsFolder, fromWorld.toLowerCase());
|
||||||
|
File toWorldFolder = new File(worldsFolder, toWorld.toLowerCase());
|
||||||
if (toWorldFolder.exists() || !fromWorldFolder.exists()) {
|
if (toWorldFolder.exists() || !fromWorldFolder.exists()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -530,17 +555,20 @@ public class WorldsHolder {
|
||||||
* @param worldName
|
* @param worldName
|
||||||
*/
|
*/
|
||||||
public void loadWorld(String worldName, Boolean isMirror) {
|
public void loadWorld(String worldName, Boolean isMirror) {
|
||||||
if (worldsData.containsKey(worldName.toLowerCase())) {
|
|
||||||
worldsData.get(worldName.toLowerCase()).reload();
|
String worldNameLowered = worldName.toLowerCase();
|
||||||
|
|
||||||
|
if (worldsData.containsKey(worldNameLowered)) {
|
||||||
|
worldsData.get(worldNameLowered).reload();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
GroupManager.logger.finest("Trying to load world " + worldName + "...");
|
GroupManager.logger.finest("Trying to load world " + worldName + "...");
|
||||||
File thisWorldFolder = new File(worldsFolder, worldName);
|
File thisWorldFolder = new File(worldsFolder, worldNameLowered);
|
||||||
if ((isMirror) || (thisWorldFolder.exists() && thisWorldFolder.isDirectory())) {
|
if ((isMirror) || (thisWorldFolder.exists() && thisWorldFolder.isDirectory())) {
|
||||||
|
|
||||||
// Setup file handles, if not mirrored
|
// Setup file handles, if not mirrored
|
||||||
File groupsFile = (mirrorsGroup.containsKey(worldName.toLowerCase()))? null : new File(thisWorldFolder, "groups.yml");
|
File groupsFile = (mirrorsGroup.containsKey(worldNameLowered))? null : new File(thisWorldFolder, "groups.yml");
|
||||||
File usersFile = (mirrorsUser.containsKey(worldName.toLowerCase()))? null : new File(thisWorldFolder, "users.yml");
|
File usersFile = (mirrorsUser.containsKey(worldNameLowered))? null : new File(thisWorldFolder, "users.yml");
|
||||||
|
|
||||||
if ((groupsFile != null) && (!groupsFile.exists())) {
|
if ((groupsFile != null) && (!groupsFile.exists())) {
|
||||||
throw new IllegalArgumentException("Groups file for world '" + worldName + "' doesnt exist: " + groupsFile.getPath());
|
throw new IllegalArgumentException("Groups file for world '" + worldName + "' doesnt exist: " + groupsFile.getPath());
|
||||||
|
@ -552,14 +580,14 @@ public class WorldsHolder {
|
||||||
WorldDataHolder tempHolder = new WorldDataHolder(worldName);
|
WorldDataHolder tempHolder = new WorldDataHolder(worldName);
|
||||||
|
|
||||||
// Map the group object for any mirror
|
// Map the group object for any mirror
|
||||||
if (mirrorsGroup.containsKey(worldName.toLowerCase()))
|
if (mirrorsGroup.containsKey(worldNameLowered))
|
||||||
tempHolder.setGroupsObject(this.getWorldData(mirrorsGroup.get(worldName.toLowerCase())).getGroupsObject());
|
tempHolder.setGroupsObject(this.getWorldData(mirrorsGroup.get(worldNameLowered)).getGroupsObject());
|
||||||
else
|
else
|
||||||
tempHolder.loadGroups(groupsFile);
|
tempHolder.loadGroups(groupsFile);
|
||||||
|
|
||||||
// Map the user object for any mirror
|
// Map the user object for any mirror
|
||||||
if (mirrorsUser.containsKey(worldName.toLowerCase()))
|
if (mirrorsUser.containsKey(worldNameLowered))
|
||||||
tempHolder.setUsersObject(this.getWorldData(mirrorsUser.get(worldName.toLowerCase())).getUsersObject());
|
tempHolder.setUsersObject(this.getWorldData(mirrorsUser.get(worldNameLowered)).getUsersObject());
|
||||||
else
|
else
|
||||||
tempHolder.loadUsers(usersFile);
|
tempHolder.loadUsers(usersFile);
|
||||||
|
|
||||||
|
@ -573,7 +601,7 @@ public class WorldsHolder {
|
||||||
|
|
||||||
if (thisWorldData != null) {
|
if (thisWorldData != null) {
|
||||||
GroupManager.logger.finest("Successful load of world " + worldName + "...");
|
GroupManager.logger.finest("Successful load of world " + worldName + "...");
|
||||||
worldsData.put(worldName.toLowerCase(), thisWorldData);
|
worldsData.put(worldNameLowered, thisWorldData);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue