Skip to content

Commit

Permalink
修复list的各种问题。
Browse files Browse the repository at this point in the history
  • Loading branch information
yueyinqiu committed Jul 2, 2020
1 parent 7b187e1 commit 8863fcb
Show file tree
Hide file tree
Showing 5 changed files with 150 additions and 29 deletions.
37 changes: 27 additions & 10 deletions NWorldPermissions/res/messages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ messages:
worlds:
help: |
&r&3> Hello, {senderName}&r&3! You can try these commands.
/wp config add <world_name> -- To make a world controlled.
/wp config remove <world_name> -- To make a world uncontrolled.
/wp worlds add <world_name> -- To make a world controlled.
/wp worlds remove <world_name> -- To make a world uncontrolled.
/wp worlds list -- To list all controlled worlds.
# Available Arg(s): {senderName}.
add:
already-controlled: |
Expand All @@ -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: |
Expand Down Expand Up @@ -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:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import top.nololiyt.worldpermissions.entities.StringPair;

import java.io.IOException;
import java.util.Set;

public class ListExecutor extends Executor
{
Expand All @@ -34,23 +35,43 @@ protected boolean run(int layer, RootPlugin rootPlugin, DotDividedStringBuilder
{
MessagesManager messagesManager = rootPlugin.getMessagesManager();

Set<String> 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);
}

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());
Expand Down
Original file line number Diff line number Diff line change
@@ -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<String> 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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
public class WorldsRouter extends Router
{
protected final static String layerName = "worlds";

@Override
protected String permissionName()
{
Expand All @@ -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.
Expand All @@ -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;
}
Expand Down

0 comments on commit 8863fcb

Please # to comment.