mirror of
https://github.com/itHotL/PlayerStats.git
synced 2025-02-17 01:51:35 +01:00
Finished stat-results in hover-text (#92, #52), moved random name colors to PrideComponentFactory, improved formatting
This commit is contained in:
parent
8ae089f222
commit
1307196295
@ -113,7 +113,7 @@ public final class ShareManager {
|
||||
puts the current time in the shareTimeStamp (ConcurrentHashMap),
|
||||
puts the shareCode (UUID) in the sharedResults (ArrayBlockingQueue),
|
||||
and returns the statResult. If no statResult was found, returns null.*/
|
||||
public @Nullable TextComponent getStatResult(String playerName, UUID shareCode) {
|
||||
public @Nullable StatResult getStatResult(String playerName, UUID shareCode) {
|
||||
if (statResultQueue.containsKey(shareCode)) {
|
||||
shareTimeStamp.put(playerName, Instant.now());
|
||||
|
||||
@ -132,8 +132,7 @@ public final class ShareManager {
|
||||
}
|
||||
sharedResults.offer(shareCode);
|
||||
}
|
||||
StatResult result = statResultQueue.remove(shareCode);
|
||||
return result.statResult();
|
||||
return statResultQueue.remove(shareCode);
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
|
@ -2,9 +2,9 @@ package com.gmail.artemis.the.gr8.playerstats.commands;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.ShareManager;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.StandardMessage;
|
||||
import com.gmail.artemis.the.gr8.playerstats.models.StatResult;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.OutputManager;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@ -39,11 +39,11 @@ public class ShareCommand implements CommandExecutor {
|
||||
outputManager.sendFeedbackMsg(sender, StandardMessage.STILL_ON_SHARE_COOLDOWN);
|
||||
}
|
||||
else {
|
||||
TextComponent result = shareManager.getStatResult(sender.getName(), shareCode);
|
||||
StatResult 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
|
||||
outputManager.sendFeedbackMsg(sender, StandardMessage.STAT_RESULTS_TOO_OLD);
|
||||
} else {
|
||||
outputManager.shareStatResults(sender, result);
|
||||
outputManager.shareStatResults(result.statResult());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -31,9 +31,8 @@ public enum PluginColor {
|
||||
NAME_3 (TextColor.fromHexString("#55AAFF")), //same as medium_blue
|
||||
NAME_4 (TextColor.fromHexString("#D65DB1")), //magenta-purple
|
||||
NAME_5 (TextColor.fromHexString("#EE8A19")), //dark orange
|
||||
NAME_6 (NamedTextColor.GOLD), //same as gold
|
||||
NAME_7 (TextColor.fromHexString("#01C1A7")), //aqua-cyan-green-ish
|
||||
NAME_8 (TextColor.fromHexString("46D858")); //light green
|
||||
NAME_6 (TextColor.fromHexString("#01C1A7")), //aqua-cyan-green-ish
|
||||
NAME_7 (TextColor.fromHexString("#46D858")); //light green
|
||||
|
||||
|
||||
private final TextColor color;
|
||||
@ -56,14 +55,13 @@ public enum PluginColor {
|
||||
|
||||
public static TextColor getRandomNameColor(boolean isConsole) {
|
||||
Random randomizer = new Random();
|
||||
PluginColor color = switch (randomizer.nextInt(8)) {
|
||||
PluginColor color = switch (randomizer.nextInt(7)) {
|
||||
case 0 -> NAME_1;
|
||||
case 2 -> NAME_3;
|
||||
case 3 -> NAME_4;
|
||||
case 4 -> NAME_5;
|
||||
case 5 -> NAME_6;
|
||||
case 6 -> NAME_7;
|
||||
case 7 -> NAME_8;
|
||||
default -> NAME_2;
|
||||
};
|
||||
return getCorrespondingColor(color, isConsole);
|
||||
|
@ -1,7 +1,6 @@
|
||||
package com.gmail.artemis.the.gr8.playerstats.models;
|
||||
|
||||
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;
|
||||
@ -37,10 +36,6 @@ public final class StatRequest {
|
||||
return sender instanceof ConsoleCommandSender;
|
||||
}
|
||||
|
||||
public boolean isBukkitConsoleSender() {
|
||||
return sender instanceof ConsoleCommandSender && Bukkit.getName().equalsIgnoreCase("CraftBukkit");
|
||||
}
|
||||
|
||||
public void setStatistic(Statistic statistic) {
|
||||
this.statistic = statistic;
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ public class BukkitConsoleComponentFactory extends ComponentFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextColor getRandomNameColor() {
|
||||
return PluginColor.getRandomNameColor(true);
|
||||
public TextColor getSharerNameColor() {
|
||||
return PluginColor.NAME_5.getConsoleColor();
|
||||
}
|
||||
}
|
@ -65,8 +65,8 @@ public class ComponentFactory {
|
||||
HOVER_ACCENT = PluginColor.LIGHT_GOLD.getColor();
|
||||
}
|
||||
|
||||
public TextColor getRandomNameColor() {
|
||||
return PluginColor.getRandomNameColor();
|
||||
public TextColor getSharerNameColor() {
|
||||
return PluginColor.NAME_5.getColor();
|
||||
}
|
||||
|
||||
public TextColor prefix() {
|
||||
@ -309,16 +309,13 @@ public class ComponentFactory {
|
||||
.color(HOVER_ACCENT))));
|
||||
}
|
||||
|
||||
public TextComponent messageSharedComponent() {
|
||||
public TextComponent hoveringStatResultComponent(TextComponent statResult) {
|
||||
return surroundingBracketComponent(
|
||||
text("Shared!")
|
||||
.color(CLICKED_MSG));
|
||||
}
|
||||
|
||||
public TextComponent messageSharedComponent(String playerName) {
|
||||
return messageSharedComponent(
|
||||
text(playerName)
|
||||
.color(getRandomNameColor()));
|
||||
text().append(text("Hover Here")
|
||||
.color(CLICKED_MSG)
|
||||
.decorate(TextDecoration.ITALIC)
|
||||
.hoverEvent(HoverEvent.showText(statResult)))
|
||||
.build());
|
||||
}
|
||||
|
||||
public TextComponent messageSharedComponent(Component playerName) {
|
||||
@ -328,10 +325,14 @@ public class ComponentFactory {
|
||||
.decorate(TextDecoration.ITALIC))
|
||||
.append(space())
|
||||
.append(playerName)
|
||||
.append(text("!"))
|
||||
.build());
|
||||
}
|
||||
|
||||
public TextComponent sharerNameComponent(String sharerName) {
|
||||
return text(sharerName)
|
||||
.color(getSharerNameColor());
|
||||
}
|
||||
|
||||
private TextComponent surroundingBracketComponent(TextComponent component) {
|
||||
return getComponent(null, BRACKETS, null)
|
||||
.append(text("["))
|
||||
|
@ -11,14 +11,15 @@ import com.gmail.artemis.the.gr8.playerstats.utils.EnumHandler;
|
||||
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.event.HoverEvent;
|
||||
import org.bukkit.Statistic;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.Month;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
import static net.kyori.adventure.text.Component.*;
|
||||
|
||||
@ -155,29 +156,22 @@ public class MessageWriter {
|
||||
config.getTopListMaxSize());
|
||||
}
|
||||
|
||||
public Function<UUID, TextComponent> formattedPlayerStatFunction(int stat, @NotNull StatRequest request) {
|
||||
TextComponent.Builder playerStat = Component.text()
|
||||
public BiFunction<UUID, CommandSender, TextComponent> formattedPlayerStatFunction(int stat, @NotNull StatRequest request) {
|
||||
TextComponent playerStat = Component.text()
|
||||
.append(componentFactory.playerNameBuilder(request.getPlayerName(), Target.PLAYER)
|
||||
.append(text(":"))
|
||||
.append(space()))
|
||||
.append(getStatNumberComponent(request.getStatistic(), stat, Target.PLAYER, request.isConsoleSender()))
|
||||
.append(space())
|
||||
.append(getStatNameComponent(request))
|
||||
.append(getStatUnitComponent(request.getStatistic(), request.getSelection(), request.isConsoleSender())); //space is provided by statUnitComponent
|
||||
.append(getStatUnitComponent(request.getStatistic(), request.getSelection(), request.isConsoleSender())) //space is provided by statUnitComponent
|
||||
.build();
|
||||
|
||||
return shareCode -> {
|
||||
TextComponent.Builder playerBuilder = text().append(playerStat);
|
||||
//if we're adding a share-button
|
||||
if (shareCode != null) {
|
||||
playerBuilder.append(space())
|
||||
.append(componentFactory.shareButtonComponent(shareCode));
|
||||
}
|
||||
return playerBuilder.build();
|
||||
};
|
||||
return getFormattingFunction(playerStat);
|
||||
}
|
||||
|
||||
public Function<UUID,TextComponent> formattedServerStatFunction(long stat, @NotNull StatRequest request) {
|
||||
TextComponent.Builder serverStat = text()
|
||||
public BiFunction<UUID, CommandSender, TextComponent> formattedServerStatFunction(long stat, @NotNull StatRequest request) {
|
||||
TextComponent serverStat = text()
|
||||
.append(componentFactory.titleComponent(config.getServerTitle(), Target.SERVER))
|
||||
.append(space())
|
||||
.append(componentFactory.serverNameComponent(config.getServerName()))
|
||||
@ -185,57 +179,77 @@ public class MessageWriter {
|
||||
.append(getStatNumberComponent(request.getStatistic(), stat, Target.SERVER, request.isConsoleSender()))
|
||||
.append(space())
|
||||
.append(getStatNameComponent(request))
|
||||
.append(getStatUnitComponent(request.getStatistic(), request.getSelection(), request.isConsoleSender())); //space is provided by statUnit
|
||||
.append(getStatUnitComponent(request.getStatistic(), request.getSelection(), request.isConsoleSender())) //space is provided by statUnit
|
||||
.build();
|
||||
|
||||
return shareCode -> {
|
||||
TextComponent.Builder serverBuilder = text().append(serverStat);
|
||||
//if we're adding a share-button
|
||||
if (shareCode != null) {
|
||||
serverBuilder.append(space())
|
||||
.append(componentFactory.shareButtonComponent(shareCode));
|
||||
}
|
||||
return serverBuilder.build();
|
||||
};
|
||||
return getFormattingFunction(serverStat);
|
||||
}
|
||||
public Function<UUID, TextComponent> formattedTopStatFunction(@NotNull LinkedHashMap<String, Integer> topStats, @NotNull StatRequest request) {
|
||||
|
||||
public BiFunction<UUID, CommandSender, TextComponent> formattedTopStatFunction(@NotNull LinkedHashMap<String, Integer> topStats, @NotNull StatRequest request) {
|
||||
TextComponent title = getTopStatsTitle(request, topStats.size());
|
||||
TextComponent shortTitle = getTopStatsTitleShort(request, topStats.size());
|
||||
TextComponent list = getTopStatList(topStats, request);
|
||||
|
||||
return shareCode -> {
|
||||
TextComponent.Builder topBuilder = text();
|
||||
return (shareCode, sender) -> {
|
||||
TextComponent.Builder topBuilder = text().append(newline());
|
||||
|
||||
//if we're adding a share-button
|
||||
if (shareCode != null) {
|
||||
TextComponent newLineTitle = newline().append(title);
|
||||
topBuilder
|
||||
.append(newLineTitle)
|
||||
.append(space())
|
||||
.append(componentFactory.shareButtonComponent(shareCode));
|
||||
} else {
|
||||
topBuilder.append(title);
|
||||
topBuilder.append(title)
|
||||
.append(space())
|
||||
.append(componentFactory.shareButtonComponent(shareCode))
|
||||
.append(list);
|
||||
}
|
||||
//if we're not adding a share-button or a "shared by" component
|
||||
else if (sender == null) {
|
||||
topBuilder.append(title)
|
||||
.append(list);
|
||||
}
|
||||
//if we're adding a "shared by" component
|
||||
else {
|
||||
topBuilder.append(shortTitle)
|
||||
.append(space())
|
||||
.append(componentFactory.hoveringStatResultComponent(text()
|
||||
.append(title)
|
||||
.append(list)
|
||||
.build()))
|
||||
.append(newline())
|
||||
.append(componentFactory.messageSharedComponent(
|
||||
getSharerNameComponent(sender)));
|
||||
}
|
||||
topBuilder.append(list);
|
||||
return topBuilder.build();
|
||||
};
|
||||
}
|
||||
|
||||
//TODO add fancy hover-text with sharedResults
|
||||
public TextComponent messageShared(TextComponent statResults) {
|
||||
return componentFactory.messageSharedComponent()
|
||||
.hoverEvent(HoverEvent.showText(statResults));
|
||||
private BiFunction<UUID, CommandSender, TextComponent> getFormattingFunction(@NotNull TextComponent statResult) {
|
||||
return (shareCode, sender) -> {
|
||||
TextComponent.Builder statBuilder = text().append(newline());
|
||||
|
||||
//if we're adding a share-button
|
||||
if (shareCode != null) {
|
||||
statBuilder.append(statResult)
|
||||
.append(space())
|
||||
.append(componentFactory.shareButtonComponent(shareCode));
|
||||
}
|
||||
//if we're adding a "shared by" component
|
||||
else if (sender != null) {
|
||||
statBuilder.append(statResult)
|
||||
.append(newline())
|
||||
.append(componentFactory.messageSharedComponent(
|
||||
getSharerNameComponent(sender)));
|
||||
}
|
||||
return statBuilder.build();
|
||||
};
|
||||
}
|
||||
|
||||
public TextComponent addSharedSignature(TextComponent statResults, String playerName) {
|
||||
return statResults.append(newline())
|
||||
.append(componentFactory.messageSharedComponent(playerName));
|
||||
}
|
||||
|
||||
public TextComponent addSharedSignature(TextComponent statResults, Component playerName) {
|
||||
return statResults.append(newline())
|
||||
.append(componentFactory.messageSharedComponent(playerName));
|
||||
}
|
||||
|
||||
public TextComponent startWithNewLine(TextComponent component) {
|
||||
return newline().append(component);
|
||||
private Component getSharerNameComponent(CommandSender sender) {
|
||||
if (sender instanceof Player player) {
|
||||
Component senderName = EasterEggProvider.getPlayerName(player);
|
||||
if (senderName != null) {
|
||||
return senderName;
|
||||
}
|
||||
}
|
||||
return componentFactory.sharerNameComponent(sender.getName());
|
||||
}
|
||||
|
||||
private TextComponent getTopStatsTitle(StatRequest request, int statListSize) {
|
||||
@ -248,6 +262,14 @@ public class MessageWriter {
|
||||
.build();
|
||||
}
|
||||
|
||||
private TextComponent getTopStatsTitleShort(StatRequest request, int statListSize) {
|
||||
return Component.text()
|
||||
.append(componentFactory.titleComponent(config.getTopStatsTitle(), Target.TOP)).append(space())
|
||||
.append(componentFactory.titleNumberComponent(statListSize)).append(space())
|
||||
.append(getStatNameComponent(request)) //space is provided by statUnitComponent
|
||||
.build();
|
||||
}
|
||||
|
||||
private TextComponent getTopStatList(LinkedHashMap<String, Integer> topStats, StatRequest request) {
|
||||
TextComponent.Builder topList = Component.text();
|
||||
boolean useDots = config.useDots();
|
||||
|
@ -5,20 +5,17 @@ import com.gmail.artemis.the.gr8.playerstats.ShareManager;
|
||||
import com.gmail.artemis.the.gr8.playerstats.config.ConfigHandler;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.StandardMessage;
|
||||
import com.gmail.artemis.the.gr8.playerstats.models.StatRequest;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.msgutils.EasterEggProvider;
|
||||
import net.kyori.adventure.identity.Identity;
|
||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import org.bukkit.Statistic;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.EnumMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.UUID;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.Function;
|
||||
|
||||
import static com.gmail.artemis.the.gr8.playerstats.enums.StandardMessage.*;
|
||||
@ -78,59 +75,46 @@ public class OutputManager {
|
||||
adventure.sender(sender).sendMessage(getWriter(sender).helpMsg());
|
||||
}
|
||||
|
||||
public void shareStatResults(CommandSender sender, @NotNull TextComponent statResult) {
|
||||
if (sender instanceof Player player) {
|
||||
TextComponent totalResult;
|
||||
public void shareStatResults(@NotNull TextComponent statResult) {
|
||||
adventure.players()
|
||||
// .filterAudience(onlinePlayer -> !onlinePlayer.get(Identity.NAME)
|
||||
// .orElse("").equalsIgnoreCase(sender.getName()))
|
||||
.sendMessage(statResult);
|
||||
|
||||
Component playerName = EasterEggProvider.getPlayerName(player);
|
||||
if (playerName == null) {
|
||||
totalResult = msg.addSharedSignature(statResult, sender.getName());
|
||||
} else {
|
||||
totalResult = msg.addSharedSignature(statResult, playerName);
|
||||
}
|
||||
totalResult = msg.startWithNewLine(totalResult);
|
||||
|
||||
adventure.players()
|
||||
// .filterAudience(onlinePlayer -> !onlinePlayer.get(Identity.NAME)
|
||||
// .orElse("").equalsIgnoreCase(sender.getName()))
|
||||
.sendMessage(totalResult);
|
||||
|
||||
adventure.sender(sender).sendMessage(msg.messageShared(statResult));
|
||||
}
|
||||
}
|
||||
|
||||
public void sendPlayerStat(StatRequest request, int playerStat) {
|
||||
public void sendPlayerStat(@NotNull StatRequest request, int playerStat) {
|
||||
CommandSender sender = request.getCommandSender();
|
||||
Function<UUID, TextComponent> buildFunction =
|
||||
BiFunction<UUID, CommandSender, TextComponent> buildFunction =
|
||||
getWriter(sender).formattedPlayerStatFunction(playerStat, request);
|
||||
|
||||
processAndSend(sender, buildFunction);
|
||||
}
|
||||
|
||||
public void sendServerStat(StatRequest request, long serverStat) {
|
||||
public void sendServerStat(@NotNull StatRequest request, long serverStat) {
|
||||
CommandSender sender = request.getCommandSender();
|
||||
Function<UUID, TextComponent> buildFunction =
|
||||
BiFunction<UUID, CommandSender, TextComponent> buildFunction =
|
||||
getWriter(sender).formattedServerStatFunction(serverStat, request);
|
||||
|
||||
processAndSend(sender, buildFunction);
|
||||
}
|
||||
|
||||
public void sendTopStat(StatRequest request, LinkedHashMap<String, Integer> topStats) {
|
||||
public void sendTopStat(@NotNull StatRequest request, LinkedHashMap<String, Integer> topStats) {
|
||||
CommandSender sender = request.getCommandSender();
|
||||
Function<UUID, TextComponent> buildFunction =
|
||||
BiFunction<UUID, CommandSender, TextComponent> buildFunction =
|
||||
getWriter(sender).formattedTopStatFunction(topStats, request);
|
||||
|
||||
processAndSend(sender, buildFunction);
|
||||
}
|
||||
|
||||
private void processAndSend(CommandSender sender, Function<UUID, TextComponent> buildFunction) {
|
||||
private void processAndSend(CommandSender sender, BiFunction<UUID, CommandSender, TextComponent> buildFunction) {
|
||||
if (shareManager.isEnabled() && shareManager.senderHasPermission(sender)) {
|
||||
|
||||
UUID shareCode = shareManager.saveStatResult(sender.getName(), buildFunction.apply(null));
|
||||
adventure.sender(sender).sendMessage(buildFunction.apply(shareCode));
|
||||
UUID shareCode = shareManager.saveStatResult(sender.getName(), buildFunction.apply(null, sender));
|
||||
adventure.sender(sender).sendMessage(buildFunction.apply(shareCode, null));
|
||||
}
|
||||
else {
|
||||
adventure.sender(sender).sendMessage(buildFunction.apply(null));
|
||||
adventure.sender(sender).sendMessage(buildFunction.apply(null, null));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,7 @@ 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.format.TextColor;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
|
||||
import static net.kyori.adventure.text.Component.*;
|
||||
@ -33,6 +34,11 @@ public class PrideComponentFactory extends ComponentFactory {
|
||||
HOVER_ACCENT = PluginColor.LIGHT_GOLD.getColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextColor getSharerNameColor() {
|
||||
return PluginColor.getRandomNameColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextComponent prefixTitleComponent() {
|
||||
String title = "<rainbow:16>____________ [PlayerStats] ____________</rainbow>"; //12 underscores
|
||||
|
@ -46,7 +46,7 @@ public class ExampleMessage implements TextComponent {
|
||||
.append(text("deaths ").color(componentFactory.msgAccent())
|
||||
.append(text("player ").color(componentFactory.msgAccent2())
|
||||
.append(text("Artemis_the_gr8")
|
||||
.color(componentFactory.getRandomNameColor()))))));
|
||||
.color(componentFactory.getSharerNameColor()))))));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
Reference in New Issue
Block a user