diff --git a/acf-parent.iml b/acf-parent.iml
index 7436347f..83fb2092 100644
--- a/acf-parent.iml
+++ b/acf-parent.iml
@@ -8,6 +8,6 @@
-
+
\ No newline at end of file
diff --git a/bukkit/acf-bukkit.iml b/bukkit/acf-bukkit.iml
index cd9c9205..5e19d3d6 100644
--- a/bukkit/acf-bukkit.iml
+++ b/bukkit/acf-bukkit.iml
@@ -29,6 +29,6 @@
-
+
\ No newline at end of file
diff --git a/bukkit/src/main/java/co/aikar/commands/BukkitCommandIssuer.java b/bukkit/src/main/java/co/aikar/commands/BukkitCommandIssuer.java
index 30f672c3..3b4556a6 100644
--- a/bukkit/src/main/java/co/aikar/commands/BukkitCommandIssuer.java
+++ b/bukkit/src/main/java/co/aikar/commands/BukkitCommandIssuer.java
@@ -53,8 +53,8 @@ public class BukkitCommandIssuer implements CommandIssuer {
}
@Override
- public void sendMessage(MessageType type, String message) {
- sender.sendMessage(ACFBukkitUtil.color(format(manager, type, message)));
+ public void sendMessageInternal(String message) {
+ sender.sendMessage(ACFBukkitUtil.color(message));
}
@Override
diff --git a/bukkit/src/main/java/co/aikar/commands/BukkitRootCommand.java b/bukkit/src/main/java/co/aikar/commands/BukkitRootCommand.java
index 42c42d65..ccf332d9 100644
--- a/bukkit/src/main/java/co/aikar/commands/BukkitRootCommand.java
+++ b/bukkit/src/main/java/co/aikar/commands/BukkitRootCommand.java
@@ -83,7 +83,6 @@ public class BukkitRootCommand extends Command implements RootCommand {
if (this.defCommand == null || !command.subCommands.get("__default").isEmpty()) {
this.defCommand = command;
this.setPermission(command.permission);
- this.setPermissionMessage(command.permissionMessage);
//this.setDescription(command.getDescription());
//this.setUsage(command.getUsage());
}
diff --git a/bungee/acf-bungee.iml b/bungee/acf-bungee.iml
index 8bcf1ab8..50197d15 100644
--- a/bungee/acf-bungee.iml
+++ b/bungee/acf-bungee.iml
@@ -34,6 +34,6 @@
-
+
\ No newline at end of file
diff --git a/bungee/src/main/java/co/aikar/commands/BungeeCommandIssuer.java b/bungee/src/main/java/co/aikar/commands/BungeeCommandIssuer.java
index c43b22fc..bd0746b7 100644
--- a/bungee/src/main/java/co/aikar/commands/BungeeCommandIssuer.java
+++ b/bungee/src/main/java/co/aikar/commands/BungeeCommandIssuer.java
@@ -54,8 +54,7 @@ public class BungeeCommandIssuer implements CommandIssuer{
}
@Override
- public void sendMessage(MessageType type, String message) {
- message = format(manager, type, message);
+ public void sendMessageInternal(String message) {
sender.sendMessage(new TextComponent(ACFBungeeUtil.color(message)));
}
diff --git a/core/src/main/java/co/aikar/commands/BaseCommand.java b/core/src/main/java/co/aikar/commands/BaseCommand.java
index ef08c2bf..36395ae3 100644
--- a/core/src/main/java/co/aikar/commands/BaseCommand.java
+++ b/core/src/main/java/co/aikar/commands/BaseCommand.java
@@ -74,7 +74,6 @@ public abstract class BaseCommand {
String commandName;
String usageMessage;
String permission;
- public String permissionMessage = "&cI'm sorry, but you do not have permission to perform this command.";
private ExceptionHandler exceptionHandler = null;
@@ -315,7 +314,7 @@ public abstract class BaseCommand {
public void execute(CommandIssuer issuer, String commandLabel, String[] args) {
if (!this.hasPermission(issuer)) {
- issuer.sendMessage(MessageType.ERROR, permissionMessage);
+ issuer.sendMessage(MessageType.ERROR, MessageKeys.PERMISSION_DENIED);
return;
}
commandLabel = commandLabel.toLowerCase();
@@ -393,7 +392,7 @@ public abstract class BaseCommand {
List sargs = Lists.newArrayList(args);
cmd.invoke(issuer, sargs);
} else {
- issuer.sendMessage(MessageType.ERROR, cmd.scope.permissionMessage);
+ issuer.sendMessage(MessageType.ERROR, MessageKeys.PERMISSION_DENIED);
}
}
@@ -489,7 +488,7 @@ public abstract class BaseCommand {
help(manager.getCommandIssuer(issuer), args);
}
public void help(CommandIssuer issuer, String[] args) {
- issuer.sendMessage(MessageType.ERROR, "&cUnknown Command, please type &f/help");
+ issuer.sendMessage(MessageType.ERROR, MessageKeys.UNKNOWN_COMMAND);
}
public void doHelp(Object issuer, String... args) {
doHelp(manager.getCommandIssuer(issuer), args);
@@ -499,7 +498,10 @@ public abstract class BaseCommand {
}
public void showSyntax(CommandIssuer issuer, RegisteredCommand> cmd) {
- issuer.sendMessage(MessageType.SYNTAX, "Usage: /" + cmd.command + " " + cmd.syntaxText + "");
+ issuer.sendMessage(MessageType.SYNTAX, MessageKeys.INVALID_SYNTAX,
+ "{command}", "/" + cmd.command,
+ "{syntax}", cmd.syntaxText
+ );
}
public boolean hasPermission(Object issuer) {
diff --git a/core/src/main/java/co/aikar/commands/CommandIssuer.java b/core/src/main/java/co/aikar/commands/CommandIssuer.java
index bef9d873..5c4a5d03 100644
--- a/core/src/main/java/co/aikar/commands/CommandIssuer.java
+++ b/core/src/main/java/co/aikar/commands/CommandIssuer.java
@@ -46,7 +46,7 @@ public interface CommandIssuer {
* @param message
*/
default void sendMessage(String message) {
- sendMessage(MessageType.ERROR, message);
+ getManager().sendMessage(this, MessageType.INFO, MessageKeys.INFO_MESSAGE, "{message}", message);
}
/**
@@ -60,13 +60,10 @@ public interface CommandIssuer {
getManager().sendMessage(this, type, key, replacements);
}
- void sendMessage(MessageType type, String message);
-
- default String format(CommandManager manager, MessageType type, String message) {
- MessageFormatter formatter = manager.formatters.get(type);
- if (formatter != null) {
- message = formatter.format(message);
- }
- return message;
- }
+ /**
+ * @deprecated Do not call this, for internal use. Not considered part of the API and may break.
+ * @param message
+ */
+ @Deprecated
+ void sendMessageInternal(String message);
}
diff --git a/core/src/main/java/co/aikar/commands/CommandManager.java b/core/src/main/java/co/aikar/commands/CommandManager.java
index bd5ed2dd..4379465f 100644
--- a/core/src/main/java/co/aikar/commands/CommandManager.java
+++ b/core/src/main/java/co/aikar/commands/CommandManager.java
@@ -157,9 +157,14 @@ abstract class CommandManager {
if (replacements.length > 0) {
message = ACFUtil.replaceStrings(message, replacements);
}
- issuer.sendMessage(type, message);
+ MessageFormatter formatter = formatters.get(type);
+ if (formatter != null) {
+ message = formatter.format(message);
+ }
+ issuer.sendMessageInternal(message);
}
+
public Locale getIssuerLocale(CommandIssuer issuer) {
return getLocales().getDefaultLocale();
}
diff --git a/core/src/main/java/co/aikar/commands/Locales.java b/core/src/main/java/co/aikar/commands/Locales.java
index 57c40a1d..5e6523fe 100644
--- a/core/src/main/java/co/aikar/commands/Locales.java
+++ b/core/src/main/java/co/aikar/commands/Locales.java
@@ -23,6 +23,7 @@
package co.aikar.commands;
+import co.aikar.locales.LanguageTable;
import co.aikar.locales.LocaleManager;
import co.aikar.locales.MessageKey;
import org.jetbrains.annotations.NotNull;
@@ -30,12 +31,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.Locale;
import java.util.Map;
-/**
- * This isn't public yet, still WIP - API will break
- * @deprecated
- */
@SuppressWarnings("WeakerAccess")
-@Deprecated
public class Locales {
private final CommandManager manager;
@@ -44,36 +40,27 @@ public class Locales {
Locales(CommandManager manager) {
this.manager = manager;
this.localeManager = LocaleManager.create(manager::getIssuerLocale);
- this.initializeSystemMessages();
- }
-
- private void initializeSystemMessages() {
- //table.addMessage(MessageKey.FOO, "bar");
- }
-
- /**
- * Changes the default locale to use if the specified language key is missing for the desired locale
- * @param locale
- * @return Previous default locale
- */
- public Locale setDefaultLocale(Locale locale) {
- return localeManager.setDefaultLocale(locale);
+ this.localeManager.addMessageBundle("acf-core", Locale.ENGLISH);
}
public Locale getDefaultLocale() {
- return localeManager.getDefaultLocale();
+ return this.localeManager.getDefaultLocale();
+ }
+
+ public void addMessageBundle(String bundleName, Locale locale) {
+ this.localeManager.addMessageBundle(bundleName, locale);
}
public void addMessages(Locale locale, @NotNull Map messages) {
- localeManager.addMessages(locale, messages);
+ this.localeManager.addMessages(locale, messages);
}
public String addMessage(Locale locale, MessageKey key, String message) {
- return localeManager.addMessage(locale, key, message);
+ return this.localeManager.addMessage(locale, key, message);
}
public String getMessage(CommandIssuer issuer, MessageKey key) {
- String message = localeManager.getMessage(issuer, key);
+ String message = this.localeManager.getMessage(issuer, key);
if (message == null) {
manager.log(LogLevel.ERROR, "Missing Language Key: " + key);
message = "";
diff --git a/core/src/main/java/co/aikar/commands/MessageFormatter.java b/core/src/main/java/co/aikar/commands/MessageFormatter.java
index 5a43b2ab..04d7f87d 100644
--- a/core/src/main/java/co/aikar/commands/MessageFormatter.java
+++ b/core/src/main/java/co/aikar/commands/MessageFormatter.java
@@ -35,20 +35,35 @@ public abstract class MessageFormatter {
private final List colors = new ArrayList<>();
+ @SafeVarargs
public MessageFormatter(C... colors) {
- for (int i = 0; i < colors.length; i++) {
- this.colors.set(i, colors[i]);
- }
+ this.colors.addAll(Arrays.asList(colors));
}
public C setColor(int index, C color) {
- if (this.colors.size() < index) {
- this.colors.addAll(Collections.nCopies(index - this.colors.size(), null));
+ if (index > 0) {
+ index--;
+ } else {
+ index = 0;
+ }
+ if (this.colors.size() <= index) {
+ int needed = index - this.colors.size();
+ if (needed > 0) {
+ this.colors.addAll(Collections.nCopies(needed, null));
+ }
+ colors.add(color);
+ return null;
+ } else {
+ return colors.set(index, color);
}
- return colors.set(index, color);
}
public C getColor(int index) {
+ if (index > 0) {
+ index--;
+ } else {
+ index = 0;
+ }
C color = colors.get(index);
if (color == null) {
color = getDefaultColor();
diff --git a/core/src/main/java/co/aikar/commands/MessageKeys.java b/core/src/main/java/co/aikar/commands/MessageKeys.java
index 11a3817f..cdd2b34d 100644
--- a/core/src/main/java/co/aikar/commands/MessageKeys.java
+++ b/core/src/main/java/co/aikar/commands/MessageKeys.java
@@ -25,6 +25,13 @@ package co.aikar.commands;
import co.aikar.locales.MessageKey;
-public class MessageKeys {
- public static final MessageKey KEY = MessageKey.of("");
+@SuppressWarnings("WeakerAccess")
+public class MessageKeys {
+ public static final MessageKey PERMISSION_DENIED = MessageKey.of("permission_denied");
+ public static final MessageKey ERROR_GENERIC_LOGGED = MessageKey.of("error_generic_logged");
+ public static final MessageKey UNKNOWN_COMMAND = MessageKey.of("unknown_command");
+ public static final MessageKey INVALID_SYNTAX = MessageKey.of("invalid_syntax");
+ public static final MessageKey ERROR_PREFIX = MessageKey.of("error_prefix");
+ public static final MessageKey ERROR_PERFORMING_COMMAND = MessageKey.of("error_performing_command");
+ public static final MessageKey INFO_MESSAGE = MessageKey.of("info_message");
}
diff --git a/core/src/main/java/co/aikar/commands/MessageType.java b/core/src/main/java/co/aikar/commands/MessageType.java
index b50d297b..0550b6e3 100644
--- a/core/src/main/java/co/aikar/commands/MessageType.java
+++ b/core/src/main/java/co/aikar/commands/MessageType.java
@@ -27,11 +27,13 @@ import java.util.concurrent.atomic.AtomicInteger;
@SuppressWarnings("WeakerAccess")
public class MessageType {
+ private static final AtomicInteger counter = new AtomicInteger(1);
+
public static MessageType INFO = new MessageType();
public static MessageType SYNTAX = new MessageType();
public static MessageType ERROR = new MessageType();
- private static final AtomicInteger counter = new AtomicInteger();
+
private final int id = counter.getAndIncrement();
public int hashCode() {
diff --git a/core/src/main/java/co/aikar/commands/RegisteredCommand.java b/core/src/main/java/co/aikar/commands/RegisteredCommand.java
index bfeaff70..48a10043 100644
--- a/core/src/main/java/co/aikar/commands/RegisteredCommand.java
+++ b/core/src/main/java/co/aikar/commands/RegisteredCommand.java
@@ -154,7 +154,7 @@ public class RegisteredCommand /help
+invalid_syntax = Usage: {command} {syntax}
+error_prefix = Error: {message}
+error_performing_command = I'm sorry, but there was an error performing this command.
+info_message = {message}
diff --git a/example/acf-example.iml b/example/acf-example.iml
index a6b5d1a6..1272a5b2 100644
--- a/example/acf-example.iml
+++ b/example/acf-example.iml
@@ -36,8 +36,8 @@
+
-
\ No newline at end of file
diff --git a/example/src/main/java/co/aikar/acfexample/ACFExample.java b/example/src/main/java/co/aikar/acfexample/ACFExample.java
index 0ab0efeb..2f27346d 100644
--- a/example/src/main/java/co/aikar/acfexample/ACFExample.java
+++ b/example/src/main/java/co/aikar/acfexample/ACFExample.java
@@ -24,6 +24,7 @@
package co.aikar.acfexample;
import co.aikar.commands.BukkitCommandManager;
+import co.aikar.commands.MessageKeys;
import co.aikar.commands.MessageType;
import com.google.common.collect.Lists;
import org.bukkit.plugin.java.JavaPlugin;
@@ -48,7 +49,7 @@ public final class ACFExample extends JavaPlugin {
));
commandManager.registerCommand(new SomeCommand().setExceptionHandler((command, registeredCommand, sender, args, t) -> {
- sender.sendMessage(MessageType.ERROR, "An error occured. This problem has been logged. Sorry for the inconvienence.");
+ sender.sendMessage(MessageType.ERROR, MessageKeys.ERROR_GENERIC_LOGGED);
return true; // mark as handeled, default message will not be send to sender
}));
commandManager.registerCommand(new SomeCommand_ExtraSubs());
diff --git a/paper/acf-paper.iml b/paper/acf-paper.iml
index c0af5632..722fd056 100644
--- a/paper/acf-paper.iml
+++ b/paper/acf-paper.iml
@@ -39,6 +39,6 @@
-
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 267c4c7f..c7e2f969 100644
--- a/pom.xml
+++ b/pom.xml
@@ -110,6 +110,7 @@
org.jetbrains
annotations
13.0
+ provided
diff --git a/sponge/acf-sponge.iml b/sponge/acf-sponge.iml
index a15a7211..bebb68f6 100644
--- a/sponge/acf-sponge.iml
+++ b/sponge/acf-sponge.iml
@@ -41,6 +41,6 @@
-
+
\ No newline at end of file
diff --git a/sponge/src/main/java/co/aikar/commands/SpongeCommandIssuer.java b/sponge/src/main/java/co/aikar/commands/SpongeCommandIssuer.java
index af4fe985..c9697276 100644
--- a/sponge/src/main/java/co/aikar/commands/SpongeCommandIssuer.java
+++ b/sponge/src/main/java/co/aikar/commands/SpongeCommandIssuer.java
@@ -56,8 +56,7 @@ public class SpongeCommandIssuer implements CommandIssuer {
}
@Override
- public void sendMessage(MessageType type, String message) {
- message = format(manager, type, message);
+ public void sendMessageInternal(String message) {
this.source.sendMessage(TextSerializers.LEGACY_FORMATTING_CODE.deserialize(message));
}