Started experimenting with serializing my Components into String

This commit is contained in:
Artemis-the-gr8 2022-07-25 17:33:16 +02:00
parent 8be8d7962a
commit fe4f5db12e
6 changed files with 56 additions and 19 deletions

View File

@ -63,12 +63,6 @@
<version>4.11.0</version> <version>4.11.0</version>
</dependency> </dependency>
<dependency>
<groupId>net.kyori</groupId>
<artifactId>adventure-text-serializer-plain</artifactId>
<version>4.11.0</version>
</dependency>
<dependency> <dependency>
<groupId>me.clip</groupId> <groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId> <artifactId>placeholderapi</artifactId>

View File

@ -2,14 +2,22 @@ package com.gmail.artemis.the.gr8.playerstats.api;
import com.gmail.artemis.the.gr8.playerstats.Main; import com.gmail.artemis.the.gr8.playerstats.Main;
import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.ComponentIteratorType;
import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import net.kyori.adventure.text.TranslatableComponent;
import net.kyori.adventure.text.renderer.TranslatableComponentRenderer;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Statistic; import org.bukkit.Statistic;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Locale;
import static net.kyori.adventure.translation.GlobalTranslator.renderer;
/** This is the outgoing API that you can use to access the core functionality of PlayerStats. /** This is the outgoing API that you can use to access the core functionality of PlayerStats.
To work with it, you need to call PlayerStats.{@link #getAPI()} to get an instance of {@link PlayerStatsAPI}. To work with it, you need to call PlayerStats.{@link #getAPI()} to get an instance of {@link PlayerStatsAPI}.
You can then use this object to access any of the further methods. You can then use this object to access any of the further methods.
@ -42,7 +50,7 @@ public interface PlayerStats {
Adventure's TextComponents, you can call this method to turn any stat-result into a String. Adventure's TextComponents, you can call this method to turn any stat-result into a String.
@return a String representation of this TextComponent, without color and style, but with line-breaks*/ @return a String representation of this TextComponent, without color and style, but with line-breaks*/
default String statResultComponentToString(TextComponent statResult) { default String statResultComponentToString(TextComponent statResult) {
return PlainTextComponentSerializer.plainText().serialize(statResult); return LegacyComponentSerializer.builder().hexColors().build().serialize(statResult);
} }
/** Get a formatted player-statistic of Statistic.Type UNTYPED. /** Get a formatted player-statistic of Statistic.Type UNTYPED.

View File

@ -4,16 +4,15 @@ import com.gmail.artemis.the.gr8.playerstats.ThreadManager;
import com.gmail.artemis.the.gr8.playerstats.msg.OutputManager; import com.gmail.artemis.the.gr8.playerstats.msg.OutputManager;
import com.gmail.artemis.the.gr8.playerstats.statistic.RequestManager; import com.gmail.artemis.the.gr8.playerstats.statistic.RequestManager;
import com.gmail.artemis.the.gr8.playerstats.models.StatRequest; import com.gmail.artemis.the.gr8.playerstats.models.StatRequest;
import net.md_5.bungee.api.ChatColor; import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
import net.md_5.bungee.api.chat.TextComponent; import net.kyori.adventure.text.Component;
import org.bukkit.Color; import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.awt.*;
public class StatCommand implements CommandExecutor { public class StatCommand implements CommandExecutor {
@ -38,10 +37,28 @@ public class StatCommand implements CommandExecutor {
} }
else if (args[0].equalsIgnoreCase(">:(")) { else if (args[0].equalsIgnoreCase(">:(")) {
java.awt.Color color = new java.awt.Color(178, 102, 255); java.awt.Color color = new java.awt.Color(178, 102, 255);
ChatColor one = ChatColor.of(color); // ChatColor one = ChatColor.of(color);
TextComponent msg = new TextComponent(">:((((("); // TextComponent msg = new TextComponent(">:(((((");
msg.setColor(one); // msg.setColor(one);
sender.spigot().sendMessage(msg); // sender.spigot().sendMessage(msg);
// sender.sendMessage("regular msg with ChatColor: " + one + ">:((((((");
// sender.sendMessage("regular msg Component.toLegacyText: " + msg.toLegacyText());
// sender.sendMessage("regular msg Component.toString: " + msg);
}
else if (args[0].equalsIgnoreCase(">:((")) {
Component msg = MiniMessage.miniMessage().deserialize("<gradient:#f74040:#FF6600:#f74040>fire demon</gradient>");
String msgString = LegacyComponentSerializer.builder().hexColors().build().serialize(msg);
sender.sendMessage("LCS.hexColors(): " + msgString);
MyLogger.logMsg(msgString);
String msgString2 = LegacyComponentSerializer.legacySection().serialize(msg);
sender.sendMessage("LCS.legacySection: " + msgString2);
MyLogger.logMsg(msgString2);
//only this one works both in-game and in-console
String msgString3 = LegacyComponentSerializer.builder().hexColors().useUnusualXRepeatedCharacterHexFormat().build().serialize(msg);
sender.sendMessage("LCS.hexColors().spigotformat...: " + msgString3);
MyLogger.logMsg(msgString3);
} }
else { else {
StatRequest request = requestManager.generateRequest(sender, args); StatRequest request = requestManager.generateRequest(sender, args);

View File

@ -15,7 +15,7 @@ import org.jetbrains.annotations.NotNull;
public final class StatRequest { public final class StatRequest {
private final CommandSender sender; private final CommandSender sender;
private final boolean isAPIRequest; private boolean isAPIRequest;
private Statistic statistic; private Statistic statistic;
private String playerName; private String playerName;
private Target selection; private Target selection;
@ -38,6 +38,10 @@ public final class StatRequest {
playerFlag = false; playerFlag = false;
} }
public void setAPIRequest() {
this.isAPIRequest = true;
}
public boolean isAPIRequest() { public boolean isAPIRequest() {
return isAPIRequest; return isAPIRequest;
} }

View File

@ -62,6 +62,9 @@ public class RequestManager implements RequestGenerator {
request.setPlayerName(arg); request.setPlayerName(arg);
request.setSelection(Target.PLAYER); request.setSelection(Target.PLAYER);
} }
else if (arg.equalsIgnoreCase("api")) {
request.setAPIRequest();
}
} }
patchRequest(request); patchRequest(request);
return request; return request;

View File

@ -8,6 +8,8 @@ import com.gmail.artemis.the.gr8.playerstats.reload.ReloadThread;
import com.gmail.artemis.the.gr8.playerstats.ThreadManager; import com.gmail.artemis.the.gr8.playerstats.ThreadManager;
import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger; import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import net.md_5.bungee.api.chat.BaseComponent;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.*; import java.util.*;
@ -63,7 +65,16 @@ public class StatThread extends Thread {
case TOP -> outputManager.formatTopStat(request, statManager.getTopStats(request)); case TOP -> outputManager.formatTopStat(request, statManager.getTopStats(request));
case SERVER -> outputManager.formatServerStat(request, statManager.getServerStat(request)); case SERVER -> outputManager.formatServerStat(request, statManager.getServerStat(request));
}; };
outputManager.sendToCommandSender(request.getCommandSender(), statResult); if (request.isAPIRequest()) {
String msg = LegacyComponentSerializer.builder().hexColors().build().serialize(statResult);
request.getCommandSender().sendMessage(msg);
String msg2 = LegacyComponentSerializer.builder().hexColors().useUnusualXRepeatedCharacterHexFormat().build().serialize(statResult);
request.getCommandSender().sendMessage(msg2);
}
else {
outputManager.sendToCommandSender(request.getCommandSender(), statResult);
}
} }
catch (ConcurrentModificationException e) { catch (ConcurrentModificationException e) {
if (!request.isConsoleSender()) { if (!request.isConsoleSender()) {