diff --git a/src/main/java/fr/xephi/authme/command/help/HelpMessageKey.java b/src/main/java/fr/xephi/authme/command/help/HelpMessage.java
similarity index 62%
rename from src/main/java/fr/xephi/authme/command/help/HelpMessageKey.java
rename to src/main/java/fr/xephi/authme/command/help/HelpMessage.java
index dbd6b7939..0c9404368 100644
--- a/src/main/java/fr/xephi/authme/command/help/HelpMessageKey.java
+++ b/src/main/java/fr/xephi/authme/command/help/HelpMessage.java
@@ -4,15 +4,7 @@ package fr.xephi.authme.command.help;
* Common, non-generic keys for messages used when showing command help.
* All keys are prefixed with {@code common}.
*/
-public enum HelpMessageKey {
-
- SHORT_DESCRIPTION("description.short"),
-
- DETAILED_DESCRIPTION("description.detailed"),
-
- USAGE("usage"),
-
- ARGUMENTS("arguments"),
+public enum HelpMessage {
OPTIONAL("optional"),
@@ -20,15 +12,9 @@ public enum HelpMessageKey {
NO_PERMISSION("noPermission"),
- ALTERNATIVES("alternatives"),
-
DEFAULT("default"),
- RESULT("result"),
-
- PERMISSIONS("permissions"),
-
- COMMANDS("commands");
+ RESULT("result");
private final String key;
@@ -38,7 +24,7 @@ public enum HelpMessageKey {
*
* @param key the message key
*/
- HelpMessageKey(String key) {
+ HelpMessage(String key) {
this.key = "common." + key;
}
diff --git a/src/main/java/fr/xephi/authme/command/help/HelpMessagesService.java b/src/main/java/fr/xephi/authme/command/help/HelpMessagesService.java
index db19aa694..caddcc37d 100644
--- a/src/main/java/fr/xephi/authme/command/help/HelpMessagesService.java
+++ b/src/main/java/fr/xephi/authme/command/help/HelpMessagesService.java
@@ -65,8 +65,12 @@ public class HelpMessagesService implements Reloadable {
return builder.build();
}
- public String getMessage(HelpMessageKey key) {
- return messageFileHandler.getMessage(key.getKey());
+ public String getMessage(HelpMessage message) {
+ return messageFileHandler.getMessage(message.getKey());
+ }
+
+ public String getMessage(HelpSection section) {
+ return messageFileHandler.getMessage(section.getKey());
}
public String getMessage(DefaultPermission defaultPermission) {
diff --git a/src/main/java/fr/xephi/authme/command/help/HelpProvider.java b/src/main/java/fr/xephi/authme/command/help/HelpProvider.java
index 55432e813..cdcd43262 100644
--- a/src/main/java/fr/xephi/authme/command/help/HelpProvider.java
+++ b/src/main/java/fr/xephi/authme/command/help/HelpProvider.java
@@ -19,8 +19,8 @@ import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;
-import static fr.xephi.authme.command.help.HelpMessageKey.DETAILED_DESCRIPTION;
-import static fr.xephi.authme.command.help.HelpMessageKey.SHORT_DESCRIPTION;
+import static fr.xephi.authme.command.help.HelpSection.DETAILED_DESCRIPTION;
+import static fr.xephi.authme.command.help.HelpSection.SHORT_DESCRIPTION;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
@@ -32,16 +32,18 @@ public class HelpProvider implements SettingsDependent {
// --- Bit flags ---
/** Set to not show the command. */
public static final int HIDE_COMMAND = 0x001;
- /** Set to show the detailed description of a command. */
- public static final int SHOW_LONG_DESCRIPTION = 0x002;
+ /** Set to show the description of the command. */
+ public static final int SHOW_DESCRIPTION = 0x002;
+ /** Set to show the detailed description of the command. */
+ public static final int SHOW_LONG_DESCRIPTION = 0x004;
/** Set to include the arguments the command takes. */
- public static final int SHOW_ARGUMENTS = 0x004;
+ public static final int SHOW_ARGUMENTS = 0x008;
/** Set to show the permissions required to execute the command. */
- public static final int SHOW_PERMISSIONS = 0x008;
+ public static final int SHOW_PERMISSIONS = 0x010;
/** Set to show alternative labels for the command. */
- public static final int SHOW_ALTERNATIVES = 0x010;
+ public static final int SHOW_ALTERNATIVES = 0x020;
/** Set to show the child commands of the command. */
- public static final int SHOW_CHILDREN = 0x020;
+ public static final int SHOW_CHILDREN = 0x040;
/** Shortcut for setting all options apart from {@link HelpProvider#HIDE_COMMAND}. */
public static final int ALL_OPTIONS = ~HIDE_COMMAND;
@@ -72,8 +74,18 @@ public class HelpProvider implements SettingsDependent {
if (!hasFlag(HIDE_COMMAND, options)) {
lines.add(ChatColor.GOLD + "Command: " + CommandSyntaxHelper.getSyntax(command, correctLabels));
}
+ if (hasFlag(SHOW_DESCRIPTION, options)) {
+ String description = helpMessagesService.getMessage(SHORT_DESCRIPTION);
+ if (!description.isEmpty()) {
+ lines.add(ChatColor.GOLD + description + ": " + ChatColor.WHITE + command.getDescription());
+ }
+ }
if (hasFlag(SHOW_LONG_DESCRIPTION, options)) {
- printDetailedDescription(command, lines);
+ String description = helpMessagesService.getMessage(DETAILED_DESCRIPTION);
+ if (!description.isEmpty()) {
+ lines.add(ChatColor.GOLD + description + ":");
+ lines.add(ChatColor.WHITE + " " + command.getDetailedDescription());
+ }
}
if (hasFlag(SHOW_ARGUMENTS, options)) {
printArguments(command, lines);
@@ -110,22 +122,18 @@ public class HelpProvider implements SettingsDependent {
helpHeader = settings.getProperty(PluginSettings.HELP_HEADER);
}
- private void printDetailedDescription(CommandDescription command, List lines) {
- lines.add(ChatColor.GOLD + helpMessagesService.getMessage(SHORT_DESCRIPTION) + ": "
- + ChatColor.WHITE + command.getDescription());
-
- lines.add(ChatColor.GOLD + helpMessagesService.getMessage(DETAILED_DESCRIPTION) + ":");
- lines.add(ChatColor.WHITE + " " + command.getDetailedDescription());
- }
-
private void printArguments(CommandDescription command, List lines) {
if (command.getArguments().isEmpty()) {
return;
}
+ String arguments = helpMessagesService.getMessage(HelpSection.ARGUMENTS);
+ if (arguments.isEmpty()) {
+ return;
+ }
- lines.add(ChatColor.GOLD + helpMessagesService.getMessage(HelpMessageKey.ARGUMENTS) + ":");
+ lines.add(ChatColor.GOLD + arguments + ":");
StringBuilder argString = new StringBuilder();
- String optionalText = " (" + helpMessagesService.getMessage(HelpMessageKey.OPTIONAL) + ")";
+ String optionalText = " (" + helpMessagesService.getMessage(HelpMessage.OPTIONAL) + ")";
for (CommandArgumentDescription argument : command.getArguments()) {
argString.setLength(0);
argString.append(" ").append(ChatColor.YELLOW).append(ChatColor.ITALIC).append(argument.getName())
@@ -142,8 +150,12 @@ public class HelpProvider implements SettingsDependent {
if (command.getLabels().size() <= 1 || correctLabels.size() <= 1) {
return;
}
+ String alternatives = helpMessagesService.getMessage(HelpSection.ALTERNATIVES);
+ if (alternatives.isEmpty()) {
+ return;
+ }
- lines.add(ChatColor.GOLD + helpMessagesService.getMessage(HelpMessageKey.ALTERNATIVES) + ":");
+ lines.add(ChatColor.GOLD + alternatives + ":");
// Get the label used
final String parentLabel = correctLabels.get(0);
final String childLabel = correctLabels.get(1);
@@ -158,10 +170,11 @@ public class HelpProvider implements SettingsDependent {
private void printPermissions(CommandDescription command, CommandSender sender, List lines) {
PermissionNode permission = command.getPermission();
- if (permission == null) {
+ String permissionsTitle = helpMessagesService.getMessage(HelpSection.PERMISSIONS);
+ if (permission == null || permissionsTitle.isEmpty()) {
return;
}
- lines.add(ChatColor.GOLD + helpMessagesService.getMessage(HelpMessageKey.PERMISSIONS) + ":");
+ lines.add(ChatColor.GOLD + permissionsTitle + ":");
boolean hasPermission = permissionsManager.hasPermission(sender, permission);
lines.add(String.format(" " + ChatColor.YELLOW + ChatColor.ITALIC + "%s" + ChatColor.GRAY + " (%s)",
@@ -173,7 +186,7 @@ public class HelpProvider implements SettingsDependent {
if (DefaultPermission.OP_ONLY.equals(defaultPermission)) {
addendum = " (" + getLocalPermissionText(defaultPermission.evaluate(sender)) + ")";
}
- lines.add(ChatColor.GOLD + helpMessagesService.getMessage(HelpMessageKey.DEFAULT) + ": "
+ lines.add(ChatColor.GOLD + helpMessagesService.getMessage(HelpMessage.DEFAULT) + ": "
+ ChatColor.GRAY + ChatColor.ITALIC + helpMessagesService.getMessage(defaultPermission) + addendum);
// Evaluate if the sender has permission to the command
@@ -187,14 +200,14 @@ public class HelpProvider implements SettingsDependent {
permissionText = getLocalPermissionText(false);
}
lines.add(String.format(ChatColor.GOLD + " %s: %s" + ChatColor.ITALIC + "%s",
- helpMessagesService.getMessage(HelpMessageKey.RESULT), permissionColor, permissionText));
+ helpMessagesService.getMessage(HelpMessage.RESULT), permissionColor, permissionText));
}
private String getLocalPermissionText(boolean hasPermission) {
if (hasPermission) {
- return helpMessagesService.getMessage(HelpMessageKey.HAS_PERMISSION);
+ return helpMessagesService.getMessage(HelpMessage.HAS_PERMISSION);
}
- return helpMessagesService.getMessage(HelpMessageKey.NO_PERMISSION);
+ return helpMessagesService.getMessage(HelpMessage.NO_PERMISSION);
}
private void printChildren(CommandDescription command, List parentLabels, List lines) {
@@ -202,7 +215,7 @@ public class HelpProvider implements SettingsDependent {
return;
}
- lines.add(ChatColor.GOLD + helpMessagesService.getMessage(HelpMessageKey.COMMANDS) + ":");
+ lines.add(ChatColor.GOLD + helpMessagesService.getMessage(HelpSection.COMMANDS) + ":");
String parentCommandPath = String.join(" ", parentLabels);
for (CommandDescription child : command.getChildren()) {
lines.add(" /" + parentCommandPath + " " + child.getLabels().get(0)
diff --git a/src/main/java/fr/xephi/authme/command/help/HelpSection.java b/src/main/java/fr/xephi/authme/command/help/HelpSection.java
new file mode 100644
index 000000000..4326aab3e
--- /dev/null
+++ b/src/main/java/fr/xephi/authme/command/help/HelpSection.java
@@ -0,0 +1,38 @@
+package fr.xephi.authme.command.help;
+
+/**
+ * Translatable sections. Message keys are prefixed by {@code section}.
+ */
+public enum HelpSection {
+
+ SHORT_DESCRIPTION("description.short"),
+
+ DETAILED_DESCRIPTION("description.detailed"),
+
+ USAGE("usage"),
+
+ ARGUMENTS("arguments"),
+
+ ALTERNATIVES("alternatives"),
+
+ PERMISSIONS("permissions"),
+
+ COMMANDS("commands");
+
+
+ private final String key;
+
+ /**
+ * Constructor.
+ *
+ * @param key the message key
+ */
+ HelpSection(String key) {
+ this.key = "section." + key;
+ }
+
+ /** @return the message key */
+ public String getKey() {
+ return key;
+ }
+}
diff --git a/src/main/java/fr/xephi/authme/message/MessageFileHandler.java b/src/main/java/fr/xephi/authme/message/MessageFileHandler.java
index be7f69286..e2f14ff52 100644
--- a/src/main/java/fr/xephi/authme/message/MessageFileHandler.java
+++ b/src/main/java/fr/xephi/authme/message/MessageFileHandler.java
@@ -11,7 +11,7 @@ import java.io.InputStreamReader;
/**
* Handles a YAML message file with a default file fallback.
*/
-public final class MessageFileHandler {
+public class MessageFileHandler {
// regular file
private final String filename;
@@ -78,7 +78,7 @@ public final class MessageFileHandler {
*/
private String getDefault(String key) {
if (defaultConfiguration == null) {
- InputStream stream = Messages.class.getResourceAsStream(defaultFile);
+ InputStream stream = MessageFileHandler.class.getClassLoader().getResourceAsStream(defaultFile);
defaultConfiguration = YamlConfiguration.loadConfiguration(new InputStreamReader(stream));
}
String message = defaultConfiguration.getString(key);
diff --git a/src/main/resources/messages/help_de.yml b/src/main/resources/messages/help_de.yml
index 2ae870fc3..4b2242cc2 100644
--- a/src/main/resources/messages/help_de.yml
+++ b/src/main/resources/messages/help_de.yml
@@ -1,20 +1,21 @@
common:
+ optional: 'Optional'
+ hasPermission: 'Du hast Berechtigung'
+ noPermission: 'Keine Berechtigung'
+ default: 'Default'
+ result: 'Resultat'
+ defaultPermissions:
+ notAllowed: 'Kein Recht'
+ opOnly: 'Nur OP''s'
+ allowed: 'Allen erlaubt'
+section:
description.short: 'Beschreibung'
description.detailed: 'Detaillierte Beschreibung'
usage: 'Gebrauch'
arguments: 'Argumente'
permissions: 'Rechte'
- optional: 'Optional'
- hasPermission: 'Du hast Berechtigung'
- noPermission: 'Keine Berechtigung'
- default: 'Default'
alternatives: 'Alternativen'
- result: 'Resultat'
commands: 'Kommandos'
- defaultPermissions:
- notAllowed: 'Kein Recht'
- opOnly: 'Nur OP''s'
- allowed: 'Allen erlaubt'
commands:
authme.register:
description: 'Registriert einen Benutzer'
diff --git a/src/main/resources/messages/help_en.yml b/src/main/resources/messages/help_en.yml
index 9cb8bb86f..f3c2c8681 100644
--- a/src/main/resources/messages/help_en.yml
+++ b/src/main/resources/messages/help_en.yml
@@ -1,20 +1,21 @@
common:
- description.short: 'Short description'
- description.detailed: 'Detailed description'
- usage: 'Usage'
- arguments: 'Arguments'
- permissions: 'Permissions'
optional: 'Optional'
hasPermission: 'You have permission'
noPermission: 'No permission'
default: 'Default'
- alternatives: 'Alternatives'
result: 'Result'
- commands: 'Commands'
defaultPermissions:
notAllowed: 'No permission'
opOnly: 'OP''s only'
allowed: 'Everyone allowed'
+section:
+ description.short: 'Short description'
+ description.detailed: 'Detailed description'
+ arguments: 'Arguments'
+ permissions: 'Permissions'
+ alternatives: 'Alternatives'
+ commands: 'Commands'
+ usage: 'Usage'
commands:
authme.register:
description: 'Register a player'
diff --git a/src/test/java/fr/xephi/authme/command/help/HelpMessagesConsistencyTest.java b/src/test/java/fr/xephi/authme/command/help/HelpMessagesConsistencyTest.java
index 8a9f03891..7c50829f8 100644
--- a/src/test/java/fr/xephi/authme/command/help/HelpMessagesConsistencyTest.java
+++ b/src/test/java/fr/xephi/authme/command/help/HelpMessagesConsistencyTest.java
@@ -64,9 +64,13 @@ public class HelpMessagesConsistencyTest {
FileConfiguration configuration = YamlConfiguration.loadConfiguration(DEFAULT_MESSAGES_FILE);
// when / then
- for (HelpMessageKey key : HelpMessageKey.values()) {
- assertThat("Default configuration has entry for key '" + key + "'",
- configuration.contains(key.getKey()), equalTo(true));
+ for (HelpMessage message : HelpMessage.values()) {
+ assertThat("Default configuration has entry for message '" + message + "'",
+ configuration.contains(message.getKey()), equalTo(true));
+ }
+ for (HelpSection section : HelpSection.values()) {
+ assertThat("Default configuration has entry for section '" + section + "'",
+ configuration.contains(section.getKey()), equalTo(true));
}
}
diff --git a/src/test/java/fr/xephi/authme/command/help/HelpProviderTest.java b/src/test/java/fr/xephi/authme/command/help/HelpProviderTest.java
index baca3e4df..6adaeb314 100644
--- a/src/test/java/fr/xephi/authme/command/help/HelpProviderTest.java
+++ b/src/test/java/fr/xephi/authme/command/help/HelpProviderTest.java
@@ -32,6 +32,7 @@ import static fr.xephi.authme.command.help.HelpProvider.HIDE_COMMAND;
import static fr.xephi.authme.command.help.HelpProvider.SHOW_ALTERNATIVES;
import static fr.xephi.authme.command.help.HelpProvider.SHOW_ARGUMENTS;
import static fr.xephi.authme.command.help.HelpProvider.SHOW_CHILDREN;
+import static fr.xephi.authme.command.help.HelpProvider.SHOW_DESCRIPTION;
import static fr.xephi.authme.command.help.HelpProvider.SHOW_LONG_DESCRIPTION;
import static fr.xephi.authme.command.help.HelpProvider.SHOW_PERMISSIONS;
import static org.hamcrest.Matchers.contains;
@@ -83,7 +84,7 @@ public class HelpProviderTest {
FoundCommandResult result = newFoundResult(command, Arrays.asList("authme", "login"));
// when
- helpProvider.outputHelp(sender, result, SHOW_LONG_DESCRIPTION);
+ helpProvider.outputHelp(sender, result, SHOW_LONG_DESCRIPTION | SHOW_DESCRIPTION);
// then
List lines = getLines(sender);
@@ -368,7 +369,7 @@ public class HelpProviderTest {
private static void setDefaultHelpMessages(HelpMessagesService helpMessagesService) {
given(helpMessagesService.buildLocalizedDescription(any(CommandDescription.class)))
.willAnswer(new ReturnsArgumentAt(0));
- for (HelpMessageKey key : HelpMessageKey.values()) {
+ for (HelpMessage key : HelpMessage.values()) {
String text = key.name().replace("_", " ").toLowerCase();
given(helpMessagesService.getMessage(key))
.willReturn(text.substring(0, 1).toUpperCase() + text.substring(1));
@@ -378,6 +379,11 @@ public class HelpProviderTest {
given(helpMessagesService.getMessage(permission))
.willReturn(text.substring(0, 1).toUpperCase() + text.substring(1));
}
+ for (HelpSection section : HelpSection.values()) {
+ String text = section.name().replace("_", " ").toLowerCase();
+ given(helpMessagesService.getMessage(section))
+ .willReturn(text.substring(0, 1).toUpperCase() + text.substring(1));
+ }
}
}
diff --git a/src/test/java/fr/xephi/authme/message/MessagesIntegrationTest.java b/src/test/java/fr/xephi/authme/message/MessagesIntegrationTest.java
index 8479c8298..a8ff7ddb2 100644
--- a/src/test/java/fr/xephi/authme/message/MessagesIntegrationTest.java
+++ b/src/test/java/fr/xephi/authme/message/MessagesIntegrationTest.java
@@ -34,7 +34,7 @@ import static org.mockito.Mockito.verify;
public class MessagesIntegrationTest {
private static final String YML_TEST_FILE = TestHelper.PROJECT_ROOT + "message/messages_test.yml";
- private static final String YML_DEFAULT_TEST_FILE = TestHelper.PROJECT_ROOT + "message/messages_default.yml";
+ private static final String YML_DEFAULT_TEST_FILE = "messages/messages_en.yml";
private Messages messages;
@BeforeClass
@@ -201,7 +201,8 @@ public class MessagesIntegrationTest {
String message = messages.retrieveSingle(key);
// then
- assertThat(message, equalTo("Message from default file"));
+ assertThat(message,
+ equalTo("§4Only registered users can join the server! Please visit http://example.com to register yourself!"));
}
@Test
@@ -217,35 +218,6 @@ public class MessagesIntegrationTest {
assertThat(message, equalTo("§cWrong password!"));
}
- @Test
- public void shouldReturnErrorForMissingMessage() {
- // given
- // Key is not present in test file or default file
- MessageKey key = MessageKey.TWO_FACTOR_CREATE;
-
- // when
- String message = messages.retrieveSingle(key);
-
- // then
- assertThat(message, containsString("Error retrieving message"));
- }
-
- @Test
- public void shouldAllowNullAsDefaultFile() {
- // given
- MessageFileHandlerProvider provider =
- providerReturning(TestHelper.getJarFile(YML_TEST_FILE), YML_DEFAULT_TEST_FILE);
- Messages testMessages = new Messages(provider);
- // Key not present in test file
- MessageKey key = MessageKey.TWO_FACTOR_CREATE;
-
- // when
- String message = testMessages.retrieveSingle(key);
-
- // then
- assertThat(message, containsString("Error retrieving message"));
- }
-
@Test
public void shouldRetrieveMessageWithReplacements() {
// given