mirror of
https://github.com/itHotL/PlayerStats.git
synced 2024-11-26 12:36:16 +01:00
Made top-list-size configurable for API-requests, improved MessageBuilder
This commit is contained in:
parent
f6e37de926
commit
85ceb0b8c7
@ -191,53 +191,53 @@ public final class ConfigHandler {
|
||||
|
||||
/** Returns the unit that should be used for distance-related statistics.
|
||||
<br>Default: Blocks for plain text, km for hover-text</br>*/
|
||||
public String getDistanceUnit(boolean isHoverText) {
|
||||
return getUnitString(isHoverText, "blocks", "km", "distance-unit");
|
||||
public String getDistanceUnit(boolean isUnitForHoverText) {
|
||||
return getUnitString(isUnitForHoverText, "blocks", "km", "distance-unit");
|
||||
}
|
||||
|
||||
/** Returns the unit that should be used for damage-based statistics.
|
||||
<br>Default: Hearts for plain text, HP for hover-text.</br>*/
|
||||
public String getDamageUnit(boolean isHoverText) {
|
||||
return getUnitString(isHoverText, "hearts", "hp", "damage-unit");
|
||||
public String getDamageUnit(boolean isUnitForHoverText) {
|
||||
return getUnitString(isUnitForHoverText, "hearts", "hp", "damage-unit");
|
||||
}
|
||||
|
||||
/** Whether PlayerStats should automatically detect the most suitable unit to use for time-based statistics.
|
||||
<br>Default: true</br>*/
|
||||
public boolean autoDetectTimeUnit(boolean isHoverText) {
|
||||
public boolean autoDetectTimeUnit(boolean isUnitForHoverText) {
|
||||
String path = "auto-detect-biggest-time-unit";
|
||||
if (isHoverText) {
|
||||
if (isUnitForHoverText) {
|
||||
path = path + "-for-hover-text";
|
||||
}
|
||||
boolean defaultValue = !isHoverText;
|
||||
boolean defaultValue = !isUnitForHoverText;
|
||||
return config.getBoolean(path, defaultValue);
|
||||
}
|
||||
|
||||
/** How many additional units should be displayed next to the most suitable largest unit for time-based statistics.
|
||||
<br>Default: 1 for plain text, 0 for hover-text</br>*/
|
||||
public int getNumberOfExtraTimeUnits(boolean isHoverText) {
|
||||
public int getNumberOfExtraTimeUnits(boolean isUnitForHoverText) {
|
||||
String path = "number-of-extra-units";
|
||||
if (isHoverText) {
|
||||
if (isUnitForHoverText) {
|
||||
path = path + "-for-hover-text";
|
||||
}
|
||||
int defaultValue = isHoverText ? 0 : 1;
|
||||
int defaultValue = isUnitForHoverText ? 0 : 1;
|
||||
return config.getInt(path, defaultValue);
|
||||
}
|
||||
|
||||
/** Returns the unit that should be used for time-based statistics.
|
||||
(this will return the largest unit that should be used).
|
||||
<br>Default: days for plain text, hours for hover-text</br>*/
|
||||
public String getTimeUnit(boolean isHoverText) {
|
||||
return getTimeUnit(isHoverText, false);
|
||||
public String getTimeUnit(boolean isUnitForHoverText) {
|
||||
return getTimeUnit(isUnitForHoverText, false);
|
||||
}
|
||||
|
||||
/** Returns the unit that should be used for time-based statistics. If the optional smallUnit flag is true,
|
||||
this will return the smallest unit (and otherwise the largest).
|
||||
<br>Default: hours for plain text, seconds for hover-text</br>*/
|
||||
public String getTimeUnit(boolean isHoverText, boolean smallUnit) {
|
||||
public String getTimeUnit(boolean isUnitForHoverText, boolean smallUnit) {
|
||||
if (smallUnit) {
|
||||
return getUnitString(isHoverText, "hours", "seconds", "smallest-time-unit");
|
||||
return getUnitString(isUnitForHoverText, "hours", "seconds", "smallest-time-unit");
|
||||
}
|
||||
return getUnitString(isHoverText, "days", "hours", "biggest-time-unit");
|
||||
return getUnitString(isUnitForHoverText, "days", "hours", "biggest-time-unit");
|
||||
}
|
||||
|
||||
/** Returns an integer between 0 and 100 that represents how much lighter a hoverColor should be.
|
||||
|
@ -40,6 +40,8 @@ public enum PluginColor {
|
||||
/** A Light Yellow that is used for final accents in the example message (#FFFF8E).*/
|
||||
LIGHT_YELLOW (TextColor.fromHexString("#FFFF8E")),
|
||||
|
||||
/** The color of vanilla Minecraft hearts (#FF1313). */
|
||||
RED (TextColor.fromHexString("#FF1313")),
|
||||
|
||||
/** ChatColor Blue (#5555FF)*/
|
||||
NAME_1 (NamedTextColor.BLUE), //#5555FF - blue
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.gmail.artemis.the.gr8.playerstats.enums;
|
||||
|
||||
/** This enum represents the targets PlayerStats accepts for a stat-lookup.*/
|
||||
/** This enum represents the targets PlayerStats accepts for a stat-lookup (Player, Server and Top).*/
|
||||
public enum Target {
|
||||
PLAYER, SERVER, TOP
|
||||
}
|
@ -31,6 +31,7 @@ import static net.kyori.adventure.text.Component.*;
|
||||
public final class MessageBuilder {
|
||||
|
||||
private static ConfigHandler config;
|
||||
private boolean useHoverText;
|
||||
|
||||
private final ComponentFactory componentFactory;
|
||||
private final LanguageKeyHandler languageKeyHandler;
|
||||
@ -42,6 +43,7 @@ public final class MessageBuilder {
|
||||
|
||||
private MessageBuilder(ConfigHandler configHandler, ComponentFactory factory) {
|
||||
config = configHandler;
|
||||
useHoverText = config.useHoverText();
|
||||
componentFactory = factory;
|
||||
|
||||
formatter = new NumberFormatter();
|
||||
@ -57,6 +59,12 @@ public final class MessageBuilder {
|
||||
return new MessageBuilder(config, factory);
|
||||
}
|
||||
|
||||
/** Set whether this {@link MessageBuilder} should use hoverText.
|
||||
By default, this follows the setting specified in the {@link ConfigHandler}. */
|
||||
public void toggleHoverUse(boolean desiredSetting) {
|
||||
useHoverText = desiredSetting;
|
||||
}
|
||||
|
||||
public TextComponent reloadedConfig() {
|
||||
return componentFactory.pluginPrefix()
|
||||
.append(space())
|
||||
@ -157,7 +165,7 @@ public final class MessageBuilder {
|
||||
|
||||
public TextComponent helpMsg(boolean isConsoleSender) {
|
||||
int listSize = config.getTopListMaxSize();
|
||||
if (!isConsoleSender && config.useHoverText()) {
|
||||
if (!isConsoleSender && useHoverText) {
|
||||
return HelpMessage.constructHoverMsg(componentFactory, listSize);
|
||||
} else {
|
||||
return HelpMessage.constructPlainMsg(componentFactory, listSize);
|
||||
@ -174,7 +182,7 @@ public final class MessageBuilder {
|
||||
.append(componentFactory.playerName(statRequest.getPlayerName(), Target.PLAYER)
|
||||
.append(text(":"))
|
||||
.append(space()))
|
||||
.append(getStatNumberComponent(statRequest.getStatistic(), stat, Target.PLAYER, statRequest.isConsoleSender()))
|
||||
.append(getStatNumberComponent(statRequest, stat))
|
||||
.append(space())
|
||||
.append(getStatNameComponent(statRequest))
|
||||
.append(getStatUnitComponent(statRequest.getStatistic(), statRequest.getTarget(), statRequest.isConsoleSender())) //space is provided by statUnitComponent
|
||||
@ -194,7 +202,7 @@ public final class MessageBuilder {
|
||||
.append(space())
|
||||
.append(componentFactory.serverName(config.getServerName()))
|
||||
.append(space())
|
||||
.append(getStatNumberComponent(statRequest.getStatistic(), stat, Target.SERVER, statRequest.isConsoleSender()))
|
||||
.append(getStatNumberComponent(statRequest, stat))
|
||||
.append(space())
|
||||
.append(getStatNameComponent(statRequest))
|
||||
.append(getStatUnitComponent(statRequest.getStatistic(), statRequest.getTarget(), statRequest.isConsoleSender())) //space is provided by statUnit
|
||||
@ -255,9 +263,9 @@ public final class MessageBuilder {
|
||||
};
|
||||
}
|
||||
|
||||
private BiFunction<Integer, CommandSender, TextComponent> getFormattingFunction(@NotNull TextComponent statResult, Target selection) {
|
||||
boolean useEnters = config.useEnters(selection, false);
|
||||
boolean useEntersForShared = config.useEnters(selection, true);
|
||||
private BiFunction<Integer, CommandSender, TextComponent> getFormattingFunction(@NotNull TextComponent statResult, Target target) {
|
||||
boolean useEnters = config.useEnters(target, false);
|
||||
boolean useEntersForShared = config.useEnters(target, true);
|
||||
|
||||
return (shareCode, sender) -> {
|
||||
TextComponent.Builder statBuilder = text();
|
||||
@ -343,7 +351,7 @@ public final class MessageBuilder {
|
||||
else {
|
||||
topList.append(playerNameBuilder.append(text(":")));
|
||||
}
|
||||
topList.append(space()).append(getStatNumberComponent(statRequest.getStatistic(), topStats.get(playerName), Target.TOP, statRequest.isConsoleSender()));
|
||||
topList.append(space()).append(getStatNumberComponent(statRequest, topStats.get(playerName)));
|
||||
}
|
||||
return topList.build();
|
||||
}
|
||||
@ -373,60 +381,114 @@ public final class MessageBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
private TextComponent getStatNumberComponent(Statistic statistic, long statNumber, Target selection, boolean isConsoleSender) {
|
||||
Unit.Type type = Unit.getTypeFromStatistic(statistic);
|
||||
Unit statUnit;
|
||||
switch (type) {
|
||||
case DISTANCE -> statUnit = Unit.fromString(config.getDistanceUnit(false));
|
||||
case DAMAGE -> statUnit = Unit.fromString(config.getDamageUnit(false));
|
||||
case TIME -> {
|
||||
return getTimeNumberComponent(statNumber, selection, getTimeUnitRange(statNumber));
|
||||
}
|
||||
default -> statUnit = Unit.NUMBER;
|
||||
}
|
||||
String prettyNumber = formatter.format(statNumber, statUnit);
|
||||
if (!config.useHoverText() || statUnit == Unit.NUMBER) {
|
||||
return componentFactory.statNumber(prettyNumber, selection);
|
||||
}
|
||||
Unit hoverUnit = type == Unit.Type.DISTANCE ? Unit.fromString(config.getDistanceUnit(true)) :
|
||||
Unit.fromString(config.getDamageUnit(true));
|
||||
String prettyHoverNumber = formatter.format(statNumber, hoverUnit);
|
||||
MyLogger.logMsg("mainNumber: " + prettyNumber + ", hoverNumber: " + prettyHoverNumber, DebugLevel.HIGH);
|
||||
private TextComponent getStatNumberComponent(StatRequest request, long statNumber) {
|
||||
Unit.Type statUnitType = Unit.getTypeFromStatistic(request.getStatistic());
|
||||
Target target = request.getTarget();
|
||||
return switch (statUnitType) {
|
||||
case DISTANCE -> getDistanceNumberComponent(statNumber, target);
|
||||
case DAMAGE -> getDamageNumberComponent(statNumber, target);
|
||||
case TIME -> getTimeNumberComponent(statNumber, target);
|
||||
default -> getDefaultNumberComponent(statNumber, target);
|
||||
};
|
||||
}
|
||||
|
||||
if (hoverUnit == Unit.HEART) {
|
||||
return componentFactory.damageNumberWithHoverText(
|
||||
prettyNumber, prettyHoverNumber,
|
||||
componentFactory.heart(isConsoleSender, true), selection);
|
||||
private TextComponent getDistanceNumberComponent(long statNumber, Target target) {
|
||||
Unit statUnit = Unit.fromString(config.getDistanceUnit(false));
|
||||
String prettyNumber = formatter.formatDistanceNumber(statNumber, statUnit);
|
||||
if (!useHoverText) {
|
||||
return componentFactory.distanceNumber(prettyNumber, target);
|
||||
}
|
||||
|
||||
Unit hoverUnit = Unit.fromString(config.getDistanceUnit(true));
|
||||
String hoverNumber = formatter.formatDistanceNumber(statNumber, hoverUnit);
|
||||
if (config.useTranslatableComponents()) {
|
||||
String unitKey = languageKeyHandler.getUnitKey(hoverUnit);
|
||||
if (unitKey != null) {
|
||||
return componentFactory.statNumberWithHoverText(prettyNumber, prettyHoverNumber, null, unitKey, selection);
|
||||
return componentFactory.distanceNumberWithTranslatableHoverText(prettyNumber, hoverNumber, unitKey, target);
|
||||
}
|
||||
}
|
||||
return componentFactory.statNumberWithHoverText(prettyNumber, prettyHoverNumber, hoverUnit.getLabel(), null, selection);
|
||||
return componentFactory.distanceNumberWithHoverText(prettyNumber, hoverNumber, hoverUnit.getLabel(), target);
|
||||
}
|
||||
|
||||
private TextComponent getTimeNumberComponent(long statNumber, Target selection, ArrayList<Unit> unitRange) {
|
||||
if (unitRange.size() <= 1 || (config.useHoverText() && unitRange.size() <= 3)) {
|
||||
private TextComponent getDamageNumberComponent(long statNumber, Target target) {
|
||||
Unit statUnit = Unit.fromString(config.getDamageUnit(false));
|
||||
String prettyNumber = formatter.formatDamageNumber(statNumber, statUnit);
|
||||
if (!useHoverText) {
|
||||
return componentFactory.damageNumber(prettyNumber, target);
|
||||
}
|
||||
|
||||
Unit hoverUnit = Unit.fromString(config.getDamageUnit(true));
|
||||
String prettyHoverNumber = formatter.formatDamageNumber(statNumber, hoverUnit);
|
||||
if (hoverUnit == Unit.HEART) {
|
||||
return componentFactory.damageNumberWithHeartUnitInHoverText(prettyNumber, prettyHoverNumber, target);
|
||||
}
|
||||
return componentFactory.damageNumberWithHoverText(prettyNumber, prettyHoverNumber, hoverUnit.getLabel(), target);
|
||||
}
|
||||
|
||||
private TextComponent getTimeNumberComponent(long statNumber, Target target) {
|
||||
ArrayList<Unit> unitRange = getTimeUnitRange(statNumber);
|
||||
if (unitRange.size() <= 1 || (useHoverText && unitRange.size() <= 3)) {
|
||||
MyLogger.logMsg(
|
||||
"There is something wrong with the time-units you specified, please check your config!",
|
||||
true);
|
||||
return componentFactory.statNumber("-", selection);
|
||||
return componentFactory.statNumber("-", target);
|
||||
}
|
||||
else {
|
||||
String mainNumber = formatter.format(statNumber, unitRange.get(0), unitRange.get(1));
|
||||
if (!config.useHoverText()) {
|
||||
return componentFactory.statNumber(mainNumber, selection);
|
||||
String mainNumber = formatter.formatTimeNumber(statNumber, unitRange.get(0), unitRange.get(1));
|
||||
if (!useHoverText) {
|
||||
return componentFactory.statNumber(mainNumber, target);
|
||||
} else {
|
||||
String hoverNumber = formatter.format(statNumber, unitRange.get(2), unitRange.get(3));
|
||||
String hoverNumber = formatter.formatTimeNumber(statNumber, unitRange.get(2), unitRange.get(3));
|
||||
MyLogger.logMsg("mainNumber: " + mainNumber + ", hoverNumber: " + hoverNumber, DebugLevel.HIGH);
|
||||
return componentFactory.statNumberWithHoverText(mainNumber, hoverNumber,
|
||||
null, null, selection);
|
||||
null, null, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private TextComponent getDefaultNumberComponent(long statNumber, Target target) {
|
||||
return componentFactory.statNumber(formatter.formatNumber(statNumber), target);
|
||||
}
|
||||
|
||||
private TextComponent getStatUnitComponent(Statistic statistic, Target target, boolean isConsoleSender) {
|
||||
return switch (Unit.getTypeFromStatistic(statistic)) {
|
||||
case DAMAGE -> getDamageUnit(target, isConsoleSender);
|
||||
case DISTANCE -> getDistanceUnit(target);
|
||||
default -> Component.empty();
|
||||
};
|
||||
}
|
||||
|
||||
private TextComponent getDistanceUnit(Target target) {
|
||||
Unit statUnit = Unit.fromString(config.getDistanceUnit(false));
|
||||
if (config.useTranslatableComponents()) {
|
||||
String unitKey = languageKeyHandler.getUnitKey(statUnit);
|
||||
if (unitKey != null) {
|
||||
return Component.space()
|
||||
.append(componentFactory.statUnitTranslatable(unitKey, target));
|
||||
}
|
||||
}
|
||||
return Component.space()
|
||||
.append(componentFactory.statUnit(statUnit.getLabel(), target));
|
||||
}
|
||||
|
||||
private TextComponent getDamageUnit(Target target, boolean isConsoleSender) {
|
||||
Unit statUnit = Unit.fromString(config.getDamageUnit(false));
|
||||
if (statUnit == Unit.HEART) {
|
||||
TextComponent heartUnit;
|
||||
if (isConsoleSender) {
|
||||
heartUnit = componentFactory.consoleHeart();
|
||||
} else if (useHoverText) {
|
||||
heartUnit = componentFactory.clientHeartWithHoverText();
|
||||
} else {
|
||||
heartUnit = componentFactory.clientHeart(false);
|
||||
}
|
||||
return Component.space()
|
||||
.append(heartUnit);
|
||||
}
|
||||
return Component.space()
|
||||
.append(componentFactory.statUnit(statUnit.getLabel(), target));
|
||||
}
|
||||
|
||||
/** Get an ArrayList consisting of 2 or 4 timeUnits. The order of items is:
|
||||
<p>0. maxUnit</p>
|
||||
<p>1. minUnit</p>
|
||||
@ -443,7 +505,7 @@ public final class MessageBuilder {
|
||||
unitRange.add(bigUnit);
|
||||
unitRange.add(bigUnit.getSmallerUnit(config.getNumberOfExtraTimeUnits(false)));
|
||||
}
|
||||
if (config.useHoverText()) {
|
||||
if (useHoverText) {
|
||||
if (!config.autoDetectTimeUnit(true)) {
|
||||
unitRange.add(Unit.fromString(config.getTimeUnit(true)));
|
||||
unitRange.add(Unit.fromString(config.getTimeUnit(true, true)));
|
||||
@ -458,31 +520,6 @@ public final class MessageBuilder {
|
||||
return unitRange;
|
||||
}
|
||||
|
||||
private TextComponent getStatUnitComponent(Statistic statistic, Target selection, boolean isConsoleSender) {
|
||||
Unit statUnit;
|
||||
switch (Unit.getTypeFromStatistic(statistic)) {
|
||||
case DAMAGE -> statUnit = Unit.fromString(config.getDamageUnit(false));
|
||||
case DISTANCE -> statUnit = Unit.fromString(config.getDistanceUnit(false));
|
||||
default -> {
|
||||
return Component.empty();
|
||||
}
|
||||
}
|
||||
if (config.useTranslatableComponents()) {
|
||||
String unitKey = languageKeyHandler.getUnitKey(statUnit);
|
||||
if (unitKey != null) {
|
||||
return Component.space()
|
||||
.append(componentFactory.statUnit(null, unitKey, selection));
|
||||
}
|
||||
}
|
||||
String statName = statUnit.getLabel();
|
||||
if (statUnit == Unit.HEART) { //console can do u2665, u2764 looks better in-game
|
||||
return Component.space()
|
||||
.append(componentFactory.heart(isConsoleSender, false));
|
||||
}
|
||||
return Component.space()
|
||||
.append(componentFactory.statUnit(statName, null, selection));
|
||||
}
|
||||
|
||||
/** Returns "block", "entity", "item", or "sub-statistic" if the provided Type is null. */
|
||||
public static String getSubStatTypeName(Statistic.Type statType) {
|
||||
String subStat = "sub-statistic";
|
||||
|
@ -31,28 +31,30 @@ import static com.gmail.artemis.the.gr8.playerstats.enums.StandardMessage.*;
|
||||
public final class OutputManager implements StatFormatter {
|
||||
|
||||
private static BukkitAudiences adventure;
|
||||
private static ConfigHandler config;
|
||||
private static ShareManager shareManager;
|
||||
private static MessageBuilder writer;
|
||||
private static MessageBuilder consoleWriter;
|
||||
private static MessageBuilder messageBuilder;
|
||||
private static MessageBuilder consoleMessageBuilder;
|
||||
|
||||
private static EnumMap<StandardMessage, Function<MessageBuilder, TextComponent>> standardMessages;
|
||||
|
||||
public OutputManager(BukkitAudiences adventure, ConfigHandler config, ShareManager shareManager) {
|
||||
OutputManager.adventure = adventure;
|
||||
OutputManager.config = config;
|
||||
OutputManager.shareManager = shareManager;
|
||||
|
||||
getMessageWriters(config);
|
||||
getMessageBuilders();
|
||||
prepareFunctions();
|
||||
}
|
||||
|
||||
public static void updateMessageWriters(ConfigHandler config) {
|
||||
getMessageWriters(config);
|
||||
public static void updateMessageBuilders() {
|
||||
getMessageBuilders();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextComponent formatPlayerStat(@NotNull StatRequest statRequest, int playerStat) {
|
||||
BiFunction<Integer, CommandSender, TextComponent> playerStatFunction =
|
||||
getWriter(statRequest).formattedPlayerStatFunction(playerStat, statRequest);
|
||||
getMessageBuilder(statRequest).formattedPlayerStatFunction(playerStat, statRequest);
|
||||
|
||||
return processFunction(statRequest.getCommandSender(), playerStatFunction);
|
||||
}
|
||||
@ -60,7 +62,7 @@ public final class OutputManager implements StatFormatter {
|
||||
@Override
|
||||
public TextComponent formatServerStat(@NotNull StatRequest statRequest, long serverStat) {
|
||||
BiFunction<Integer, CommandSender, TextComponent> serverStatFunction =
|
||||
getWriter(statRequest).formattedServerStatFunction(serverStat, statRequest);
|
||||
getMessageBuilder(statRequest).formattedServerStatFunction(serverStat, statRequest);
|
||||
|
||||
return processFunction(statRequest.getCommandSender(), serverStatFunction);
|
||||
}
|
||||
@ -68,7 +70,7 @@ public final class OutputManager implements StatFormatter {
|
||||
@Override
|
||||
public TextComponent formatTopStat(@NotNull StatRequest statRequest, @NotNull LinkedHashMap<String, Integer> topStats) {
|
||||
BiFunction<Integer, CommandSender, TextComponent> topStatFunction =
|
||||
getWriter(statRequest).formattedTopStatFunction(topStats, statRequest);
|
||||
getMessageBuilder(statRequest).formattedTopStatFunction(topStats, statRequest);
|
||||
|
||||
return processFunction(statRequest.getCommandSender(), topStatFunction);
|
||||
}
|
||||
@ -76,17 +78,17 @@ public final class OutputManager implements StatFormatter {
|
||||
public void sendFeedbackMsg(@NotNull CommandSender sender, StandardMessage message) {
|
||||
if (message != null) {
|
||||
adventure.sender(sender).sendMessage(standardMessages.get(message)
|
||||
.apply(getWriter(sender)));
|
||||
.apply(getMessageBuilder(sender)));
|
||||
}
|
||||
}
|
||||
|
||||
public void sendFeedbackMsgWaitAMoment(@NotNull CommandSender sender, boolean longWait) {
|
||||
adventure.sender(sender).sendMessage(getWriter(sender)
|
||||
adventure.sender(sender).sendMessage(getMessageBuilder(sender)
|
||||
.waitAMoment(longWait));
|
||||
}
|
||||
|
||||
public void sendFeedbackMsgMissingSubStat(@NotNull CommandSender sender, Statistic.Type statType) {
|
||||
adventure.sender(sender).sendMessage(getWriter(sender)
|
||||
adventure.sender(sender).sendMessage(getMessageBuilder(sender)
|
||||
.missingSubStatName(statType));
|
||||
}
|
||||
|
||||
@ -94,18 +96,18 @@ public final class OutputManager implements StatFormatter {
|
||||
if (subStatName == null) {
|
||||
sendFeedbackMsgMissingSubStat(sender, statType);
|
||||
} else {
|
||||
adventure.sender(sender).sendMessage(getWriter(sender)
|
||||
adventure.sender(sender).sendMessage(getMessageBuilder(sender)
|
||||
.wrongSubStatType(statType, subStatName));
|
||||
}
|
||||
}
|
||||
|
||||
public void sendExamples(@NotNull CommandSender sender) {
|
||||
adventure.sender(sender).sendMessage(getWriter(sender)
|
||||
adventure.sender(sender).sendMessage(getMessageBuilder(sender)
|
||||
.usageExamples());
|
||||
}
|
||||
|
||||
public void sendHelp(@NotNull CommandSender sender) {
|
||||
adventure.sender(sender).sendMessage(getWriter(sender)
|
||||
adventure.sender(sender).sendMessage(getMessageBuilder(sender)
|
||||
.helpMsg(sender instanceof ConsoleCommandSender));
|
||||
}
|
||||
|
||||
@ -132,33 +134,47 @@ public final class OutputManager implements StatFormatter {
|
||||
}
|
||||
}
|
||||
|
||||
private MessageBuilder getWriter(CommandSender sender) {
|
||||
return sender instanceof ConsoleCommandSender ? consoleWriter : writer;
|
||||
private MessageBuilder getMessageBuilder(CommandSender sender) {
|
||||
return sender instanceof ConsoleCommandSender ? consoleMessageBuilder : messageBuilder;
|
||||
}
|
||||
|
||||
private MessageBuilder getWriter(StatRequest statRequest) {
|
||||
private MessageBuilder getMessageBuilder(StatRequest statRequest) {
|
||||
if (statRequest.isAPIRequest() || !statRequest.isConsoleSender()) {
|
||||
return writer;
|
||||
return messageBuilder;
|
||||
} else {
|
||||
return consoleWriter;
|
||||
return consoleMessageBuilder;
|
||||
}
|
||||
}
|
||||
|
||||
private static void getMessageWriters(ConfigHandler config) {
|
||||
boolean isBukkit = Bukkit.getName().equalsIgnoreCase("CraftBukkit");
|
||||
if (config.useRainbowMode() ||
|
||||
(config.useFestiveFormatting() && LocalDate.now().getMonth().equals(Month.JUNE))) {
|
||||
writer = MessageBuilder.fromComponentFactory(config, new PrideComponentFactory(config));
|
||||
}
|
||||
else {
|
||||
writer = MessageBuilder.defaultBuilder(config);
|
||||
}
|
||||
private static void getMessageBuilders() {
|
||||
messageBuilder = getClientMessageBuilder();
|
||||
consoleMessageBuilder = getConsoleMessageBuilder();
|
||||
}
|
||||
|
||||
if (!isBukkit) {
|
||||
consoleWriter = writer;
|
||||
} else {
|
||||
consoleWriter = MessageBuilder.fromComponentFactory(config, new BukkitConsoleComponentFactory(config));
|
||||
private static MessageBuilder getClientMessageBuilder() {
|
||||
if (useRainbowStyle()) {
|
||||
return MessageBuilder.fromComponentFactory(config, new PrideComponentFactory(config));
|
||||
}
|
||||
return MessageBuilder.defaultBuilder(config);
|
||||
}
|
||||
|
||||
private static MessageBuilder getConsoleMessageBuilder() {
|
||||
MessageBuilder consoleBuilder;
|
||||
if (isBukkit()) {
|
||||
consoleBuilder = MessageBuilder.fromComponentFactory(config, new BukkitConsoleComponentFactory(config));
|
||||
} else {
|
||||
consoleBuilder = getClientMessageBuilder();
|
||||
}
|
||||
consoleBuilder.toggleHoverUse(false);
|
||||
return consoleBuilder;
|
||||
}
|
||||
|
||||
private static boolean useRainbowStyle() {
|
||||
return config.useRainbowMode() || (config.useFestiveFormatting() && LocalDate.now().getMonth().equals(Month.JUNE));
|
||||
}
|
||||
|
||||
private static boolean isBukkit() {
|
||||
return Bukkit.getName().equalsIgnoreCase("CraftBukkit");
|
||||
}
|
||||
|
||||
private void prepareFunctions() {
|
||||
|
@ -24,6 +24,7 @@ public class BukkitConsoleComponentFactory extends ComponentFactory {
|
||||
PREFIX = PluginColor.GOLD.getConsoleColor();
|
||||
BRACKETS = PluginColor.GRAY.getConsoleColor();
|
||||
UNDERSCORE = PluginColor.DARK_PURPLE.getConsoleColor();
|
||||
HEARTS = PluginColor.RED.getConsoleColor();
|
||||
|
||||
MSG_MAIN = PluginColor.MEDIUM_BLUE.getConsoleColor();
|
||||
MSG_ACCENT = PluginColor.BLUE.getConsoleColor();
|
||||
|
@ -20,9 +20,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;
|
||||
|
||||
/** Creates Components with the desired formatting for the {@link MessageBuilder} to build messages with.
|
||||
This class can put Strings into formatted Components with TextColor
|
||||
@ -34,6 +32,7 @@ public class ComponentFactory {
|
||||
protected TextColor PREFIX; //gold
|
||||
protected TextColor BRACKETS; //gray
|
||||
protected TextColor UNDERSCORE; //dark_purple
|
||||
protected TextColor HEARTS; //red
|
||||
|
||||
protected TextColor MSG_MAIN; //medium_blue
|
||||
protected TextColor MSG_ACCENT; //blue
|
||||
@ -56,6 +55,7 @@ public class ComponentFactory {
|
||||
PREFIX = PluginColor.GOLD.getColor();
|
||||
BRACKETS = PluginColor.GRAY.getColor();
|
||||
UNDERSCORE = PluginColor.DARK_PURPLE.getColor();
|
||||
HEARTS = PluginColor.RED.getColor();
|
||||
|
||||
MSG_MAIN = PluginColor.MEDIUM_BLUE.getColor();
|
||||
MSG_ACCENT = PluginColor.BLUE.getColor();
|
||||
@ -109,10 +109,10 @@ public class ComponentFactory {
|
||||
return text().color(MSG_ACCENT).build();
|
||||
}
|
||||
|
||||
public TextComponent title(String content, Target selection) {
|
||||
public TextComponent title(String content, Target target) {
|
||||
return getComponent(content,
|
||||
getColorFromString(config.getTitleDecoration(selection, false)),
|
||||
getStyleFromString(config.getTitleDecoration(selection, true)));
|
||||
getColorFromString(config.getTitleDecoration(target, false)),
|
||||
getStyleFromString(config.getTitleDecoration(target, true)));
|
||||
}
|
||||
|
||||
public TextComponent titleNumber(int number) {
|
||||
@ -141,10 +141,10 @@ public class ComponentFactory {
|
||||
.append(colon);
|
||||
}
|
||||
|
||||
public TextComponent playerName(String playerName, Target selection) {
|
||||
public TextComponent playerName(String playerName, Target target) {
|
||||
return getComponent(playerName,
|
||||
getColorFromString(config.getPlayerNameDecoration(selection, false)),
|
||||
getStyleFromString(config.getPlayerNameDecoration(selection, true)));
|
||||
getColorFromString(config.getPlayerNameDecoration(target, false)),
|
||||
getStyleFromString(config.getPlayerNameDecoration(target, true)));
|
||||
}
|
||||
|
||||
public TextComponent sharerName(String sharerName) {
|
||||
@ -154,7 +154,7 @@ public class ComponentFactory {
|
||||
}
|
||||
|
||||
public TextComponent shareButton(int shareCode) {
|
||||
return surroundingBrackets(
|
||||
return surroundWithBrackets(
|
||||
text("Share")
|
||||
.color(MSG_HOVER)
|
||||
.clickEvent(ClickEvent.runCommand("/statshare " + shareCode))
|
||||
@ -163,7 +163,7 @@ public class ComponentFactory {
|
||||
}
|
||||
|
||||
public TextComponent sharedByMessage(Component playerName) {
|
||||
return surroundingBrackets(
|
||||
return surroundWithBrackets(
|
||||
text().append(
|
||||
getComponent("Shared by",
|
||||
getColorFromString(config.getSharedByTextDecoration(false)),
|
||||
@ -174,7 +174,7 @@ public class ComponentFactory {
|
||||
}
|
||||
|
||||
public TextComponent statResultInHoverText(TextComponent statResult) {
|
||||
return surroundingBrackets(
|
||||
return surroundWithBrackets(
|
||||
text().append(text("Hover Here")
|
||||
.color(MSG_CLICKED)
|
||||
.decorate(TextDecoration.ITALIC)
|
||||
@ -184,27 +184,27 @@ public class ComponentFactory {
|
||||
|
||||
/** @param prettyStatName a statName with underscores removed and each word capitalized
|
||||
@param prettySubStatName if present, a subStatName with underscores removed and each word capitalized*/
|
||||
public TextComponent statAndSubStatName(String prettyStatName, @Nullable String prettySubStatName, Target selection) {
|
||||
public TextComponent statAndSubStatName(String prettyStatName, @Nullable String prettySubStatName, Target target) {
|
||||
TextComponent.Builder totalStatNameBuilder = getComponentBuilder(prettyStatName,
|
||||
getColorFromString(config.getStatNameDecoration(selection, false)),
|
||||
getStyleFromString(config.getStatNameDecoration(selection, true)));
|
||||
TextComponent subStat = subStatName(prettySubStatName, selection);
|
||||
getColorFromString(config.getStatNameDecoration(target, false)),
|
||||
getStyleFromString(config.getStatNameDecoration(target, true)));
|
||||
TextComponent subStat = subStatName(prettySubStatName, target);
|
||||
|
||||
if (!subStat.equals(Component.empty())) {
|
||||
totalStatNameBuilder
|
||||
.append(space().decorations(TextDecoration.NAMES.values(), false))
|
||||
.append(subStatName(prettySubStatName, selection));
|
||||
.append(subStatName(prettySubStatName, target));
|
||||
}
|
||||
return totalStatNameBuilder.build();
|
||||
}
|
||||
|
||||
/** Returns a TextComponent with TranslatableComponent as a child.*/
|
||||
public TextComponent statAndSubStatNameTranslatable(String statKey, String subStatKey, Target selection) {
|
||||
public TextComponent statAndSubStatNameTranslatable(String statKey, String subStatKey, Target target) {
|
||||
TextComponent.Builder totalStatNameBuilder = getComponentBuilder(null,
|
||||
getColorFromString(config.getStatNameDecoration(selection, false)),
|
||||
getStyleFromString(config.getStatNameDecoration(selection, true)));
|
||||
getColorFromString(config.getStatNameDecoration(target, false)),
|
||||
getStyleFromString(config.getStatNameDecoration(target, true)));
|
||||
|
||||
TextComponent subStat = subStatNameTranslatable(subStatKey, selection);
|
||||
TextComponent subStat = subStatNameTranslatable(subStatKey, target);
|
||||
if (LanguageKeyHandler.isKeyForKillEntity(statKey)) {
|
||||
return totalStatNameBuilder.append(killEntityBuilder(subStat)).build();
|
||||
}
|
||||
@ -222,63 +222,95 @@ public class ComponentFactory {
|
||||
}
|
||||
}
|
||||
|
||||
public TextComponent statNumber(String prettyNumber, Target selection) {
|
||||
public TextComponent statNumber(String prettyNumber, Target target) {
|
||||
return getComponent(prettyNumber,
|
||||
getColorFromString(config.getStatNumberDecoration(selection, false)),
|
||||
getStyleFromString(config.getStatNumberDecoration(selection, true)));
|
||||
getColorFromString(config.getStatNumberDecoration(target, false)),
|
||||
getStyleFromString(config.getStatNumberDecoration(target, true)));
|
||||
}
|
||||
|
||||
public TextComponent statNumberWithHoverText(String mainNumber, String hoverNumber, @Nullable String hoverUnitName, @Nullable String hoverUnitKey, Target selection) {
|
||||
return statNumberWithHoverText(mainNumber, hoverNumber, hoverUnitName, hoverUnitKey, null, selection);
|
||||
public TextComponent statNumberWithHoverText(String mainNumber, String hoverNumber, @Nullable String hoverUnitName, @Nullable String hoverUnitKey, Target target) {
|
||||
return statNumberWithHoverText(mainNumber, hoverNumber, hoverUnitName, hoverUnitKey, null, target);
|
||||
}
|
||||
|
||||
public TextComponent damageNumberWithHoverText(String mainNumber, String hoverNumber, TextComponent heart, Target selection) {
|
||||
return statNumberWithHoverText(mainNumber, hoverNumber, null, null, heart, selection);
|
||||
public TextComponent damageNumber(String prettyNumber, Target target) {
|
||||
return statNumber(prettyNumber, target);
|
||||
}
|
||||
public TextComponent damageNumberWithHoverText(String mainNumber, String hoverNumber, String hoverUnitName, Target target) {
|
||||
return statNumberWithHoverText(mainNumber, hoverNumber, hoverUnitName, null, null, target);
|
||||
}
|
||||
|
||||
public TextComponent statUnit(String unitName, String unitKey, Target selection) {
|
||||
if (!(unitName == null && unitKey == null)) {
|
||||
TextComponent.Builder statUnitBuilder = getComponentBuilder(null,
|
||||
getColorFromString(config.getSubStatNameDecoration(selection, false)),
|
||||
getStyleFromString(config.getSubStatNameDecoration(selection, true)));
|
||||
if (unitKey != null) {
|
||||
statUnitBuilder.append(translatable()
|
||||
.key(unitKey));
|
||||
} else {
|
||||
statUnitBuilder.append(text(unitName));
|
||||
}
|
||||
return surroundingBrackets(statUnitBuilder.build());
|
||||
}
|
||||
else {
|
||||
return Component.empty();
|
||||
}
|
||||
public TextComponent damageNumberWithHeartUnitInHoverText(String mainNumber, String hoverNumber, Target target) {
|
||||
return statNumberWithHoverText(mainNumber, hoverNumber, null, null, clientHeart(true), target);
|
||||
}
|
||||
|
||||
public TextComponent heart(boolean isConsoleSender, boolean isHoverUnit) {
|
||||
TextColor heartColor = TextColor.fromHexString("#FF1313");
|
||||
char heart = isConsoleSender ? '\u2665' : '\u2764';
|
||||
if (isHoverUnit) {
|
||||
return Component.text(heart).color(heartColor);
|
||||
public TextComponent distanceNumber(String prettyNumber, Target target) {
|
||||
return statNumber(prettyNumber, target);
|
||||
}
|
||||
|
||||
public TextComponent distanceNumberWithHoverText(String mainNumber, String hoverNumber, String hoverUnitName, Target target) {
|
||||
return statNumberWithHoverText(mainNumber, hoverNumber, hoverUnitName, null, target);
|
||||
}
|
||||
|
||||
public TextComponent distanceNumberWithTranslatableHoverText(String mainNumber, String hoverNumber, String hoverUnitKey, Target target) {
|
||||
return statNumberWithHoverText(mainNumber, hoverNumber, null, hoverUnitKey, target);
|
||||
}
|
||||
|
||||
public TextComponent statUnit(String unitName, Target target) {
|
||||
TextComponent statUnit = getComponentBuilder(unitName,
|
||||
getColorFromString(config.getSubStatNameDecoration(target, false)),
|
||||
getStyleFromString(config.getSubStatNameDecoration(target, true)))
|
||||
.build();
|
||||
return surroundWithBrackets(statUnit);
|
||||
}
|
||||
|
||||
public TextComponent statUnitTranslatable(String unitKey, Target target) {
|
||||
TextComponent statUnit = getComponentBuilder(null,
|
||||
getColorFromString(config.getSubStatNameDecoration(target, false)),
|
||||
getStyleFromString(config.getSubStatNameDecoration(target, true)))
|
||||
.append(translatable()
|
||||
.key(unitKey))
|
||||
.build();
|
||||
return surroundWithBrackets(statUnit);
|
||||
}
|
||||
|
||||
public TextComponent clientHeart(boolean isDisplayedInHoverText) {
|
||||
TextComponent basicHeartComponent = basicHeartComponent('\u2764');
|
||||
if (isDisplayedInHoverText) {
|
||||
return basicHeartComponent;
|
||||
}
|
||||
TextComponent.Builder heartComponent = Component.text()
|
||||
.content(String.valueOf(heart))
|
||||
.color(heartColor);
|
||||
if (config.useHoverText()) {
|
||||
heartComponent.hoverEvent(HoverEvent.showText(
|
||||
text(Unit.HEART.getLabel())
|
||||
.color(MSG_HOVER_ACCENT)));
|
||||
}
|
||||
return surroundingBrackets(heartComponent.build());
|
||||
return surroundWithBrackets(basicHeartComponent);
|
||||
}
|
||||
|
||||
public TextComponent clientHeartWithHoverText() {
|
||||
TextComponent basicHeartComponent = basicHeartComponent('\u2764')
|
||||
.toBuilder()
|
||||
.hoverEvent(HoverEvent.showText(
|
||||
text(Unit.HEART.getLabel())
|
||||
.color(MSG_HOVER_ACCENT)))
|
||||
.build();
|
||||
return surroundWithBrackets(basicHeartComponent);
|
||||
}
|
||||
|
||||
public TextComponent consoleHeart() {
|
||||
return surroundWithBrackets(basicHeartComponent('\u2665'));
|
||||
}
|
||||
|
||||
//console can do u2665, u2764 looks better in-game
|
||||
private TextComponent basicHeartComponent(char heartChar) {
|
||||
return Component.text()
|
||||
.content(String.valueOf(heartChar))
|
||||
.color(HEARTS)
|
||||
.build();
|
||||
}
|
||||
|
||||
/** Returns a TextComponent for the subStatName, or an empty component.*/
|
||||
private TextComponent subStatName(@Nullable String prettySubStatName, Target selection) {
|
||||
private TextComponent subStatName(@Nullable String prettySubStatName, Target target) {
|
||||
if (prettySubStatName == null) {
|
||||
return Component.empty();
|
||||
} else {
|
||||
return getComponentBuilder(null,
|
||||
getColorFromString(config.getSubStatNameDecoration(selection, false)),
|
||||
getStyleFromString(config.getSubStatNameDecoration(selection, true)))
|
||||
getColorFromString(config.getSubStatNameDecoration(target, false)),
|
||||
getStyleFromString(config.getSubStatNameDecoration(target, true)))
|
||||
.append(text("("))
|
||||
.append(text(prettySubStatName))
|
||||
.append(text(")"))
|
||||
@ -287,11 +319,11 @@ public class ComponentFactory {
|
||||
}
|
||||
|
||||
/** Returns a TranslatableComponent for the subStatName, or an empty component.*/
|
||||
private TextComponent subStatNameTranslatable(String subStatKey, Target selection) {
|
||||
private TextComponent subStatNameTranslatable(String subStatKey, Target target) {
|
||||
if (subStatKey != null) {
|
||||
return getComponentBuilder(null,
|
||||
getColorFromString(config.getSubStatNameDecoration(selection, false)),
|
||||
getStyleFromString(config.getSubStatNameDecoration(selection, true)))
|
||||
getColorFromString(config.getSubStatNameDecoration(target, false)),
|
||||
getStyleFromString(config.getSubStatNameDecoration(target, true)))
|
||||
.append(text("("))
|
||||
.append(translatable()
|
||||
.key(subStatKey))
|
||||
@ -322,14 +354,14 @@ public class ComponentFactory {
|
||||
.args(subStat));
|
||||
}
|
||||
|
||||
private TextComponent statNumberWithHoverText(String mainNumber, String hoverNumber, @Nullable String hoverUnitName, @Nullable String hoverUnitKey, @Nullable TextComponent heart, Target selection) {
|
||||
TextColor baseColor = getColorFromString(config.getStatNumberDecoration(selection, false));
|
||||
TextDecoration style = getStyleFromString(config.getStatNumberDecoration(selection, true));
|
||||
private TextComponent statNumberWithHoverText(String mainNumber, String hoverNumber, @Nullable String hoverUnitName, @Nullable String hoverUnitKey, @Nullable TextComponent heartComponent, Target target) {
|
||||
TextColor baseColor = getColorFromString(config.getStatNumberDecoration(target, false));
|
||||
TextDecoration style = getStyleFromString(config.getStatNumberDecoration(target, true));
|
||||
|
||||
TextComponent.Builder hoverText = getComponentBuilder(hoverNumber, getLighterColor(baseColor), style);
|
||||
if (heart != null) {
|
||||
if (heartComponent != null) {
|
||||
hoverText.append(space())
|
||||
.append(heart);
|
||||
.append(heartComponent);
|
||||
}
|
||||
else if (hoverUnitKey != null) {
|
||||
hoverText.append(space())
|
||||
@ -342,7 +374,7 @@ public class ComponentFactory {
|
||||
return getComponent(mainNumber, baseColor, style).hoverEvent(HoverEvent.showText(hoverText));
|
||||
}
|
||||
|
||||
private TextComponent surroundingBrackets(TextComponent component) {
|
||||
private TextComponent surroundWithBrackets(TextComponent component) {
|
||||
return getComponent(null, BRACKETS, null)
|
||||
.append(text("["))
|
||||
.append(component)
|
||||
|
@ -23,6 +23,7 @@ public class PrideComponentFactory extends ComponentFactory {
|
||||
PREFIX = PluginColor.GOLD.getColor();
|
||||
BRACKETS = PluginColor.GRAY.getColor();
|
||||
UNDERSCORE = PluginColor.DARK_PURPLE.getColor();
|
||||
HEARTS = PluginColor.RED.getColor();
|
||||
|
||||
MSG_MAIN = PluginColor.GRAY.getColor(); //difference 1
|
||||
MSG_ACCENT = PluginColor.LIGHT_GOLD.getColor(); //difference 2
|
||||
|
@ -20,25 +20,13 @@ public final class NumberFormatter {
|
||||
/** Turns the input number into a more readable format depending on its type
|
||||
(number-of-times, time-, damage- or distance-based) according to the
|
||||
corresponding config settings, and adds commas in groups of 3.*/
|
||||
public String format(long number, Unit statUnit) {
|
||||
return format(number, statUnit, null);
|
||||
}
|
||||
|
||||
public String format(long number, Unit statUnit, Unit smallTimeUnit) {
|
||||
if (smallTimeUnit == null) {
|
||||
return switch (statUnit.getType()) {
|
||||
case DISTANCE -> formatDistance(number, statUnit);
|
||||
case DAMAGE -> formatDamage(number, statUnit);
|
||||
default -> format.format(number);
|
||||
};
|
||||
} else {
|
||||
return formatTime(number, statUnit, smallTimeUnit);
|
||||
}
|
||||
public String formatNumber(long number) {
|
||||
return format.format(number);
|
||||
}
|
||||
|
||||
/** The unit of damage-based statistics is half a heart by default.
|
||||
This method turns the number into hearts. */
|
||||
private String formatDamage(long number, Unit statUnit) { //7 statistics
|
||||
public String formatDamageNumber(long number, Unit statUnit) { //7 statistics
|
||||
if (statUnit == Unit.HEART) {
|
||||
return format.format(Math.round(number / 2.0));
|
||||
} else {
|
||||
@ -48,7 +36,7 @@ public final class NumberFormatter {
|
||||
|
||||
/** The unit of distance-based statistics is cm by default. This method turns it into blocks by default,
|
||||
and turns it into km or leaves it as cm otherwise, depending on the config settings. */
|
||||
private String formatDistance(long number, Unit statUnit) { //15 statistics
|
||||
public String formatDistanceNumber(long number, Unit statUnit) { //15 statistics
|
||||
switch (statUnit) {
|
||||
case CM -> {
|
||||
return format.format(number);
|
||||
@ -66,7 +54,7 @@ public final class NumberFormatter {
|
||||
}
|
||||
|
||||
/** The unit of time-based statistics is ticks by default.*/
|
||||
private String formatTime(long number, Unit bigUnit, Unit smallUnit) { //5 statistics
|
||||
public String formatTimeNumber(long number, Unit bigUnit, Unit smallUnit) { //5 statistics
|
||||
if (number == 0) {
|
||||
return "-";
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ public final class ReloadThread extends Thread {
|
||||
|
||||
private void reloadEverything() {
|
||||
MyLogger.setDebugLevel(config.getDebugLevel());
|
||||
OutputManager.updateMessageWriters(config);
|
||||
OutputManager.updateMessageBuilders();
|
||||
OfflinePlayerHandler.updateOfflinePlayerList(loadOfflinePlayers());
|
||||
ShareManager.updateSettings(config);
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package com.gmail.artemis.the.gr8.playerstats.statistic.request;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.api.RequestGenerator;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.Target;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Statistic;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@ -40,34 +41,31 @@ public final class StatRequest {
|
||||
private Material item;
|
||||
private boolean playerFlag;
|
||||
|
||||
/** Create a new {@link StatRequest} with default values:
|
||||
<br>- CommandSender sender (provided)
|
||||
<br>- Target <code>target</code> = {@link Target#TOP}
|
||||
<br>- boolean <code>playerFlag</code> = false
|
||||
<br>- boolean <code>isAPIRequest</code> = false
|
||||
|
||||
@param sender the CommandSender who prompted this RequestGenerator
|
||||
*/
|
||||
public StatRequest(@NotNull CommandSender sender) {
|
||||
this(sender, false);
|
||||
}
|
||||
|
||||
/** Create a new {@link StatRequest} with default values:
|
||||
<br>- CommandSender sender (provided)
|
||||
<br>- Target target = {@link Target#TOP}
|
||||
<br>- int topListSize = 10
|
||||
<br>- boolean playerFlag = false
|
||||
<br>- boolean isAPIRequest (provided)
|
||||
<br>- boolean isAPIRequest
|
||||
|
||||
@param sender the CommandSender who prompted this RequestGenerator
|
||||
@param isAPIRequest whether this RequestGenerator is coming through the API or the onCommand
|
||||
*/
|
||||
public StatRequest(@NotNull CommandSender sender, boolean isAPIRequest) {
|
||||
private StatRequest(@NotNull CommandSender sender, boolean isAPIRequest) {
|
||||
this.sender = sender;
|
||||
this.isAPIRequest = isAPIRequest;
|
||||
target = Target.TOP;
|
||||
playerFlag = false;
|
||||
}
|
||||
|
||||
public static StatRequest getBasicRequest(CommandSender sender) {
|
||||
return new StatRequest(sender, false);
|
||||
}
|
||||
|
||||
public static StatRequest getBasicAPIRequest() {
|
||||
return new StatRequest(Bukkit.getConsoleSender(), true);
|
||||
}
|
||||
|
||||
public void setAPIRequest() {
|
||||
this.isAPIRequest = true;
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ import com.gmail.artemis.the.gr8.playerstats.api.RequestGenerator;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.Target;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.EnumHandler;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.OfflinePlayerHandler;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Statistic;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@ -17,20 +16,20 @@ import org.jetbrains.annotations.NotNull;
|
||||
public record StatRequestHandler(StatRequest statRequest) implements RequestGenerator {
|
||||
|
||||
public static StatRequestHandler playerRequestHandler(String playerName) {
|
||||
StatRequest request = new StatRequest(Bukkit.getConsoleSender(), true);
|
||||
StatRequest request = StatRequest.getBasicAPIRequest();
|
||||
request.setTarget(Target.PLAYER);
|
||||
request.setPlayerName(playerName);
|
||||
return new StatRequestHandler(request);
|
||||
}
|
||||
|
||||
public static StatRequestHandler serverRequestHandler() {
|
||||
StatRequest request = new StatRequest(Bukkit.getConsoleSender(), true);
|
||||
StatRequest request = StatRequest.getBasicAPIRequest();
|
||||
request.setTarget(Target.SERVER);
|
||||
return new StatRequestHandler(request);
|
||||
}
|
||||
|
||||
public static StatRequestHandler topRequestHandler(int topListSize) {
|
||||
StatRequest request = new StatRequest(Bukkit.getConsoleSender(), true);
|
||||
StatRequest request = StatRequest.getBasicAPIRequest();
|
||||
request.setTarget(Target.TOP);
|
||||
request.setTopListSize(topListSize != 0 ? topListSize : Main.getConfigHandler().getTopListMaxSize());
|
||||
return new StatRequestHandler(request);
|
||||
@ -40,7 +39,8 @@ public record StatRequestHandler(StatRequest statRequest) implements RequestGene
|
||||
@param sender the CommandSender that requested this specific statistic
|
||||
*/
|
||||
public static StatRequestHandler internalRequestHandler(CommandSender sender) {
|
||||
StatRequest request = new StatRequest(sender);
|
||||
StatRequest request = StatRequest.getBasicRequest(sender);
|
||||
request.setTopListSize(Main.getConfigHandler().getTopListMaxSize());
|
||||
return new StatRequestHandler(request);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user