diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java index e99bc775e..74a49f00b 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java @@ -48,7 +48,6 @@ import com.plotsquared.bukkit.util.BukkitUtil; import com.plotsquared.bukkit.util.BukkitWorld; import com.plotsquared.bukkit.util.SetGenCB; import com.plotsquared.bukkit.util.UpdateUtility; -import com.plotsquared.bukkit.util.task.BukkitTaskManager; import com.plotsquared.bukkit.util.task.PaperTimeConverter; import com.plotsquared.bukkit.util.task.SpigotTimeConverter; import com.plotsquared.bukkit.uuid.BungeePermsUUIDService; @@ -64,7 +63,7 @@ import com.plotsquared.core.backup.BackupManager; import com.plotsquared.core.command.WE_Anywhere; import com.plotsquared.core.components.ComponentPresetManager; import com.plotsquared.core.configuration.Captions; -import com.plotsquared.core.configuration.ChatFormatter; +import com.plotsquared.core.configuration.caption.ChatFormatter; import com.plotsquared.core.configuration.ConfigurationNode; import com.plotsquared.core.configuration.ConfigurationSection; import com.plotsquared.core.configuration.ConfigurationUtil; diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/placeholder/PlaceholderFormatter.java b/Bukkit/src/main/java/com/plotsquared/bukkit/placeholder/PlaceholderFormatter.java index 674d810f2..8efdc3fba 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/placeholder/PlaceholderFormatter.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/placeholder/PlaceholderFormatter.java @@ -26,15 +26,17 @@ package com.plotsquared.bukkit.placeholder; import com.plotsquared.bukkit.player.BukkitPlayer; -import com.plotsquared.core.configuration.ChatFormatter; +import com.plotsquared.core.configuration.caption.ChatFormatter; import com.plotsquared.core.player.PlotPlayer; import me.clip.placeholderapi.PlaceholderAPI; import org.bukkit.entity.Player; +import javax.annotation.Nonnull; + public class PlaceholderFormatter implements ChatFormatter { - @Override public void format(final ChatContext context) { - final PlotPlayer recipient = context.getRecipient(); + @Override public void format(@Nonnull final ChatContext context) { + final PlotPlayer recipient = context.getRecipient(); if (recipient instanceof BukkitPlayer) { if (context.isRawOutput()) { context.setMessage(context.getMessage().replace('%', '\u2010')); diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitUtil.java b/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitUtil.java index 1c989afe3..8c110157c 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitUtil.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitUtil.java @@ -31,7 +31,7 @@ import com.plotsquared.bukkit.BukkitPlatform; import com.plotsquared.bukkit.player.BukkitPlayer; import com.plotsquared.bukkit.player.BukkitPlayerManager; import com.plotsquared.core.PlotSquared; -import com.plotsquared.core.configuration.Caption; +import com.plotsquared.core.configuration.caption.Caption; import com.plotsquared.core.configuration.caption.LocaleHolder; import com.plotsquared.core.location.Location; import com.plotsquared.core.player.PlotPlayer; diff --git a/Core/src/main/java/com/plotsquared/core/PlotAPI.java b/Core/src/main/java/com/plotsquared/core/PlotAPI.java index 3fa983e7d..9a1b290e7 100644 --- a/Core/src/main/java/com/plotsquared/core/PlotAPI.java +++ b/Core/src/main/java/com/plotsquared/core/PlotAPI.java @@ -25,7 +25,7 @@ */ package com.plotsquared.core; -import com.plotsquared.core.configuration.Caption; +import com.plotsquared.core.configuration.caption.Caption; import com.plotsquared.core.configuration.Captions; import com.plotsquared.core.location.Location; import com.plotsquared.core.player.PlotPlayer; diff --git a/Core/src/main/java/com/plotsquared/core/command/Auto.java b/Core/src/main/java/com/plotsquared/core/command/Auto.java index 1d5c1d7c9..3d7c595e7 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Auto.java +++ b/Core/src/main/java/com/plotsquared/core/command/Auto.java @@ -29,7 +29,7 @@ import com.google.common.collect.Lists; import com.google.common.primitives.Ints; import com.google.inject.Inject; import com.plotsquared.core.PlotSquared; -import com.plotsquared.core.configuration.CaptionUtility; +import com.plotsquared.core.configuration.caption.CaptionUtility; import com.plotsquared.core.configuration.Captions; import com.plotsquared.core.configuration.Settings; import com.plotsquared.core.configuration.caption.TranslatableCaption; diff --git a/Core/src/main/java/com/plotsquared/core/command/Claim.java b/Core/src/main/java/com/plotsquared/core/command/Claim.java index 43686fd3c..27d601db1 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Claim.java +++ b/Core/src/main/java/com/plotsquared/core/command/Claim.java @@ -27,7 +27,7 @@ package com.plotsquared.core.command; import com.google.common.primitives.Ints; import com.google.inject.Inject; -import com.plotsquared.core.configuration.CaptionUtility; +import com.plotsquared.core.configuration.caption.CaptionUtility; import com.plotsquared.core.configuration.Captions; import com.plotsquared.core.configuration.Settings; import com.plotsquared.core.configuration.caption.TranslatableCaption; diff --git a/Core/src/main/java/com/plotsquared/core/command/Command.java b/Core/src/main/java/com/plotsquared/core/command/Command.java index 88d9f9007..680750280 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Command.java +++ b/Core/src/main/java/com/plotsquared/core/command/Command.java @@ -25,9 +25,9 @@ */ package com.plotsquared.core.command; -import com.plotsquared.core.configuration.Caption; +import com.plotsquared.core.configuration.caption.Caption; import com.plotsquared.core.configuration.Captions; -import com.plotsquared.core.configuration.StaticCaption; +import com.plotsquared.core.configuration.caption.StaticCaption; import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.util.MainUtil; diff --git a/Core/src/main/java/com/plotsquared/core/command/CommandCaller.java b/Core/src/main/java/com/plotsquared/core/command/CommandCaller.java index 963202eb6..4d1047310 100644 --- a/Core/src/main/java/com/plotsquared/core/command/CommandCaller.java +++ b/Core/src/main/java/com/plotsquared/core/command/CommandCaller.java @@ -25,7 +25,7 @@ */ package com.plotsquared.core.command; -import com.plotsquared.core.configuration.Caption; +import com.plotsquared.core.configuration.caption.Caption; import net.kyori.adventure.text.minimessage.Template; import javax.annotation.Nonnull; diff --git a/Core/src/main/java/com/plotsquared/core/command/CommandCategory.java b/Core/src/main/java/com/plotsquared/core/command/CommandCategory.java index cc89d5788..5df126945 100644 --- a/Core/src/main/java/com/plotsquared/core/command/CommandCategory.java +++ b/Core/src/main/java/com/plotsquared/core/command/CommandCategory.java @@ -25,7 +25,7 @@ */ package com.plotsquared.core.command; -import com.plotsquared.core.configuration.Caption; +import com.plotsquared.core.configuration.caption.Caption; import com.plotsquared.core.configuration.Captions; import com.plotsquared.core.configuration.caption.LocaleHolder; diff --git a/Core/src/main/java/com/plotsquared/core/command/FlagCommand.java b/Core/src/main/java/com/plotsquared/core/command/FlagCommand.java index 17c3ca605..96ae966be 100644 --- a/Core/src/main/java/com/plotsquared/core/command/FlagCommand.java +++ b/Core/src/main/java/com/plotsquared/core/command/FlagCommand.java @@ -26,7 +26,7 @@ package com.plotsquared.core.command; import com.plotsquared.core.PlotSquared; -import com.plotsquared.core.configuration.CaptionUtility; +import com.plotsquared.core.configuration.caption.CaptionUtility; import com.plotsquared.core.configuration.Captions; import com.plotsquared.core.configuration.Settings; import com.plotsquared.core.configuration.caption.TranslatableCaption; diff --git a/Core/src/main/java/com/plotsquared/core/command/Grant.java b/Core/src/main/java/com/plotsquared/core/command/Grant.java index 73a5435bd..e1e835a94 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Grant.java +++ b/Core/src/main/java/com/plotsquared/core/command/Grant.java @@ -27,7 +27,7 @@ package com.plotsquared.core.command; import com.google.common.primitives.Ints; import com.plotsquared.core.PlotSquared; -import com.plotsquared.core.configuration.CaptionUtility; +import com.plotsquared.core.configuration.caption.CaptionUtility; import com.plotsquared.core.configuration.Captions; import com.plotsquared.core.database.DBFunc; import com.plotsquared.core.player.PlotPlayer; diff --git a/Core/src/main/java/com/plotsquared/core/command/RequiredType.java b/Core/src/main/java/com/plotsquared/core/command/RequiredType.java index f44f37bbf..c474680f6 100644 --- a/Core/src/main/java/com/plotsquared/core/command/RequiredType.java +++ b/Core/src/main/java/com/plotsquared/core/command/RequiredType.java @@ -25,8 +25,8 @@ */ package com.plotsquared.core.command; -import com.plotsquared.core.configuration.Caption; -import com.plotsquared.core.configuration.StaticCaption; +import com.plotsquared.core.configuration.caption.Caption; +import com.plotsquared.core.configuration.caption.StaticCaption; import com.plotsquared.core.configuration.caption.TranslatableCaption; import javax.annotation.Nonnull; diff --git a/Core/src/main/java/com/plotsquared/core/command/Set.java b/Core/src/main/java/com/plotsquared/core/command/Set.java index d88506453..5f78416b6 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Set.java +++ b/Core/src/main/java/com/plotsquared/core/command/Set.java @@ -27,7 +27,7 @@ package com.plotsquared.core.command; import com.google.inject.Inject; import com.plotsquared.core.backup.BackupManager; -import com.plotsquared.core.configuration.CaptionUtility; +import com.plotsquared.core.configuration.caption.CaptionUtility; import com.plotsquared.core.configuration.Captions; import com.plotsquared.core.configuration.Settings; import com.plotsquared.core.configuration.caption.TranslatableCaption; diff --git a/Core/src/main/java/com/plotsquared/core/command/SetCommand.java b/Core/src/main/java/com/plotsquared/core/command/SetCommand.java index 181f58cf2..462bc8783 100644 --- a/Core/src/main/java/com/plotsquared/core/command/SetCommand.java +++ b/Core/src/main/java/com/plotsquared/core/command/SetCommand.java @@ -25,7 +25,7 @@ */ package com.plotsquared.core.command; -import com.plotsquared.core.configuration.CaptionUtility; +import com.plotsquared.core.configuration.caption.CaptionUtility; import com.plotsquared.core.configuration.Captions; import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.location.Location; diff --git a/Core/src/main/java/com/plotsquared/core/configuration/Captions.java b/Core/src/main/java/com/plotsquared/core/configuration/Captions.java index afcee71b5..5541a2842 100644 --- a/Core/src/main/java/com/plotsquared/core/configuration/Captions.java +++ b/Core/src/main/java/com/plotsquared/core/configuration/Captions.java @@ -26,6 +26,7 @@ package com.plotsquared.core.configuration; import com.plotsquared.core.PlotSquared; +import com.plotsquared.core.configuration.caption.Caption; import com.plotsquared.core.configuration.file.YamlConfiguration; import com.plotsquared.core.util.StringMan; diff --git a/Core/src/main/java/com/plotsquared/core/configuration/Caption.java b/Core/src/main/java/com/plotsquared/core/configuration/caption/Caption.java similarity index 97% rename from Core/src/main/java/com/plotsquared/core/configuration/Caption.java rename to Core/src/main/java/com/plotsquared/core/configuration/caption/Caption.java index cd31e95d9..07a871d4f 100644 --- a/Core/src/main/java/com/plotsquared/core/configuration/Caption.java +++ b/Core/src/main/java/com/plotsquared/core/configuration/caption/Caption.java @@ -23,7 +23,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.plotsquared.core.configuration; +package com.plotsquared.core.configuration.caption; import com.plotsquared.core.configuration.caption.LocaleHolder; diff --git a/Core/src/main/java/com/plotsquared/core/configuration/CaptionUtility.java b/Core/src/main/java/com/plotsquared/core/configuration/caption/CaptionUtility.java similarity index 70% rename from Core/src/main/java/com/plotsquared/core/configuration/CaptionUtility.java rename to Core/src/main/java/com/plotsquared/core/configuration/caption/CaptionUtility.java index 3180f62b4..fa3bde36d 100644 --- a/Core/src/main/java/com/plotsquared/core/configuration/CaptionUtility.java +++ b/Core/src/main/java/com/plotsquared/core/configuration/caption/CaptionUtility.java @@ -23,37 +23,46 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.plotsquared.core.configuration; +package com.plotsquared.core.configuration.caption; import com.plotsquared.core.player.PlotPlayer; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + public class CaptionUtility { - public static String formatRaw(PlotPlayer recipient, String message, Object... args) { + /** + * Format a chat message but keep the formatting keys + * + * @param recipient Message recipient + * @param message Message + * @return Formatted message + */ + public static String formatRaw(PlotPlayer recipient, String message) { final ChatFormatter.ChatContext chatContext = - new ChatFormatter.ChatContext(recipient, message, args, true); + new ChatFormatter.ChatContext(recipient, message, true); for (final ChatFormatter chatFormatter : ChatFormatter.formatters) { chatFormatter.format(chatContext); } return chatContext.getMessage(); } - public static String format(PlotPlayer recipient, String message, Object... args) { + /** + * Format a chat message + * + * @param recipient Message recipient + * @param message Message + * @return Formatted message + */ + public static String format(@Nullable final PlotPlayer recipient, + @Nonnull final String message) { final ChatFormatter.ChatContext chatContext = - new ChatFormatter.ChatContext(recipient, message, args, false); + new ChatFormatter.ChatContext(recipient, message, false); for (final ChatFormatter chatFormatter : ChatFormatter.formatters) { chatFormatter.format(chatContext); } return chatContext.getMessage(); } - public static String format(PlotPlayer recipient, Caption caption, Object... args) { - if (caption.usePrefix() && caption.getTranslated().length() > 0) { - return Captions.PREFIX.getTranslated() + format(recipient, caption.getTranslated(), - args); - } else { - return format(recipient, caption.getTranslated(), args); - } - } - } diff --git a/Core/src/main/java/com/plotsquared/core/configuration/ChatFormatter.java b/Core/src/main/java/com/plotsquared/core/configuration/caption/ChatFormatter.java similarity index 58% rename from Core/src/main/java/com/plotsquared/core/configuration/ChatFormatter.java rename to Core/src/main/java/com/plotsquared/core/configuration/caption/ChatFormatter.java index 96b04e91c..1ddd95d67 100644 --- a/Core/src/main/java/com/plotsquared/core/configuration/ChatFormatter.java +++ b/Core/src/main/java/com/plotsquared/core/configuration/caption/ChatFormatter.java @@ -23,10 +23,12 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.plotsquared.core.configuration; +package com.plotsquared.core.configuration.caption; import com.plotsquared.core.player.PlotPlayer; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -34,43 +36,71 @@ import java.util.Collections; @FunctionalInterface public interface ChatFormatter { - Collection formatters = - new ArrayList<>(Collections.singletonList(new PlotSquaredChatFormatter())); + Collection formatters = new ArrayList<>(Collections.singletonList(new PlotSquaredChatFormatter())); - void format(ChatContext context); + /** + * Format a message using all registered formatters + * + * @param context Message to format + */ + void format(@Nonnull ChatContext context); final class ChatContext { private final PlotPlayer recipient; private String message; - private final Object[] args; + ; private final boolean rawOutput; - public ChatContext(final PlotPlayer recipient, final String message, final Object[] args, + /** + * Create a new chat context + * + * @param recipient Message recipient + * @param message Message + * @param rawOutput Whether or not formatting keys should be included in the + * final message + */ + public ChatContext(@Nullable final PlotPlayer recipient, @Nonnull final String message, final boolean rawOutput) { this.recipient = recipient; this.message = message; - this.args = args; this.rawOutput = rawOutput; } - public PlotPlayer getRecipient() { + /** + * Get the message recipient + * + * @return Recipient + */ + @Nullable public PlotPlayer getRecipient() { return this.recipient; } - public String getMessage() { + /** + * Get the message stored in the context + * + * @return Stored message + */ + @Nonnull public String getMessage() { return this.message; } - public Object[] getArgs() { - return this.args; - } - + /** + * Whether or not the output should escape + * any formatting keys + * + * @return True if raw output is to be used + */ public boolean isRawOutput() { return this.rawOutput; } - public void setMessage(String message) { + /** + * Set the new message + * + * @param message Message + */ + public void setMessage(@Nonnull final String message) { this.message = message; } } diff --git a/Core/src/main/java/com/plotsquared/core/configuration/caption/KeyedCaption.java b/Core/src/main/java/com/plotsquared/core/configuration/caption/KeyedCaption.java index e59210670..5ccda3712 100644 --- a/Core/src/main/java/com/plotsquared/core/configuration/caption/KeyedCaption.java +++ b/Core/src/main/java/com/plotsquared/core/configuration/caption/KeyedCaption.java @@ -25,12 +25,10 @@ */ package com.plotsquared.core.configuration.caption; -import com.plotsquared.core.configuration.Caption; - import javax.annotation.Nonnull; /** - * A {@link com.plotsquared.core.configuration.Caption} that can be identified by a key + * A {@link Caption} that can be identified by a key */ public interface KeyedCaption extends Caption { diff --git a/Core/src/main/java/com/plotsquared/core/configuration/PlotSquaredChatFormatter.java b/Core/src/main/java/com/plotsquared/core/configuration/caption/PlotSquaredChatFormatter.java similarity index 63% rename from Core/src/main/java/com/plotsquared/core/configuration/PlotSquaredChatFormatter.java rename to Core/src/main/java/com/plotsquared/core/configuration/caption/PlotSquaredChatFormatter.java index fe142f0fb..c20639928 100644 --- a/Core/src/main/java/com/plotsquared/core/configuration/PlotSquaredChatFormatter.java +++ b/Core/src/main/java/com/plotsquared/core/configuration/caption/PlotSquaredChatFormatter.java @@ -23,39 +23,17 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.plotsquared.core.configuration; +package com.plotsquared.core.configuration.caption; -import com.plotsquared.core.util.StringMan; - -import java.util.LinkedHashMap; -import java.util.Map; +import javax.annotation.Nonnull; public class PlotSquaredChatFormatter implements ChatFormatter { - @Override public void format(final ChatContext context) { + @Override public void format(@Nonnull final ChatContext context) { if (context.isRawOutput()) { context.setMessage( context.getMessage().replace('&', '\u2020').replace('\u00A7', '\u2030')); } - if (context.getArgs().length == 0) { - return; - } - final Map map = new LinkedHashMap<>(); - for (int i = context.getArgs().length - 1; i >= 0; i--) { - String arg = "" + context.getArgs()[i]; - if (arg.isEmpty()) { - map.put("%s" + i, ""); - } else { - if (!context.isRawOutput()) { - arg = Captions.color(arg); - } - map.put("%s" + i, arg); - } - if (i == 0) { - map.put("%s", arg); - } - } - context.setMessage(StringMan.replaceFromMap(context.getMessage(), map)); } } diff --git a/Core/src/main/java/com/plotsquared/core/configuration/StaticCaption.java b/Core/src/main/java/com/plotsquared/core/configuration/caption/StaticCaption.java similarity index 89% rename from Core/src/main/java/com/plotsquared/core/configuration/StaticCaption.java rename to Core/src/main/java/com/plotsquared/core/configuration/caption/StaticCaption.java index 381b76227..e9886f4ed 100644 --- a/Core/src/main/java/com/plotsquared/core/configuration/StaticCaption.java +++ b/Core/src/main/java/com/plotsquared/core/configuration/caption/StaticCaption.java @@ -23,10 +23,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.plotsquared.core.configuration; +package com.plotsquared.core.configuration.caption; import com.google.common.base.Preconditions; -import com.plotsquared.core.configuration.caption.LocaleHolder; import javax.annotation.Nonnull; @@ -34,10 +33,7 @@ public final class StaticCaption implements Caption { private final String value; - /** - * @deprecated Use {@link #of(String)} - */ - @Deprecated public StaticCaption(final String value) { + private StaticCaption(final String value) { this.value = value; } diff --git a/Core/src/main/java/com/plotsquared/core/configuration/caption/Templates.java b/Core/src/main/java/com/plotsquared/core/configuration/caption/Templates.java index 63266c5a4..ed280501a 100644 --- a/Core/src/main/java/com/plotsquared/core/configuration/caption/Templates.java +++ b/Core/src/main/java/com/plotsquared/core/configuration/caption/Templates.java @@ -25,7 +25,6 @@ */ package com.plotsquared.core.configuration.caption; -import com.plotsquared.core.configuration.Caption; import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.util.MainUtil; import net.kyori.adventure.text.minimessage.MiniMessage; diff --git a/Core/src/main/java/com/plotsquared/core/player/ConsolePlayer.java b/Core/src/main/java/com/plotsquared/core/player/ConsolePlayer.java index 9bb258204..fef164669 100644 --- a/Core/src/main/java/com/plotsquared/core/player/ConsolePlayer.java +++ b/Core/src/main/java/com/plotsquared/core/player/ConsolePlayer.java @@ -28,7 +28,7 @@ package com.plotsquared.core.player; import com.google.inject.Inject; import com.plotsquared.core.PlotSquared; import com.plotsquared.core.command.RequiredType; -import com.plotsquared.core.configuration.Caption; +import com.plotsquared.core.configuration.caption.Caption; import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.database.DBFunc; import com.plotsquared.core.events.TeleportCause; diff --git a/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java b/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java index df49e2710..a10c878cf 100644 --- a/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java +++ b/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java @@ -30,10 +30,11 @@ import com.google.common.base.Preconditions; import com.plotsquared.core.PlotSquared; import com.plotsquared.core.command.CommandCaller; import com.plotsquared.core.command.RequiredType; -import com.plotsquared.core.configuration.Caption; +import com.plotsquared.core.configuration.caption.Caption; import com.plotsquared.core.configuration.Captions; import com.plotsquared.core.configuration.Settings; import com.plotsquared.core.configuration.caption.CaptionMap; +import com.plotsquared.core.configuration.caption.CaptionUtility; import com.plotsquared.core.configuration.caption.LocaleHolder; import com.plotsquared.core.configuration.caption.Templates; import com.plotsquared.core.configuration.caption.TranslatableCaption; @@ -799,6 +800,10 @@ public abstract class PlotPlayer

implements CommandCaller, OfflinePlotPlayer, if (message.isEmpty()) { return; } + // Replace placeholders, etc + message = CaptionUtility.format(this, message). + /* Magic replacement characters */ + replace('\u2010', '%').replace('\u2020', '&').replace('\u2030', '&'); // Create the template list, and add the prefix as a replacement final List