diff --git a/NWorldPermissions/res/messages.yml b/NWorldPermissions/res/messages.yml index 0f6d2d6..77b29d4 100644 --- a/NWorldPermissions/res/messages.yml +++ b/NWorldPermissions/res/messages.yml @@ -13,8 +13,9 @@ messages: worlds: help: | &r&3> Hello, {senderName}&r&3! You can try these commands. - /wp config add -- To make a world controlled. - /wp config remove -- To make a world uncontrolled. + /wp worlds add -- To make a world controlled. + /wp worlds remove -- To make a world uncontrolled. + /wp worlds list -- To list all controlled worlds. # Available Arg(s): {senderName}. add: already-controlled: | @@ -33,6 +34,19 @@ messages: completed: | &r&3> Well, {senderName}&r&3, world '{worldName}' has been uncontrolled now. # Available Arg(s): {senderName}, {worldName}. + list: + list: + # The following 3 messages will get jointed together before being sent. + # They will be jointed as "{beginning}{mark1}{separator}{mark2}{separator}...{markX}{ending}". + # The blank characters will be jointed as they are, expect the ones at the beginning of "beginning" and at the end of "ending". + beginning: "&r&3> Well, {senderName}&r&3. There are the controlled worlds:\n&l" + # Available Arg(s): {senderName}. + separator: "\n" + # Available Arg(s): {senderName}. + ending: "\n&r&3That's all." + # Available Arg(s): {senderName}. + zero-worlds-are-controlled: "\n&r&3Oh, {senderName}&r&3! There is no world having been controlled." + # Available Arg(s): {senderName}. tp: help: | @@ -99,14 +113,17 @@ messages: &r&3> Oh, what happened? {senderName}&r&3, a strange power has stopped me removing the mark. # Available Arg(s): {senderName}, {markName}. list: - # The following three messages will get jointed together before being sent. - # They will be jointed as "{beginning}{mark1}{separator}{mark2}{separator}...{markX}{ending}". - # The blank characters will be jointed as they are, expect the ones at the beginning of "beginning" and at the end of "ending". - beginning: "&r&3> Well, {senderName}&r&3. There are the marks:\n" - # Available Arg(s): {senderName}. - separator: "\n" - # Available Arg(s): {senderName}. - ending: "\nThat's all." + list: + # The following 3 messages will get jointed together before being sent. + # They will be jointed as "{beginning}{mark1}{separator}{mark2}{separator}...{markX}{ending}". + # The blank characters will be jointed as they are, expect the ones at the beginning of "beginning" and at the end of "ending". + beginning: "&r&3> Well, {senderName}&r&3. There are the marks:\n&l" + # Available Arg(s): {senderName}. + separator: "\n" + # Available Arg(s): {senderName}. + ending: "\n&r&3That's all." + # Available Arg(s): {senderName}. + zero-marks-have-been-set: "\n&r&3Oh, {senderName}&r&3! There is no mark having been set." # Available Arg(s): {senderName}. reload: diff --git a/NWorldPermissions/src/top/nololiyt/worldpermissions/MessagesManager.java b/NWorldPermissions/src/top/nololiyt/worldpermissions/MessagesManager.java index cfb4d73..8a495a6 100644 --- a/NWorldPermissions/src/top/nololiyt/worldpermissions/MessagesManager.java +++ b/NWorldPermissions/src/top/nololiyt/worldpermissions/MessagesManager.java @@ -32,17 +32,9 @@ public void reloadConfiguration() public void sendMessage(StringPair[] stringPairs, CommandSender target, DotDividedStringBuilder node) { - String key = node.toString(); - String result = configuration.getString(key); - - if (result == null) - { - rootPlugin.getLogger().severe( - "File 'messages.yml' is corrupted and '" + key - + "' is missing."); - return; - } - sendMessage(stringPairs, target, result); + String message = getItem(node); + if (message != null) + sendMessage(stringPairs, target, message); } public void sendMessage(StringPair[] stringPairs, CommandSender target, String message) @@ -60,7 +52,15 @@ public void sendMessage(StringPair[] stringPairs, CommandSender target, String m public String getItem(DotDividedStringBuilder node) { - rootPlugin.getLogger().info(node.toString()); - return configuration.getString(node.toString()); + String key = node.toString(); + String result = configuration.getString(key); + + if (result == null) + { + rootPlugin.getLogger().severe( + "File 'messages.yml' is corrupted and '" + key + + "' is missing."); + } + return result; } } \ No newline at end of file diff --git a/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/marks/ListExecutor.java b/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/marks/ListExecutor.java index 2dbbddc..020390d 100644 --- a/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/marks/ListExecutor.java +++ b/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/marks/ListExecutor.java @@ -10,6 +10,7 @@ import top.nololiyt.worldpermissions.entities.StringPair; import java.io.IOException; +import java.util.Set; public class ListExecutor extends Executor { @@ -34,13 +35,30 @@ protected boolean run(int layer, RootPlugin rootPlugin, DotDividedStringBuilder { MessagesManager messagesManager = rootPlugin.getMessagesManager(); + Set marks = rootPlugin.getMarksManager().allMarksName(); + if (marks.isEmpty()) + { + messagesManager.sendMessage(new StringPair[]{ + StringPair.senderName(commandSender.getName()) + }, commandSender, messageKey.append("zero-marks-have-been-set")); + return true; + } + StringBuilder message = new StringBuilder(); - message.append(messagesManager.getItem( - new DotDividedStringBuilder(messageKey).append("beginning"))); + messageKey.append("list"); + + String beginning = messagesManager.getItem( + new DotDividedStringBuilder(messageKey).append("beginning")); + if (beginning == null) + return true; + message.append(beginning); String separator = messagesManager.getItem( new DotDividedStringBuilder(messageKey).append("separator")); - for (String name : rootPlugin.getMarksManager().allMarksName()) + if (separator == null) + return true; + + for (String name : marks) { message.append(name); message.append(separator); @@ -48,9 +66,12 @@ protected boolean run(int layer, RootPlugin rootPlugin, DotDividedStringBuilder int ml = message.length(); message.delete(ml - separator.length(), ml); - message.append(messagesManager.getItem( - new DotDividedStringBuilder(messageKey).append("ending"))); - + + String ending = messagesManager.getItem(messageKey.append("ending")); + if (ending == null) + return true; + message.append(ending); + messagesManager.sendMessage(new StringPair[]{ StringPair.senderName(commandSender.getName()) }, commandSender, message.toString()); diff --git a/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/worlds/ListExecutor.java b/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/worlds/ListExecutor.java new file mode 100644 index 0000000..fecfb1b --- /dev/null +++ b/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/worlds/ListExecutor.java @@ -0,0 +1,79 @@ +package top.nololiyt.worldpermissions.commands.worlds; + +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.Configuration; +import top.nololiyt.worldpermissions.MessagesManager; +import top.nololiyt.worldpermissions.RootPlugin; +import top.nololiyt.worldpermissions.commands.Executor; +import top.nololiyt.worldpermissions.entities.DotDividedStringBuilder; +import top.nololiyt.worldpermissions.entities.StringPair; + +import java.util.List; + +public class ListExecutor extends Executor +{ + protected final static String layerName = "list"; + + @Override + protected String permissionName() + { + return null; + } + + @Override + protected String messageKey() + { + return layerName; + } + + @Override + protected boolean run(int layer, RootPlugin rootPlugin, DotDividedStringBuilder permission, + DotDividedStringBuilder messageKey, CommandSender commandSender, + String[] args) + { + MessagesManager messagesManager = rootPlugin.getMessagesManager(); + + List worlds = rootPlugin.getConfig().getStringList("controlled-worlds"); + if (worlds.isEmpty()) + { + messagesManager.sendMessage(new StringPair[]{ + StringPair.senderName(commandSender.getName()) + }, commandSender, messageKey.append("zero-worlds-are-controlled")); + return true; + } + + StringBuilder message = new StringBuilder(); + messageKey.append("list"); + + String beginning = messagesManager.getItem( + new DotDividedStringBuilder(messageKey).append("beginning")); + if (beginning == null) + return true; + message.append(beginning); + + String separator = messagesManager.getItem( + new DotDividedStringBuilder(messageKey).append("separator")); + if (separator == null) + return true; + for (String name : worlds) + { + message.append(name); + message.append(separator); + } + + int ml = message.length(); + message.delete(ml - separator.length(), ml); + + String ending = messagesManager.getItem(messageKey.append("ending")); + if (ending == null) + return true; + message.append(ending); + + messagesManager.sendMessage(new StringPair[]{ + StringPair.senderName(commandSender.getName()) + }, commandSender, message.toString()); + return true; + } +} \ No newline at end of file diff --git a/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/worlds/WorldsRouter.java b/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/worlds/WorldsRouter.java index 0b288c0..c62f0a5 100644 --- a/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/worlds/WorldsRouter.java +++ b/NWorldPermissions/src/top/nololiyt/worldpermissions/commands/worlds/WorldsRouter.java @@ -6,6 +6,7 @@ public class WorldsRouter extends Router { protected final static String layerName = "worlds"; + @Override protected String permissionName() { @@ -17,6 +18,7 @@ protected String messageKey() { return layerName; } + /** * Return the next layer matching the arg. * If no layer match it, please return 'null' and the help list will be sent. @@ -33,6 +35,8 @@ protected CommandLayer nextLayer(String arg) return new AddExecutor(); case "remove": return new RemoveExecutor(); + case "list": + return new ListExecutor(); default: return null; }