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