Massive overhaul of message-system (made MessageSender to put all the message-sending in one place, created different componentFactories for different themes
This commit is contained in:
parent
b91d16aec8
commit
d36cb3a574
|
@ -6,7 +6,7 @@ import com.gmail.artemis.the.gr8.playerstats.commands.StatCommand;
|
|||
import com.gmail.artemis.the.gr8.playerstats.commands.TabCompleter;
|
||||
import com.gmail.artemis.the.gr8.playerstats.config.ConfigHandler;
|
||||
import com.gmail.artemis.the.gr8.playerstats.listeners.JoinListener;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.MessageWriter;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.MessageSender;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.OfflinePlayerHandler;
|
||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||
import org.bukkit.Bukkit;
|
||||
|
@ -32,22 +32,22 @@ public class Main extends JavaPlugin {
|
|||
|
||||
//first get an instance of all the classes that need to be initialized or passed along to different classes
|
||||
ConfigHandler config = new ConfigHandler(this);
|
||||
MessageWriter messageWriter = new MessageWriter(config);
|
||||
MessageSender sender = new MessageSender(config);
|
||||
OfflinePlayerHandler offlinePlayerHandler = new OfflinePlayerHandler();
|
||||
|
||||
ThreadManager threadManager = ThreadManager.getInstance(config, messageWriter, offlinePlayerHandler);
|
||||
ThreadManager threadManager = ThreadManager.getInstance(config, sender, offlinePlayerHandler);
|
||||
ShareManager shareManager = ShareManager.getInstance(config);
|
||||
|
||||
//register all commands and the tabCompleter
|
||||
PluginCommand statcmd = this.getCommand("statistic");
|
||||
if (statcmd != null) {
|
||||
statcmd.setExecutor(new StatCommand(messageWriter, threadManager, offlinePlayerHandler));
|
||||
statcmd.setExecutor(new StatCommand(sender, threadManager, offlinePlayerHandler));
|
||||
statcmd.setTabCompleter(new TabCompleter(offlinePlayerHandler));
|
||||
}
|
||||
PluginCommand reloadcmd = this.getCommand("statisticreload");
|
||||
if (reloadcmd != null) reloadcmd.setExecutor(new ReloadCommand(threadManager));
|
||||
PluginCommand sharecmd = this.getCommand("statisticshare");
|
||||
if (sharecmd != null) sharecmd.setExecutor(new ShareCommand(shareManager, messageWriter));
|
||||
if (sharecmd != null) sharecmd.setExecutor(new ShareCommand(shareManager, sender));
|
||||
|
||||
//register the listener
|
||||
Bukkit.getPluginManager().registerEvents(new JoinListener(threadManager), this);
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
package com.gmail.artemis.the.gr8.playerstats;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.config.ConfigHandler;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.MessageWriter;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.PluginMessage;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.MessageSender;
|
||||
import com.gmail.artemis.the.gr8.playerstats.reload.ReloadThread;
|
||||
import com.gmail.artemis.the.gr8.playerstats.models.StatRequest;
|
||||
import com.gmail.artemis.the.gr8.playerstats.statistic.StatThread;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.OfflinePlayerHandler;
|
||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
@ -20,9 +20,8 @@ public final class ThreadManager {
|
|||
private int statThreadID;
|
||||
private int reloadThreadID;
|
||||
|
||||
private static BukkitAudiences adventure;
|
||||
private static ConfigHandler config;
|
||||
private static MessageWriter messageWriter;
|
||||
private static MessageSender messageSender;
|
||||
private final OfflinePlayerHandler offlinePlayerHandler;
|
||||
|
||||
private ReloadThread lastActiveReloadThread;
|
||||
|
@ -30,10 +29,9 @@ public final class ThreadManager {
|
|||
private final HashMap<String, Thread> statThreads;
|
||||
private static long lastRecordedCalcTime;
|
||||
|
||||
private ThreadManager(ConfigHandler c, MessageWriter m, OfflinePlayerHandler o) {
|
||||
adventure = Main.adventure();
|
||||
private ThreadManager(ConfigHandler c, MessageSender m, OfflinePlayerHandler o) {
|
||||
config = c;
|
||||
messageWriter = m;
|
||||
messageSender = m;
|
||||
offlinePlayerHandler = o;
|
||||
|
||||
statThreads = new HashMap<>();
|
||||
|
@ -44,14 +42,14 @@ public final class ThreadManager {
|
|||
startReloadThread(null);
|
||||
}
|
||||
|
||||
public static ThreadManager getInstance(ConfigHandler config, MessageWriter messageWriter, OfflinePlayerHandler offlinePlayerHandler) {
|
||||
public static ThreadManager getInstance(ConfigHandler config, MessageSender messageSender, OfflinePlayerHandler offlinePlayerHandler) {
|
||||
ThreadManager threadManager = instance;
|
||||
if (threadManager != null) {
|
||||
return threadManager;
|
||||
}
|
||||
synchronized (ThreadManager.class) {
|
||||
if (instance == null) {
|
||||
instance = new ThreadManager(config, messageWriter, offlinePlayerHandler);
|
||||
instance = new ThreadManager(config, messageSender, offlinePlayerHandler);
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
@ -65,7 +63,7 @@ public final class ThreadManager {
|
|||
if (lastActiveReloadThread == null || !lastActiveReloadThread.isAlive()) {
|
||||
reloadThreadID += 1;
|
||||
|
||||
lastActiveReloadThread = new ReloadThread(config, messageWriter, offlinePlayerHandler, reloadThreadID, lastActiveStatThread, sender);
|
||||
lastActiveReloadThread = new ReloadThread(config, messageSender, offlinePlayerHandler, reloadThreadID, lastActiveStatThread, sender);
|
||||
lastActiveReloadThread.start();
|
||||
}
|
||||
else {
|
||||
|
@ -80,7 +78,7 @@ public final class ThreadManager {
|
|||
if (config.limitStatRequests() && statThreads.containsKey(cmdSender)) {
|
||||
Thread runningThread = statThreads.get(cmdSender);
|
||||
if (runningThread.isAlive()) {
|
||||
adventure.sender(request.getCommandSender()).sendMessage(messageWriter.requestAlreadyRunning(request.isBukkitConsoleSender()));
|
||||
messageSender.send(request.getCommandSender(), PluginMessage.REQUEST_ALREADY_RUNNING);
|
||||
} else {
|
||||
startNewStatThread(request);
|
||||
}
|
||||
|
@ -102,7 +100,7 @@ public final class ThreadManager {
|
|||
}
|
||||
|
||||
private void startNewStatThread(StatRequest request) {
|
||||
lastActiveStatThread = new StatThread(config, messageWriter, offlinePlayerHandler, statThreadID, request, lastActiveReloadThread);
|
||||
lastActiveStatThread = new StatThread(config, messageSender, offlinePlayerHandler, statThreadID, request, lastActiveReloadThread);
|
||||
statThreads.put(request.getCommandSender().getName(), lastActiveStatThread);
|
||||
lastActiveStatThread.start();
|
||||
}
|
||||
|
|
|
@ -2,7 +2,8 @@ package com.gmail.artemis.the.gr8.playerstats.commands;
|
|||
|
||||
import com.gmail.artemis.the.gr8.playerstats.Main;
|
||||
import com.gmail.artemis.the.gr8.playerstats.ShareManager;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.MessageWriter;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.PluginMessage;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.MessageSender;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
|
||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
|
@ -17,12 +18,12 @@ public class ShareCommand implements CommandExecutor {
|
|||
|
||||
private static BukkitAudiences adventure;
|
||||
private static ShareManager shareManager;
|
||||
private final MessageWriter messageWriter;
|
||||
private static MessageSender messageSender;
|
||||
|
||||
public ShareCommand(ShareManager s, MessageWriter m) {
|
||||
public ShareCommand(ShareManager s, MessageSender m) {
|
||||
adventure = Main.adventure();
|
||||
shareManager = s;
|
||||
messageWriter = m;
|
||||
messageSender = m;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -36,16 +37,17 @@ public class ShareCommand implements CommandExecutor {
|
|||
return false;
|
||||
}
|
||||
if (shareManager.requestAlreadyShared(shareCode)) {
|
||||
adventure.sender(sender).sendMessage(messageWriter.resultsAlreadyShared());
|
||||
messageSender.send(sender, PluginMessage.RESULTS_ALREADY_SHARED);
|
||||
}
|
||||
else if (shareManager.isOnCoolDown(sender.getName())) {
|
||||
adventure.sender(sender).sendMessage(messageWriter.stillOnShareCoolDown());
|
||||
messageSender.send(sender, PluginMessage.STILL_ON_SHARE_COOLDOWN);
|
||||
}
|
||||
else {
|
||||
TextComponent result = shareManager.getStatResult(sender.getName(), shareCode);
|
||||
if (result == null) { //at this point the only possible cause of statResult being null is the request being older than 25 player-requests ago
|
||||
adventure.sender(sender).sendMessage(messageWriter.statResultsTooOld());
|
||||
messageSender.send(sender, PluginMessage.STAT_RESULTS_TOO_OLD);
|
||||
} else {
|
||||
//TODO add shared-by signature
|
||||
adventure.all().sendMessage(result);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,15 +1,12 @@
|
|||
package com.gmail.artemis.the.gr8.playerstats.commands;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.Main;
|
||||
import com.gmail.artemis.the.gr8.playerstats.ThreadManager;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.PluginMessage;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.Target;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.MessageSender;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.EnumHandler;
|
||||
import com.gmail.artemis.the.gr8.playerstats.models.StatRequest;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.OfflinePlayerHandler;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.MessageWriter;
|
||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Statistic;
|
||||
import org.bukkit.command.Command;
|
||||
|
@ -19,41 +16,34 @@ import org.bukkit.command.ConsoleCommandSender;
|
|||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
|
||||
public class StatCommand implements CommandExecutor {
|
||||
|
||||
private static BukkitAudiences adventure;
|
||||
private static ThreadManager threadManager;
|
||||
private final MessageWriter messageWriter;
|
||||
private static MessageSender messageSender;
|
||||
private final OfflinePlayerHandler offlinePlayerHandler;
|
||||
|
||||
public StatCommand(MessageWriter m, ThreadManager t, OfflinePlayerHandler o) {
|
||||
adventure = Main.adventure();
|
||||
public StatCommand(MessageSender m, ThreadManager t, OfflinePlayerHandler o) {
|
||||
threadManager = t;
|
||||
messageWriter = m;
|
||||
messageSender = m;
|
||||
offlinePlayerHandler = o;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
|
||||
boolean isBukkitConsole = sender instanceof ConsoleCommandSender && Bukkit.getName().equalsIgnoreCase("CraftBukkit");
|
||||
if (args.length == 0 || args[0].equalsIgnoreCase("help")) { //in case of less than 1 argument or "help", display the help message
|
||||
adventure.sender(sender).sendMessage(messageWriter.helpMsg(sender instanceof ConsoleCommandSender));
|
||||
messageSender.send(sender, PluginMessage.HELP_MSG);
|
||||
}
|
||||
else if (args[0].equalsIgnoreCase("examples") ||
|
||||
args[0].equalsIgnoreCase("example")) { //in case of "statistic examples", show examples
|
||||
adventure.sender(sender).sendMessage(messageWriter.usageExamples(isBukkitConsole));
|
||||
messageSender.send(sender, PluginMessage.USAGE_EXAMPLES);
|
||||
}
|
||||
else {
|
||||
StatRequest request = generateRequest(sender, args);
|
||||
TextComponent issues = checkRequest(request, isBukkitConsole);
|
||||
if (issues == null) {
|
||||
if (requestIsValid(request)) {
|
||||
threadManager.startStatThread(request);
|
||||
}
|
||||
else {
|
||||
adventure.sender(sender).sendMessage(issues);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -139,28 +129,32 @@ public class StatCommand implements CommandExecutor {
|
|||
}
|
||||
}
|
||||
|
||||
/** This method validates the StatRequest and returns feedback in the form of a TextComponent.
|
||||
/** This method validates the StatRequest and returns feedback to the player if it returns false.
|
||||
It checks the following:
|
||||
<p>1. Is a Statistic set?</p>
|
||||
<p>2. Is a subStat needed, and is a subStat Enum Constant present? (block/entity/item)</p>
|
||||
<p>3. If the target is PLAYER, is a valid PlayerName provided? </p>
|
||||
@return null if the Request is valid, and an explanation message otherwise. */
|
||||
private @Nullable TextComponent checkRequest(StatRequest request, boolean isBukkitConsole) {
|
||||
@return true if the Request is valid, and false + an explanation message otherwise. */
|
||||
private boolean requestIsValid(StatRequest request) {
|
||||
if (request.getStatistic() == null) {
|
||||
return messageWriter.missingStatName(isBukkitConsole);
|
||||
messageSender.send(request.getCommandSender(), PluginMessage.MISSING_STAT_NAME);
|
||||
return false;
|
||||
}
|
||||
Statistic.Type type = request.getStatistic().getType();
|
||||
if (request.getSubStatEntry() == null && type != Statistic.Type.UNTYPED) {
|
||||
return messageWriter.missingSubStatName(type, isBukkitConsole);
|
||||
messageSender.send(request.getCommandSender(), PluginMessage.MISSING_SUB_STAT_NAME, type);
|
||||
return false;
|
||||
}
|
||||
else if (!matchingSubStat(request)) {
|
||||
return messageWriter.wrongSubStatType(type, request.getSubStatEntry(), isBukkitConsole);
|
||||
messageSender.send(request.getCommandSender(), PluginMessage.WRONG_SUB_STAT_TYPE, type);
|
||||
return false;
|
||||
}
|
||||
else if (request.getSelection() == Target.PLAYER && request.getPlayerName() == null) {
|
||||
return messageWriter.missingPlayerName(isBukkitConsole);
|
||||
messageSender.send(request.getCommandSender(), PluginMessage.MISSING_PLAYER_NAME);
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
package com.gmail.artemis.the.gr8.playerstats.enums;
|
||||
|
||||
public enum PluginMessage {
|
||||
RELOADED_CONFIG,
|
||||
STILL_RELOADING,
|
||||
WAIT_A_MOMENT, //param: long
|
||||
MISSING_STAT_NAME,
|
||||
MISSING_SUB_STAT_NAME, //param: Statistic.Type
|
||||
MISSING_PLAYER_NAME,
|
||||
WRONG_SUB_STAT_TYPE, //param: Statistic.Type, String
|
||||
REQUEST_ALREADY_RUNNING,
|
||||
STILL_ON_SHARE_COOLDOWN,
|
||||
RESULTS_ALREADY_SHARED,
|
||||
STAT_RESULTS_TOO_OLD,
|
||||
UNKNOWN_ERROR,
|
||||
USAGE_EXAMPLES,
|
||||
HELP_MSG,
|
||||
FORMAT_PLAYER_STAT,
|
||||
FORMAT_SERVER_STAT,
|
||||
FORMAT_TOP_STAT
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
package com.gmail.artemis.the.gr8.playerstats.models.datamodel;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.models.StatRequest;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.MessageWriter;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import org.bukkit.Statistic;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
/** Represents a bunch of BiFunctions that most of the time will have a MessageWriter as its first argument*/
|
||||
public abstract class BiFunctionType<M, O, T> implements Type {
|
||||
|
||||
public abstract TextComponent apply(MessageWriter messageWriter, Object o);
|
||||
|
||||
|
||||
public record MsgBoolean<M, B, T>(BiFunction<MessageWriter, Boolean, TextComponent> biFunction) implements Type {
|
||||
public TextComponent apply(MessageWriter messageWriter, boolean longWait) {
|
||||
return biFunction.apply(messageWriter, longWait);
|
||||
}
|
||||
}
|
||||
|
||||
public record MsgStatType<M, S, T>(BiFunction<MessageWriter, Statistic.Type, TextComponent> biFunction) implements Type {
|
||||
public TextComponent apply(MessageWriter messageWriter, Statistic.Type statType) {
|
||||
return biFunction.apply(messageWriter, statType);
|
||||
}
|
||||
}
|
||||
|
||||
public record StatRequestInt<S, I, T>(BiFunction<StatRequest, Integer, TextComponent> biFunction) implements Type {
|
||||
public TextComponent apply(StatRequest request, Integer playerStat) {
|
||||
return biFunction.apply(request, playerStat);
|
||||
}
|
||||
}
|
||||
|
||||
public record StatRequestLong<S, L, T>(BiFunction<StatRequest, Long, TextComponent> biFunction) implements Type {
|
||||
public TextComponent apply(StatRequest request, Long serverStat) {
|
||||
return biFunction.apply(request, serverStat);
|
||||
}
|
||||
}
|
||||
|
||||
public record StatRequestMap<S, M, T>(BiFunction<StatRequest, LinkedHashMap<String, Integer>, TextComponent> biFunction) implements Type {
|
||||
public TextComponent apply(StatRequest request, LinkedHashMap<String, Integer> topStats) {
|
||||
return biFunction.apply(request, topStats);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.gmail.artemis.the.gr8.playerstats.models.datamodel;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.MessageWriter;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
||||
public record FunctionType<M, T>(Function<MessageWriter, TextComponent> function) implements Type {
|
||||
|
||||
public TextComponent apply(MessageWriter messageWriter) {
|
||||
return function.apply(messageWriter);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
package com.gmail.artemis.the.gr8.playerstats.models.datamodel;
|
||||
|
||||
|
||||
public interface Type {
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package com.gmail.artemis.the.gr8.playerstats.msg;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.config.ConfigHandler;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.DebugLevel;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.PluginColor;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
|
||||
|
||||
public class BukkitConsoleComponentFactory extends ComponentFactory {
|
||||
|
||||
public BukkitConsoleComponentFactory(ConfigHandler config) {
|
||||
super(config);
|
||||
MyLogger.logMsg("BukkitConsoleFactory created!", DebugLevel.MEDIUM);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void prepareColors() {
|
||||
PREFIX = PluginColor.GOLD.getConsoleColor();
|
||||
BRACKETS = PluginColor.GRAY.getConsoleColor();
|
||||
UNDERSCORE = PluginColor.DARK_PURPLE.getConsoleColor();
|
||||
MSG_MAIN = PluginColor.MEDIUM_BLUE.getConsoleColor();
|
||||
MSG_MAIN_2 = PluginColor.GOLD.getConsoleColor();
|
||||
MSG_ACCENT = PluginColor.MEDIUM_GOLD.getConsoleColor();
|
||||
MSG_ACCENT_2 = PluginColor.LIGHT_YELLOW.getConsoleColor();
|
||||
HOVER_MSG = PluginColor.LIGHT_BLUE.getConsoleColor();
|
||||
HOVER_ACCENT = PluginColor.LIGHT_GOLD.getConsoleColor();
|
||||
}
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
package com.gmail.artemis.the.gr8.playerstats.msg;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.config.ConfigHandler;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.DebugLevel;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.PluginColor;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.Target;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.Unit;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.TranslatableComponent;
|
||||
|
@ -17,6 +19,7 @@ import org.bukkit.Bukkit;
|
|||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
|
||||
import static net.kyori.adventure.text.Component.*;
|
||||
import static net.kyori.adventure.text.Component.text;
|
||||
|
||||
|
@ -27,43 +30,94 @@ public class ComponentFactory {
|
|||
|
||||
private static ConfigHandler config;
|
||||
|
||||
protected static TextColor PREFIX; //gold
|
||||
protected static TextColor BRACKETS; //gray
|
||||
protected static TextColor UNDERSCORE; //dark_purple
|
||||
protected static TextColor MSG_MAIN; //blue
|
||||
protected static TextColor MSG_MAIN_2; //gold
|
||||
protected static TextColor MSG_ACCENT; //medium_gold
|
||||
protected static TextColor MSG_ACCENT_2; //light_yellow
|
||||
protected static TextColor HOVER_MSG; //light_blue
|
||||
protected static TextColor HOVER_ACCENT; //light_gold
|
||||
|
||||
public ComponentFactory(ConfigHandler c) {
|
||||
config = c;
|
||||
prepareColors();
|
||||
|
||||
MyLogger.logMsg("Regular ComponentFactory created!", DebugLevel.MEDIUM);
|
||||
}
|
||||
|
||||
protected void prepareColors() {
|
||||
PREFIX = PluginColor.GOLD.getColor();
|
||||
BRACKETS = PluginColor.GRAY.getColor();
|
||||
UNDERSCORE = PluginColor.DARK_PURPLE.getColor();
|
||||
MSG_MAIN = PluginColor.MEDIUM_BLUE.getColor();
|
||||
MSG_MAIN_2 = PluginColor.GOLD.getColor();
|
||||
MSG_ACCENT = PluginColor.MEDIUM_GOLD.getColor();
|
||||
MSG_ACCENT_2 = PluginColor.LIGHT_YELLOW.getColor();
|
||||
HOVER_MSG = PluginColor.LIGHT_BLUE.getColor();
|
||||
HOVER_ACCENT = PluginColor.LIGHT_GOLD.getColor();
|
||||
}
|
||||
|
||||
public TextColor prefix() {
|
||||
return PREFIX;
|
||||
}
|
||||
public TextColor brackets() {
|
||||
return BRACKETS;
|
||||
}
|
||||
public TextColor underscore() {
|
||||
return UNDERSCORE;
|
||||
}
|
||||
public TextColor msgMain() {
|
||||
return MSG_MAIN;
|
||||
}
|
||||
public TextColor msgMain2() {
|
||||
return MSG_MAIN_2;
|
||||
}
|
||||
public TextColor msgAccent() {
|
||||
return MSG_ACCENT;
|
||||
}
|
||||
public TextColor msgAccent2() {
|
||||
return MSG_ACCENT_2;
|
||||
}
|
||||
public TextColor hoverMsg() {
|
||||
return HOVER_MSG;
|
||||
}
|
||||
public TextColor hoverAccent() {
|
||||
return HOVER_ACCENT;
|
||||
}
|
||||
|
||||
|
||||
/** Returns [PlayerStats]. */
|
||||
public TextComponent pluginPrefixComponent(boolean isBukkitConsole) {
|
||||
public TextComponent pluginPrefixComponent() {
|
||||
return text("[")
|
||||
.color(PluginColor.GRAY.getColor())
|
||||
.append(text("PlayerStats").color(PluginColor.GOLD.getColor()))
|
||||
.color(BRACKETS)
|
||||
.append(text("PlayerStats").color(PREFIX))
|
||||
.append(text("]"));
|
||||
}
|
||||
|
||||
/** Returns [PlayerStats] surrounded by underscores on both sides. */
|
||||
public TextComponent prefixTitleComponent(boolean isBukkitConsole) {
|
||||
String underscores = "____________"; //12 underscores for both console and in-game
|
||||
TextColor underscoreColor = isBukkitConsole ?
|
||||
PluginColor.DARK_PURPLE.getConsoleColor() : PluginColor.DARK_PURPLE.getColor();
|
||||
|
||||
return text(underscores).color(underscoreColor)
|
||||
public TextComponent prefixTitleComponent() {
|
||||
//12 underscores for both console and in-game
|
||||
return text("____________").color(UNDERSCORE)
|
||||
.append(text(" ")) //4 spaces
|
||||
.append(pluginPrefixComponent(isBukkitConsole))
|
||||
.append(pluginPrefixComponent())
|
||||
.append(text(" ")) //4 spaces
|
||||
.append(text(underscores));
|
||||
.append(text("____________"));
|
||||
}
|
||||
|
||||
/** Returns a TextComponent with the input String as content, with color Gray and decoration Italic.*/
|
||||
public TextComponent subTitleComponent(String content) {
|
||||
return text(content).color(PluginColor.GRAY.getColor()).decorate(TextDecoration.ITALIC);
|
||||
return text(content).color(BRACKETS).decorate(TextDecoration.ITALIC);
|
||||
}
|
||||
|
||||
/** Returns a TextComponents in the style of a default plugin message, with color Medium_Blue. */
|
||||
public TextComponent messageComponent() {
|
||||
return text().color(PluginColor.MEDIUM_BLUE.getColor()).build();
|
||||
return text().color(MSG_MAIN).build();
|
||||
}
|
||||
|
||||
public TextComponent messageAccentComponent() {
|
||||
return text().color(PluginColor.MEDIUM_GOLD.getColor()).build();
|
||||
return text().color(MSG_ACCENT).build();
|
||||
}
|
||||
|
||||
public TextComponent.Builder playerNameBuilder(String playerName, Target selection) {
|
||||
|
@ -228,10 +282,10 @@ public class ComponentFactory {
|
|||
if (config.useHoverText()) {
|
||||
heartComponent.hoverEvent(HoverEvent.showText(
|
||||
text(Unit.HEART.getLabel())
|
||||
.color(PluginColor.LIGHT_GOLD.getColor())
|
||||
.color(HOVER_ACCENT)
|
||||
.decorate(TextDecoration.ITALIC)));
|
||||
}
|
||||
return Component.text().color(PluginColor.GRAY.getColor())
|
||||
return Component.text().color(BRACKETS)
|
||||
.append(text("["))
|
||||
.append(heartComponent)
|
||||
.append(text("]"))
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
package com.gmail.artemis.the.gr8.playerstats.msg;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.config.ConfigHandler;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.msgutils.ExampleMessage;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.msgutils.HelpMessage;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
|
||||
public class ConsoleMessageWriter extends MessageWriter {
|
||||
|
||||
private final boolean isBukkit;
|
||||
|
||||
private static ComponentFactory componentFactory;
|
||||
|
||||
public ConsoleMessageWriter(ConfigHandler c) {
|
||||
super(c);
|
||||
|
||||
isBukkit = Bukkit.getName().equalsIgnoreCase("CraftBukkit");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void getComponentFactory() {
|
||||
if (isBukkit) {
|
||||
componentFactory = new BukkitConsoleComponentFactory(config);
|
||||
}
|
||||
else if (config.enableFestiveFormatting() || config.enableRainbowMode()) {
|
||||
//TODO Check for date
|
||||
componentFactory = new PrideComponentFactory(config);
|
||||
}
|
||||
else {
|
||||
componentFactory = new ComponentFactory(config);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextComponent usageExamples() {
|
||||
return new ExampleMessage(componentFactory);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextComponent helpMsg() {
|
||||
return new HelpMessage(componentFactory,
|
||||
false,
|
||||
config.getTopListMaxSize());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,128 @@
|
|||
package com.gmail.artemis.the.gr8.playerstats.msg;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.Main;
|
||||
import com.gmail.artemis.the.gr8.playerstats.config.ConfigHandler;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.PluginMessage;
|
||||
import com.gmail.artemis.the.gr8.playerstats.models.StatRequest;
|
||||
import com.gmail.artemis.the.gr8.playerstats.models.datamodel.BiFunctionType;
|
||||
import com.gmail.artemis.the.gr8.playerstats.models.datamodel.FunctionType;
|
||||
import com.gmail.artemis.the.gr8.playerstats.models.datamodel.Type;
|
||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import org.bukkit.Statistic;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.EnumMap;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
import static com.gmail.artemis.the.gr8.playerstats.enums.PluginMessage.*;
|
||||
|
||||
public class MessageSender {
|
||||
|
||||
private static BukkitAudiences adventure;
|
||||
private static MessageWriter msg;
|
||||
private static ConsoleMessageWriter consoleMsg;
|
||||
|
||||
private static EnumMap<PluginMessage, Type> pluginMessages;
|
||||
|
||||
public MessageSender(ConfigHandler conf) {
|
||||
adventure = Main.adventure();
|
||||
|
||||
msg = new MessageWriter(conf);
|
||||
consoleMsg = new ConsoleMessageWriter(conf);
|
||||
|
||||
pluginMessages = new EnumMap<>(PluginMessage.class);
|
||||
prepareFunctions();
|
||||
}
|
||||
|
||||
public void updateComponentFactories(ConfigHandler config) {
|
||||
msg = new MessageWriter(config);
|
||||
consoleMsg = new ConsoleMessageWriter(config);
|
||||
}
|
||||
|
||||
/**
|
||||
Takes a function out of a private EnumMap with functions, and executes it.
|
||||
The functions all call a method in MessageWriter, either directly or through
|
||||
a private method in this class.
|
||||
*/
|
||||
public void send(CommandSender sender, PluginMessage message) {
|
||||
send(sender, message, null, null, null, 0, 0, null);
|
||||
}
|
||||
|
||||
public void send(CommandSender sender, PluginMessage message, boolean longWait) {
|
||||
send(sender, message, longWait, null, null, 0, 0, null);
|
||||
}
|
||||
|
||||
public void send(CommandSender sender, PluginMessage message, Statistic.Type statType) {
|
||||
send(sender, message, null, statType, null, 0, 0, null);
|
||||
}
|
||||
|
||||
public void send(StatRequest request, int playerStat) {
|
||||
send(request.getCommandSender(), FORMAT_PLAYER_STAT, null, null, null, playerStat, 0, null);
|
||||
}
|
||||
|
||||
public void send(StatRequest request, long serverStat) {
|
||||
send(request.getCommandSender(), FORMAT_SERVER_STAT, null, null, null, 0, serverStat, null);
|
||||
}
|
||||
|
||||
public void send(StatRequest request, LinkedHashMap<String, Integer> topStats) {
|
||||
send(request.getCommandSender(), FORMAT_TOP_STAT, null, null, request, 0, 0, topStats);
|
||||
}
|
||||
|
||||
private void send(@NotNull CommandSender sender, @NotNull PluginMessage message, Boolean longWait, Statistic.Type statType,
|
||||
StatRequest request, int playerStat, long serverStat, LinkedHashMap<String, Integer> topStats) {
|
||||
|
||||
Type customFunction = pluginMessages.get(message);
|
||||
TextComponent result = null;
|
||||
MessageWriter writer = messageWriter(sender instanceof ConsoleCommandSender);
|
||||
|
||||
if (customFunction instanceof FunctionType<?,?> function) {
|
||||
result = function.apply(writer);
|
||||
|
||||
} else if (customFunction instanceof BiFunctionType.MsgBoolean<?,?,?> biFunction) {
|
||||
if (longWait != null) result = biFunction.apply(writer, longWait);
|
||||
|
||||
} else if (customFunction instanceof BiFunctionType.MsgStatType<?,?,?> biFunction) {
|
||||
if (statType != null) result = biFunction.apply(writer, statType);
|
||||
|
||||
} else if (request != null) {
|
||||
if (customFunction instanceof BiFunctionType.StatRequestInt<?,?,?> biFunction) {
|
||||
result = biFunction.apply(request, playerStat);
|
||||
} else if (customFunction instanceof BiFunctionType.StatRequestLong<?,?,?> biFunction) {
|
||||
result = biFunction.apply(request, serverStat);
|
||||
} else if (customFunction instanceof BiFunctionType.StatRequestMap<?,?,?> biFunction) {
|
||||
if (topStats != null) result = biFunction.apply(request, topStats);
|
||||
}
|
||||
}
|
||||
|
||||
if (result != null) {
|
||||
adventure.sender(sender).sendMessage(result);
|
||||
}
|
||||
}
|
||||
|
||||
private void prepareFunctions() {
|
||||
pluginMessages.put(RELOADED_CONFIG, new FunctionType<>(MessageWriter::reloadedConfig));
|
||||
pluginMessages.put(STILL_RELOADING, new FunctionType<>(MessageWriter::stillReloading));
|
||||
pluginMessages.put(WAIT_A_MOMENT, new BiFunctionType.MsgBoolean<>(MessageWriter::waitAMoment));
|
||||
pluginMessages.put(MISSING_STAT_NAME, new FunctionType<>(MessageWriter::missingStatName));
|
||||
pluginMessages.put(MISSING_SUB_STAT_NAME, new BiFunctionType.MsgStatType<>(MessageWriter::missingSubStatName));
|
||||
pluginMessages.put(MISSING_PLAYER_NAME, new FunctionType<>(MessageWriter::missingPlayerName));
|
||||
pluginMessages.put(WRONG_SUB_STAT_TYPE, new BiFunctionType.MsgStatType<>(MessageWriter::wrongSubStatType));
|
||||
pluginMessages.put(REQUEST_ALREADY_RUNNING, new FunctionType<>(MessageWriter::requestAlreadyRunning));
|
||||
pluginMessages.put(STILL_ON_SHARE_COOLDOWN, new FunctionType<>(MessageWriter::stillOnShareCoolDown));
|
||||
pluginMessages.put(RESULTS_ALREADY_SHARED, new FunctionType<>(MessageWriter::resultsAlreadyShared));
|
||||
pluginMessages.put(STAT_RESULTS_TOO_OLD, new FunctionType<>(MessageWriter::statResultsTooOld));
|
||||
pluginMessages.put(UNKNOWN_ERROR, new FunctionType<>(MessageWriter::unknownError));
|
||||
pluginMessages.put(USAGE_EXAMPLES, new FunctionType<>(MessageWriter::usageExamples));
|
||||
pluginMessages.put(HELP_MSG, new FunctionType<>(MessageWriter::helpMsg));
|
||||
pluginMessages.put(FORMAT_PLAYER_STAT, new BiFunctionType.StatRequestInt<>((StatRequest s, Integer i) -> messageWriter(s.isConsoleSender()).formatPlayerStat(i, s)));
|
||||
pluginMessages.put(FORMAT_SERVER_STAT, new BiFunctionType.StatRequestLong<>((StatRequest s, Long l) -> messageWriter(s.isConsoleSender()).formatServerStat(l, s)));
|
||||
pluginMessages.put(FORMAT_TOP_STAT, new BiFunctionType.StatRequestMap<>((StatRequest s, LinkedHashMap<String, Integer> l) -> messageWriter(s.isConsoleSender()).formatTopStats(l, s)));
|
||||
}
|
||||
|
||||
private MessageWriter messageWriter(boolean isConsoleSender) {
|
||||
return isConsoleSender ? consoleMsg : msg;
|
||||
}
|
||||
}
|
|
@ -15,7 +15,6 @@ import net.kyori.adventure.text.TextComponent;
|
|||
import net.kyori.adventure.text.event.ClickEvent;
|
||||
import net.kyori.adventure.text.event.HoverEvent;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Statistic;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -28,7 +27,8 @@ import static net.kyori.adventure.text.Component.*;
|
|||
The component parts (with appropriate formatting) are supplied by a ComponentFactory.*/
|
||||
public class MessageWriter {
|
||||
|
||||
private static ConfigHandler config;
|
||||
protected static ConfigHandler config;
|
||||
|
||||
private static ComponentFactory componentFactory;
|
||||
private final LanguageKeyHandler languageKeyHandler;
|
||||
private final NumberFormatter formatter;
|
||||
|
@ -40,12 +40,9 @@ public class MessageWriter {
|
|||
getComponentFactory();
|
||||
}
|
||||
|
||||
public static void updateComponentFactory() {
|
||||
getComponentFactory();
|
||||
}
|
||||
|
||||
private static void getComponentFactory() {
|
||||
protected void getComponentFactory() {
|
||||
if (config.enableFestiveFormatting() || config.enableRainbowMode()) {
|
||||
//TODO check for date
|
||||
componentFactory = new PrideComponentFactory(config);
|
||||
}
|
||||
else {
|
||||
|
@ -53,57 +50,57 @@ public class MessageWriter {
|
|||
}
|
||||
}
|
||||
|
||||
public TextComponent reloadedConfig(boolean isBukkitConsole) {
|
||||
return componentFactory.pluginPrefixComponent(isBukkitConsole)
|
||||
public TextComponent reloadedConfig() {
|
||||
return componentFactory.pluginPrefixComponent()
|
||||
.append(space())
|
||||
.append(componentFactory.messageComponent().content("Config reloaded!"));
|
||||
}
|
||||
|
||||
public TextComponent stillReloading(boolean isBukkitConsole) {
|
||||
return componentFactory.pluginPrefixComponent(isBukkitConsole)
|
||||
public TextComponent stillReloading() {
|
||||
return componentFactory.pluginPrefixComponent()
|
||||
.append(space())
|
||||
.append(componentFactory.messageComponent().content(
|
||||
"The plugin is (re)loading, your request will be processed when it is done!"));
|
||||
}
|
||||
|
||||
public TextComponent waitAMoment(boolean longWait, boolean isBukkitConsole) {
|
||||
public TextComponent waitAMoment(boolean longWait) {
|
||||
String msg = longWait ? "Calculating statistics, this may take a minute..." :
|
||||
"Calculating statistics, this may take a few moments...";
|
||||
return componentFactory.pluginPrefixComponent(isBukkitConsole)
|
||||
return componentFactory.pluginPrefixComponent()
|
||||
.append(space())
|
||||
.append(componentFactory.messageComponent().content(msg));
|
||||
}
|
||||
|
||||
public TextComponent missingStatName(boolean isBukkitConsole) {
|
||||
return componentFactory.pluginPrefixComponent(isBukkitConsole)
|
||||
public TextComponent missingStatName() {
|
||||
return componentFactory.pluginPrefixComponent()
|
||||
.append(space())
|
||||
.append(componentFactory.messageComponent().content(
|
||||
"Please provide a valid statistic name!"));
|
||||
}
|
||||
|
||||
public TextComponent missingSubStatName(Statistic.Type statType, boolean isBukkitConsole) {
|
||||
return componentFactory.pluginPrefixComponent(isBukkitConsole)
|
||||
public TextComponent missingSubStatName(Statistic.Type statType) {
|
||||
return componentFactory.pluginPrefixComponent()
|
||||
.append(space())
|
||||
.append(componentFactory.messageComponent().content(
|
||||
"Please add a valid " + EnumHandler.getSubStatTypeName(statType) + " to look up this statistic!"));
|
||||
}
|
||||
|
||||
public TextComponent missingPlayerName(boolean isBukkitConsole) {
|
||||
return componentFactory.pluginPrefixComponent(isBukkitConsole)
|
||||
public TextComponent missingPlayerName() {
|
||||
return componentFactory.pluginPrefixComponent()
|
||||
.append(space())
|
||||
.append(componentFactory.messageComponent().content(
|
||||
"Please specify a valid player-name!"));
|
||||
}
|
||||
|
||||
public TextComponent wrongSubStatType(Statistic.Type statType, String subStatEntry, boolean isBukkitConsole) {
|
||||
return componentFactory.pluginPrefixComponent(isBukkitConsole)
|
||||
public TextComponent wrongSubStatType(Statistic.Type statType) {
|
||||
return componentFactory.pluginPrefixComponent()
|
||||
.append(space())
|
||||
.append(componentFactory.messageComponent().content(
|
||||
"\"" + subStatEntry + "\" is not a valid " + EnumHandler.getSubStatTypeName(statType) + "!"));
|
||||
"This is not a valid " + EnumHandler.getSubStatTypeName(statType) + "!"));
|
||||
}
|
||||
|
||||
public TextComponent requestAlreadyRunning(boolean isBukkitConsole) {
|
||||
return componentFactory.pluginPrefixComponent(isBukkitConsole)
|
||||
public TextComponent requestAlreadyRunning() {
|
||||
return componentFactory.pluginPrefixComponent()
|
||||
.append(space())
|
||||
.append(componentFactory.messageComponent().content(
|
||||
"Please wait for your previous lookup to finish!"));
|
||||
|
@ -111,7 +108,7 @@ public class MessageWriter {
|
|||
|
||||
//TODO Make this say amount of time left
|
||||
public TextComponent stillOnShareCoolDown() {
|
||||
return componentFactory.pluginPrefixComponent(false)
|
||||
return componentFactory.pluginPrefixComponent()
|
||||
.append(space())
|
||||
.append(componentFactory.messageComponent().content("You need to wait")
|
||||
.append(space())
|
||||
|
@ -123,20 +120,20 @@ public class MessageWriter {
|
|||
}
|
||||
|
||||
public TextComponent resultsAlreadyShared() {
|
||||
return componentFactory.pluginPrefixComponent(false)
|
||||
return componentFactory.pluginPrefixComponent()
|
||||
.append(space())
|
||||
.append(componentFactory.messageComponent().content("You already shared these results!"));
|
||||
}
|
||||
|
||||
public TextComponent statResultsTooOld() {
|
||||
return componentFactory.pluginPrefixComponent(false)
|
||||
return componentFactory.pluginPrefixComponent()
|
||||
.append(space())
|
||||
.append(componentFactory.messageComponent().content(
|
||||
"It has been too long since you looked up this statistic, please repeat the original look-up if you want to share it!"));
|
||||
}
|
||||
|
||||
public TextComponent unknownError(boolean isBukkitConsole) {
|
||||
return componentFactory.pluginPrefixComponent(isBukkitConsole)
|
||||
public TextComponent unknownError() {
|
||||
return componentFactory.pluginPrefixComponent()
|
||||
.append(space())
|
||||
.append(componentFactory.messageComponent().content(
|
||||
"Something went wrong with your request, " +
|
||||
|
@ -158,7 +155,7 @@ public class MessageWriter {
|
|||
public TextComponent formatTopStats(@NotNull LinkedHashMap<String, Integer> topStats, @NotNull StatRequest request) {
|
||||
TextComponent.Builder topList = Component.text()
|
||||
.append(newline())
|
||||
.append(componentFactory.pluginPrefixComponent(request.isBukkitConsoleSender())).append(space())
|
||||
.append(componentFactory.pluginPrefixComponent()).append(space())
|
||||
.append(componentFactory.titleComponent(config.getTopStatsTitle(), Target.TOP)).append(space())
|
||||
.append(componentFactory.titleNumberComponent(topStats.size())).append(space())
|
||||
.append(getStatNameComponent(request)) //space is provided by statUnitComponent
|
||||
|
@ -211,14 +208,13 @@ public class MessageWriter {
|
|||
.hoverEvent(HoverEvent.showText(text("CLICK ME").color(PluginColor.LIGHT_GOLD.getColor()))));
|
||||
}
|
||||
|
||||
public TextComponent usageExamples(boolean isBukkitConsole) {
|
||||
return new ExampleMessage(componentFactory, isBukkitConsole);
|
||||
public TextComponent usageExamples() {
|
||||
return new ExampleMessage(componentFactory);
|
||||
}
|
||||
|
||||
public TextComponent helpMsg(boolean isConsoleSender) {
|
||||
public TextComponent helpMsg() {
|
||||
return new HelpMessage(componentFactory,
|
||||
config.useHoverText() && !isConsoleSender,
|
||||
isConsoleSender && Bukkit.getName().equalsIgnoreCase("CraftBukkit"),
|
||||
config.useHoverText(),
|
||||
config.getTopListMaxSize());
|
||||
}
|
||||
|
||||
|
|
|
@ -2,43 +2,46 @@ package com.gmail.artemis.the.gr8.playerstats.msg;
|
|||
|
||||
import com.gmail.artemis.the.gr8.playerstats.config.ConfigHandler;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.DebugLevel;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.PluginColor;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.Month;
|
||||
|
||||
import static net.kyori.adventure.text.Component.*;
|
||||
|
||||
|
||||
public class PrideComponentFactory extends ComponentFactory {
|
||||
|
||||
private static ConfigHandler config;
|
||||
|
||||
public PrideComponentFactory(ConfigHandler c) {
|
||||
super(c);
|
||||
config = c;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public TextComponent prefixTitleComponent(boolean isBukkitConsole) {
|
||||
if (cancelRainbow(isBukkitConsole)) {
|
||||
return super.prefixTitleComponent(isBukkitConsole);
|
||||
}
|
||||
else {
|
||||
String title = "<rainbow:16>____________ [PlayerStats] ____________</rainbow>"; //12 underscores
|
||||
return text()
|
||||
.append(MiniMessage.miniMessage().deserialize(title))
|
||||
.build();
|
||||
}
|
||||
MyLogger.logMsg("PrideComponentFactory created!", DebugLevel.MEDIUM);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextComponent pluginPrefixComponent(boolean isConsoleSender) {
|
||||
if (cancelRainbow(isConsoleSender)) {
|
||||
return super.pluginPrefixComponent(isConsoleSender);
|
||||
}
|
||||
protected void prepareColors() {
|
||||
PREFIX = PluginColor.GOLD.getColor();
|
||||
BRACKETS = PluginColor.GRAY.getColor();
|
||||
UNDERSCORE = PluginColor.DARK_PURPLE.getColor();
|
||||
MSG_MAIN = PluginColor.MEDIUM_GOLD.getColor();
|
||||
MSG_MAIN_2 = PluginColor.GOLD.getColor();
|
||||
MSG_ACCENT = PluginColor.GOLD.getColor();
|
||||
MSG_ACCENT_2 = PluginColor.LIGHT_YELLOW.getColor();
|
||||
HOVER_MSG = PluginColor.LIGHT_BLUE.getColor();
|
||||
HOVER_ACCENT = PluginColor.LIGHT_GOLD.getColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextComponent prefixTitleComponent() {
|
||||
String title = "<rainbow:16>____________ [PlayerStats] ____________</rainbow>"; //12 underscores
|
||||
return text()
|
||||
.append(MiniMessage.miniMessage().deserialize(title))
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextComponent pluginPrefixComponent() {
|
||||
return text()
|
||||
.append(MiniMessage.miniMessage()
|
||||
.deserialize("<#f74040>[</#f74040>" +
|
||||
|
@ -57,11 +60,22 @@ public class PrideComponentFactory extends ComponentFactory {
|
|||
.build();
|
||||
}
|
||||
|
||||
/** Don't use rainbow formatting if the rainbow Prefix is disabled,
|
||||
if festive formatting is disabled or it is not pride month,
|
||||
or the commandsender is a Bukkit or Spigot console.*/
|
||||
private boolean cancelRainbow(boolean isBukkitConsole) {
|
||||
return !(config.enableRainbowMode() || (config.enableFestiveFormatting() && LocalDate.now().getMonth().equals(Month.JUNE))) ||
|
||||
(isBukkitConsole);
|
||||
public TextComponent backwardsPluginPrefixComponents() {
|
||||
return text()
|
||||
.append(MiniMessage.miniMessage()
|
||||
.deserialize("<#631ae6>[</#631ae6>" +
|
||||
"<#3341E6>P</#3341E6>" +
|
||||
"<#1F8BEB>l</#1F8BEB>" +
|
||||
"<#01c1a7>a</#01c1a7>" +
|
||||
"<#46D858>y</#46D858>" +
|
||||
"<#84D937>e</#84D937>" +
|
||||
"<#C1DA15>r</#C1DA15>" +
|
||||
"<#F7C522>S</#F7C522>" +
|
||||
"<#EEA019>t</#EEA019>" +
|
||||
"<#ee8a19>a</#ee8a19>" +
|
||||
"<#f67824>t</#f67824>" +
|
||||
"<#f76540>s</#f76540>" +
|
||||
"<#f74040>]</#f74040>"))
|
||||
.build();
|
||||
}
|
||||
}
|
|
@ -1,12 +1,11 @@
|
|||
package com.gmail.artemis.the.gr8.playerstats.msg.msgutils;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.PluginColor;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.BukkitConsoleComponentFactory;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.ComponentFactory;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.ComponentLike;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.format.Style;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Unmodifiable;
|
||||
|
||||
|
@ -19,36 +18,33 @@ public class ExampleMessage implements TextComponent {
|
|||
private final TextComponent exampleMessage;
|
||||
private final ComponentFactory componentFactory;
|
||||
|
||||
public ExampleMessage(ComponentFactory componentFactory, boolean isBukkitConsole) {
|
||||
public ExampleMessage(ComponentFactory componentFactory) {
|
||||
this.componentFactory = componentFactory;
|
||||
exampleMessage = getExampleMessage(isBukkitConsole);
|
||||
exampleMessage = getExampleMessage();
|
||||
}
|
||||
|
||||
public TextComponent getExampleMessage(boolean isBukkitConsole) {
|
||||
TextColor mainColor = isBukkitConsole ? PluginColor.GOLD.getConsoleColor() : PluginColor.GOLD.getColor();
|
||||
TextColor accentColor1 = isBukkitConsole ? PluginColor.MEDIUM_GOLD.getConsoleColor() : PluginColor.MEDIUM_GOLD.getColor();
|
||||
TextColor accentColor3 = isBukkitConsole ? PluginColor.LIGHT_YELLOW.getConsoleColor() : PluginColor.LIGHT_YELLOW.getColor();
|
||||
String arrow = isBukkitConsole ? " -> " : " → "; //4 spaces, alt + 26, 1 space
|
||||
public TextComponent getExampleMessage() {
|
||||
String arrow = componentFactory instanceof BukkitConsoleComponentFactory ? " -> " : " → "; //4 spaces, alt + 26, 1 space
|
||||
|
||||
return Component.newline()
|
||||
.append(componentFactory.prefixTitleComponent(isBukkitConsole))
|
||||
.append(componentFactory.prefixTitleComponent())
|
||||
.append(Component.newline())
|
||||
.append(text("Examples: ").color(mainColor))
|
||||
.append(text("Examples: ").color(componentFactory.msgMain2()))
|
||||
.append(Component.newline())
|
||||
.append(text(arrow).color(mainColor)
|
||||
.append(text(arrow).color(componentFactory.msgMain2())
|
||||
.append(text("/statistic ")
|
||||
.append(text("animals_bred ").color(accentColor1)
|
||||
.append(text("top").color(accentColor3)))))
|
||||
.append(text("animals_bred ").color(componentFactory.msgAccent())
|
||||
.append(text("top").color(componentFactory.msgAccent2())))))
|
||||
.append(Component.newline())
|
||||
.append(text(arrow).color(mainColor)
|
||||
.append(text(arrow).color(componentFactory.msgMain2())
|
||||
.append(text("/statistic ")
|
||||
.append(text("mine_block diorite ").color(accentColor1)
|
||||
.append(text("me").color(accentColor3)))))
|
||||
.append(text("mine_block diorite ").color(componentFactory.msgAccent())
|
||||
.append(text("me").color(componentFactory.msgAccent2())))))
|
||||
.append(Component.newline())
|
||||
.append(text(arrow).color(mainColor)
|
||||
.append(text(arrow).color(componentFactory.msgMain2())
|
||||
.append(text("/statistic ")
|
||||
.append(text("deaths ").color(accentColor1)
|
||||
.append(text("player ").color(accentColor3)
|
||||
.append(text("deaths ").color(componentFactory.msgAccent())
|
||||
.append(text("player ").color(componentFactory.msgAccent2())
|
||||
.append(text("Artemis_the_gr8"))))));
|
||||
}
|
||||
|
||||
|
@ -86,4 +82,4 @@ public class ExampleMessage implements TextComponent {
|
|||
public @NotNull TextComponent style(@NotNull Style style) {
|
||||
return exampleMessage.style(style);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,14 +1,12 @@
|
|||
package com.gmail.artemis.the.gr8.playerstats.msg.msgutils;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.PluginColor;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.BukkitConsoleComponentFactory;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.ComponentFactory;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.ComponentLike;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.event.HoverEvent;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.format.Style;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Unmodifiable;
|
||||
|
@ -21,145 +19,122 @@ public class HelpMessage implements TextComponent {
|
|||
|
||||
private final ComponentFactory componentFactory;
|
||||
private final TextComponent helpMessage;
|
||||
boolean isBukkitConsole;
|
||||
TextColor GRAY;
|
||||
TextColor DARK_PURPLE;
|
||||
TextColor GOLD;
|
||||
TextColor MEDIUM_GOLD;
|
||||
TextColor LIGHT_GOLD;
|
||||
TextColor LIGHT_BLUE;
|
||||
|
||||
|
||||
public HelpMessage(ComponentFactory componentFactory, boolean useHover, boolean isBukkitConsole, int listSize) {
|
||||
public HelpMessage(ComponentFactory componentFactory, boolean useHover, int listSize) {
|
||||
this.componentFactory = componentFactory;
|
||||
this.isBukkitConsole = isBukkitConsole;
|
||||
getPluginColors(isBukkitConsole);
|
||||
|
||||
if (!useHover || isBukkitConsole) {
|
||||
helpMessage = getPlainHelpMsg(isBukkitConsole, listSize);
|
||||
if (!useHover) {
|
||||
helpMessage = getPlainHelpMsg(listSize);
|
||||
} else {
|
||||
helpMessage = helpMsgHover(listSize);
|
||||
}
|
||||
}
|
||||
|
||||
private TextComponent getPlainHelpMsg(boolean isBukkitConsole, int listSize) {
|
||||
String arrowSymbol = isBukkitConsole ? "->" : "→"; //alt + 26
|
||||
String bulletSymbol = isBukkitConsole ? "*" : "•"; //alt + 7
|
||||
private TextComponent getPlainHelpMsg(int listSize) {
|
||||
String arrowSymbol = "→"; //alt + 26
|
||||
String bulletSymbol = "•"; //alt + 7
|
||||
|
||||
if (componentFactory instanceof BukkitConsoleComponentFactory) {
|
||||
arrowSymbol = "->";
|
||||
bulletSymbol = "*";
|
||||
}
|
||||
TextComponent spaces = text(" "); //4 spaces
|
||||
TextComponent arrow = text(arrowSymbol).color(NamedTextColor.GOLD);
|
||||
TextComponent bullet = text(bulletSymbol).color(NamedTextColor.GOLD);
|
||||
TextComponent arrow = text(arrowSymbol).color(componentFactory.msgMain2());
|
||||
TextComponent bullet = text(bulletSymbol).color(componentFactory.msgMain2());
|
||||
|
||||
return Component.newline()
|
||||
.append(componentFactory.prefixTitleComponent(isBukkitConsole))
|
||||
.append(componentFactory.prefixTitleComponent())
|
||||
.append(newline())
|
||||
.append(text("Type \"/statistic examples\" to see examples!").color(GRAY).decorate(TextDecoration.ITALIC))
|
||||
.append(text("Type \"/statistic examples\" to see examples!").color(componentFactory.brackets()).decorate(TextDecoration.ITALIC))
|
||||
.append(newline())
|
||||
.append(text("Usage:").color(GOLD)).append(space())
|
||||
.append(text("/statistic").color(LIGHT_GOLD))
|
||||
.append(text("Usage:").color(componentFactory.msgMain2())).append(space())
|
||||
.append(text("/statistic").color(componentFactory.hoverAccent()))
|
||||
.append(newline())
|
||||
.append(spaces).append(arrow).append(space())
|
||||
.append(text("name").color(LIGHT_GOLD))
|
||||
.append(text("name").color(componentFactory.hoverAccent()))
|
||||
.append(newline())
|
||||
.append(spaces).append(arrow).append(space())
|
||||
.append(text("{sub-statistic}").color(LIGHT_GOLD)).append(space())
|
||||
.append(text("(a block, item or entity)").color(GRAY))
|
||||
.append(text("{sub-statistic}").color(componentFactory.hoverAccent())).append(space())
|
||||
.append(text("(a block, item or entity)").color(componentFactory.brackets()))
|
||||
.append(newline())
|
||||
.append(spaces).append(arrow).append(space())
|
||||
.append(text("me | player | server | top").color(LIGHT_GOLD))
|
||||
.append(text("me | player | server | top").color(componentFactory.hoverAccent()))
|
||||
.append(newline())
|
||||
.append(spaces).append(spaces).append(bullet).append(space())
|
||||
.append(text("me:").color(MEDIUM_GOLD)).append(space())
|
||||
.append(text("your own statistic").color(GRAY))
|
||||
.append(text("me:").color(componentFactory.msgAccent())).append(space())
|
||||
.append(text("your own statistic").color(componentFactory.brackets()))
|
||||
.append(newline())
|
||||
.append(spaces).append(spaces).append(bullet).append(space())
|
||||
.append(text("player:").color(MEDIUM_GOLD)).append(space())
|
||||
.append(text("choose a player").color(GRAY))
|
||||
.append(text("player:").color(componentFactory.msgAccent())).append(space())
|
||||
.append(text("choose a player").color(componentFactory.brackets()))
|
||||
.append(newline())
|
||||
.append(spaces).append(spaces).append(bullet).append(space())
|
||||
.append(text("server:").color(MEDIUM_GOLD)).append(space())
|
||||
.append(text("everyone on the server combined").color(GRAY))
|
||||
.append(text("server:").color(componentFactory.msgAccent())).append(space())
|
||||
.append(text("everyone on the server combined").color(componentFactory.brackets()))
|
||||
.append(newline())
|
||||
.append(spaces).append(spaces).append(bullet).append(space())
|
||||
.append(text("top:").color(MEDIUM_GOLD)).append(space())
|
||||
.append(text("the top").color(GRAY).append(space()).append(text(listSize)))
|
||||
.append(text("top:").color(componentFactory.msgAccent())).append(space())
|
||||
.append(text("the top").color(componentFactory.brackets()).append(space()).append(text(listSize)))
|
||||
.append(newline())
|
||||
.append(spaces).append(arrow).append(space())
|
||||
.append(text("{player-name}").color(LIGHT_GOLD));
|
||||
.append(text("{player-name}").color(componentFactory.hoverAccent()));
|
||||
}
|
||||
|
||||
private TextComponent helpMsgHover(int listSize) {
|
||||
TextComponent spaces = text(" ");
|
||||
TextComponent arrow = text("→").color(GOLD);
|
||||
TextComponent arrow = text("→").color(componentFactory.msgMain2());
|
||||
|
||||
return Component.newline()
|
||||
.append(componentFactory.prefixTitleComponent(false))
|
||||
.append(componentFactory.prefixTitleComponent())
|
||||
.append(newline())
|
||||
.append(componentFactory.subTitleComponent("Hover over the arguments for more information!"))
|
||||
.append(newline())
|
||||
.append(text("Usage:").color(GOLD)).append(space())
|
||||
.append(text("/statistic").color(LIGHT_GOLD))
|
||||
.append(text("Usage:").color(componentFactory.msgMain2())).append(space())
|
||||
.append(text("/statistic").color(componentFactory.hoverAccent()))
|
||||
.append(newline())
|
||||
.append(spaces).append(arrow).append(space())
|
||||
.append(text("name").color(LIGHT_GOLD)
|
||||
.hoverEvent(HoverEvent.showText(text("The name that describes the statistic").color(LIGHT_BLUE)
|
||||
.append(text("name").color(componentFactory.hoverAccent())
|
||||
.hoverEvent(HoverEvent.showText(text("The name that describes the statistic").color(componentFactory.hoverMsg())
|
||||
.append(newline())
|
||||
.append(text("Example: ").color(GOLD))
|
||||
.append(text("\"animals_bred\"").color(LIGHT_GOLD)))))
|
||||
.append(text("Example: ").color(componentFactory.msgMain2()))
|
||||
.append(text("\"animals_bred\"").color(componentFactory.hoverAccent())))))
|
||||
.append(newline())
|
||||
.append(spaces).append(arrow).append(space())
|
||||
.append(text("sub-statistic").color(LIGHT_GOLD)
|
||||
.append(text("sub-statistic").color(componentFactory.hoverAccent())
|
||||
.hoverEvent(HoverEvent.showText(
|
||||
text("Some statistics need an item, block or entity as extra input").color(LIGHT_BLUE)
|
||||
text("Some statistics need an item, block or entity as extra input").color(componentFactory.hoverMsg())
|
||||
.append(newline())
|
||||
.append(text("Example: ").color(GOLD)
|
||||
.append(text("\"mine_block diorite\"").color(LIGHT_GOLD))))))
|
||||
.append(text("Example: ").color(componentFactory.msgMain2())
|
||||
.append(text("\"mine_block diorite\"").color(componentFactory.hoverAccent()))))))
|
||||
.append(newline())
|
||||
.append(spaces).append(arrow
|
||||
.hoverEvent(HoverEvent.showText(
|
||||
text("Choose one").color(DARK_PURPLE)))).append(space())
|
||||
.append(text("me").color(LIGHT_GOLD)
|
||||
text("Choose one").color(componentFactory.underscore())))).append(space())
|
||||
.append(text("me").color(componentFactory.hoverAccent())
|
||||
.hoverEvent(HoverEvent.showText(
|
||||
text("See your own statistic").color(LIGHT_BLUE))))
|
||||
.append(text(" | ").color(LIGHT_GOLD))
|
||||
.append(text("player").color(LIGHT_GOLD)
|
||||
text("See your own statistic").color(componentFactory.hoverMsg()))))
|
||||
.append(text(" | ").color(componentFactory.hoverAccent()))
|
||||
.append(text("player").color(componentFactory.hoverAccent())
|
||||
.hoverEvent(HoverEvent.showText(
|
||||
text("Choose any player that has played on your server").color(LIGHT_BLUE))))
|
||||
.append(text(" | ").color(LIGHT_GOLD))
|
||||
.append(text("server").color(LIGHT_GOLD)
|
||||
text("Choose any player that has played on your server").color(componentFactory.hoverMsg()))))
|
||||
.append(text(" | ").color(componentFactory.hoverAccent()))
|
||||
.append(text("server").color(componentFactory.hoverAccent())
|
||||
.hoverEvent(HoverEvent.showText(
|
||||
text("See the combined total for everyone on your server").color(LIGHT_BLUE))))
|
||||
.append(text(" | ").color(LIGHT_GOLD))
|
||||
.append(text("top").color(LIGHT_GOLD)
|
||||
text("See the combined total for everyone on your server").color(componentFactory.hoverMsg()))))
|
||||
.append(text(" | ").color(componentFactory.hoverAccent()))
|
||||
.append(text("top").color(componentFactory.hoverAccent())
|
||||
.hoverEvent(HoverEvent.showText(
|
||||
text("See the top").color(LIGHT_BLUE).append(space())
|
||||
text("See the top").color(componentFactory.hoverMsg()).append(space())
|
||||
.append(text(listSize)))))
|
||||
.append(newline())
|
||||
.append(spaces).append(arrow).append(space())
|
||||
.append(text("player-name").color(LIGHT_GOLD)
|
||||
.append(text("player-name").color(componentFactory.hoverAccent())
|
||||
.hoverEvent(HoverEvent.showText(
|
||||
text("In case you typed").color(LIGHT_BLUE).append(space())
|
||||
.append(text("\"player\"").color(LIGHT_GOLD))
|
||||
text("In case you typed").color(componentFactory.hoverMsg()).append(space())
|
||||
.append(text("\"player\"").color(componentFactory.hoverAccent()))
|
||||
.append(text(", add the player's name")))));
|
||||
}
|
||||
|
||||
private void getPluginColors(boolean isBukkitConsole) {
|
||||
if (isBukkitConsole) {
|
||||
GRAY = PluginColor.GRAY.getConsoleColor();
|
||||
DARK_PURPLE = PluginColor.DARK_PURPLE.getConsoleColor();
|
||||
GOLD = PluginColor.GOLD.getConsoleColor();
|
||||
MEDIUM_GOLD = PluginColor.MEDIUM_GOLD.getConsoleColor();
|
||||
LIGHT_GOLD = PluginColor.LIGHT_GOLD.getConsoleColor();
|
||||
LIGHT_BLUE = PluginColor.LIGHT_BLUE.getConsoleColor();
|
||||
} else {
|
||||
GRAY = PluginColor.GRAY.getColor();
|
||||
DARK_PURPLE = PluginColor.DARK_PURPLE.getColor();
|
||||
GOLD = PluginColor.GOLD.getColor();
|
||||
MEDIUM_GOLD = PluginColor.MEDIUM_GOLD.getColor();
|
||||
LIGHT_GOLD = PluginColor.LIGHT_GOLD.getColor();
|
||||
LIGHT_BLUE = PluginColor.LIGHT_BLUE.getColor();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String content() {
|
||||
return helpMessage.content();
|
||||
|
|
|
@ -1,19 +1,17 @@
|
|||
package com.gmail.artemis.the.gr8.playerstats.reload;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.Main;
|
||||
import com.gmail.artemis.the.gr8.playerstats.ShareManager;
|
||||
import com.gmail.artemis.the.gr8.playerstats.ThreadManager;
|
||||
import com.gmail.artemis.the.gr8.playerstats.config.ConfigHandler;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.DebugLevel;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.MessageWriter;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.PluginMessage;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.MessageSender;
|
||||
import com.gmail.artemis.the.gr8.playerstats.statistic.StatThread;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.OfflinePlayerHandler;
|
||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
|
@ -25,10 +23,9 @@ import java.util.function.Predicate;
|
|||
public class ReloadThread extends Thread {
|
||||
|
||||
private static ConfigHandler config;
|
||||
private final MessageWriter messageWriter;
|
||||
private static MessageSender messageSender;
|
||||
private final OfflinePlayerHandler offlinePlayerHandler;
|
||||
|
||||
private static BukkitAudiences adventure;
|
||||
private static ShareManager shareManager;
|
||||
|
||||
private final int reloadThreadID;
|
||||
|
@ -37,12 +34,11 @@ public class ReloadThread extends Thread {
|
|||
private final CommandSender sender;
|
||||
|
||||
|
||||
public ReloadThread(ConfigHandler c, MessageWriter m, OfflinePlayerHandler o, int ID, @Nullable StatThread s, @Nullable CommandSender se) {
|
||||
public ReloadThread(ConfigHandler c, MessageSender m, OfflinePlayerHandler o, int ID, @Nullable StatThread s, @Nullable CommandSender se) {
|
||||
config = c;
|
||||
messageWriter = m;
|
||||
messageSender = m;
|
||||
offlinePlayerHandler = o;
|
||||
|
||||
adventure = Main.adventure();
|
||||
shareManager = ShareManager.getInstance(c);
|
||||
|
||||
reloadThreadID = ID;
|
||||
|
@ -72,10 +68,8 @@ public class ReloadThread extends Thread {
|
|||
MyLogger.logMsg("Reloading!", false);
|
||||
reloadEverything();
|
||||
|
||||
boolean isBukkitConsole = sender instanceof ConsoleCommandSender && Bukkit.getName().equalsIgnoreCase("CraftBukkit");
|
||||
if (sender != null) {
|
||||
adventure.sender(sender).sendMessage(
|
||||
messageWriter.reloadedConfig(isBukkitConsole));
|
||||
messageSender.send(sender, PluginMessage.RELOADED_CONFIG);
|
||||
}
|
||||
}
|
||||
else { //during first start-up
|
||||
|
@ -87,7 +81,7 @@ public class ReloadThread extends Thread {
|
|||
|
||||
private void reloadEverything() {
|
||||
MyLogger.setDebugLevel(config.getDebugLevel());
|
||||
MessageWriter.updateComponentFactory();
|
||||
messageSender.updateComponentFactories(config);
|
||||
offlinePlayerHandler.updateOfflinePlayerList(loadOfflinePlayers());
|
||||
shareManager.updateSettings(config);
|
||||
}
|
||||
|
|
|
@ -1,17 +1,16 @@
|
|||
package com.gmail.artemis.the.gr8.playerstats.statistic;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.Main;
|
||||
import com.gmail.artemis.the.gr8.playerstats.ShareManager;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.PluginMessage;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.Target;
|
||||
import com.gmail.artemis.the.gr8.playerstats.models.StatRequest;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.MessageWriter;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.MessageSender;
|
||||
import com.gmail.artemis.the.gr8.playerstats.reload.ReloadThread;
|
||||
import com.gmail.artemis.the.gr8.playerstats.ThreadManager;
|
||||
import com.gmail.artemis.the.gr8.playerstats.config.ConfigHandler;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.OfflinePlayerHandler;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
@ -25,25 +24,23 @@ import java.util.stream.Collectors;
|
|||
public class StatThread extends Thread {
|
||||
|
||||
private static ConfigHandler config;
|
||||
private final MessageWriter messageWriter;
|
||||
private final MessageSender messageSender;
|
||||
private final OfflinePlayerHandler offlinePlayerHandler;
|
||||
|
||||
private final ReloadThread reloadThread;
|
||||
private final StatRequest request;
|
||||
|
||||
private static ShareManager shareManager;
|
||||
private static BukkitAudiences adventure;
|
||||
|
||||
|
||||
public StatThread(ConfigHandler c, MessageWriter m, OfflinePlayerHandler o, int ID, StatRequest s, @Nullable ReloadThread r) {
|
||||
public StatThread(ConfigHandler c, MessageSender m, OfflinePlayerHandler o, int ID, StatRequest s, @Nullable ReloadThread r) {
|
||||
config = c;
|
||||
messageWriter = m;
|
||||
messageSender = m;
|
||||
offlinePlayerHandler = o;
|
||||
|
||||
reloadThread = r;
|
||||
request = s;
|
||||
|
||||
adventure = Main.adventure();
|
||||
shareManager = ShareManager.getInstance(config);
|
||||
|
||||
this.setName("StatThread-" + request.getCommandSender().getName() + "-" + ID);
|
||||
|
@ -60,8 +57,7 @@ public class StatThread extends Thread {
|
|||
if (reloadThread != null && reloadThread.isAlive()) {
|
||||
try {
|
||||
MyLogger.waitingForOtherThread(this.getName(), reloadThread.getName());
|
||||
adventure.sender(request.getCommandSender()).sendMessage(
|
||||
messageWriter.stillReloading(request.isBukkitConsoleSender()));
|
||||
messageSender.send(request.getCommandSender(), PluginMessage.STILL_RELOADING);
|
||||
reloadThread.join();
|
||||
|
||||
} catch (InterruptedException e) {
|
||||
|
@ -72,29 +68,27 @@ public class StatThread extends Thread {
|
|||
|
||||
long lastCalc = ThreadManager.getLastRecordedCalcTime();
|
||||
if (lastCalc > 2000) {
|
||||
adventure.sender(request.getCommandSender()).sendMessage(
|
||||
messageWriter.waitAMoment(lastCalc > 20000, request.isBukkitConsoleSender()));
|
||||
messageSender.send(request.getCommandSender(), PluginMessage.WAIT_A_MOMENT, lastCalc > 20000);
|
||||
}
|
||||
|
||||
Target selection = request.getSelection();
|
||||
TextComponent statResult;
|
||||
try {
|
||||
statResult = switch (selection) {
|
||||
case PLAYER -> messageWriter.formatPlayerStat(getIndividualStat(), request);
|
||||
case TOP -> messageWriter.formatTopStats(getTopStats(), request);
|
||||
case SERVER -> messageWriter.formatServerStat(getServerTotal(), request);
|
||||
switch (selection) {
|
||||
case PLAYER -> messageSender.send(request, getIndividualStat());
|
||||
case TOP -> messageSender.send(request, getTopStats());
|
||||
case SERVER -> messageSender.send(request, getServerTotal());
|
||||
};
|
||||
|
||||
if (shareManager.isEnabled() && request.getCommandSender().hasPermission("playerstats.share")) {
|
||||
UUID shareCode = shareManager.saveStatResult(request.getCommandSender().getName(), statResult);
|
||||
statResult = messageWriter.addShareButton(statResult, shareCode, request.getSelection());
|
||||
//UUID shareCode = shareManager.saveStatResult(request.getCommandSender().getName(), statResult);
|
||||
//statResult = messageWriter.addShareButton(statResult, shareCode, request.getSelection());
|
||||
}
|
||||
adventure.sender(request.getCommandSender()).sendMessage(statResult);
|
||||
//adventure.sender(request.getCommandSender()).sendMessage(statResult);
|
||||
}
|
||||
catch (ConcurrentModificationException e) {
|
||||
if (!request.isConsoleSender()) {
|
||||
adventure.sender(request.getCommandSender()).sendMessage(
|
||||
messageWriter.unknownError(false));
|
||||
messageSender.send(request.getCommandSender(), PluginMessage.UNKNOWN_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue