Skip to content

Commit

Permalink
v2.1.2
Browse files Browse the repository at this point in the history
Add new MiniMessageWrapper for parsing text into MiniMessage with additions configuration options.
Needs more testing before release.
  • Loading branch information
Majekdor committed Sep 29, 2021
1 parent 14b5f12 commit d5de5a2
Show file tree
Hide file tree
Showing 9 changed files with 410 additions and 124 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>dev.majek.hexnicks</groupId>
<artifactId>HexNicks</artifactId>
<version>2.1.1</version>
<version>2.1.2</version>
<packaging>jar</packaging>

<name>HexNicks</name>
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/dev/majek/hexnicks/Nicks.java
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ public static StorageMethod storage() {
* @param x Object to log.
*/
public static void log(@NotNull Object x) {
core().getLogger().info(x.toString());
core().getSLF4JLogger().info(x.toString());
}

/**
Expand All @@ -302,7 +302,7 @@ public static void log(@NotNull Object x) {
*/
public static void debug(@NotNull Object x) {
if (config().DEBUG) {
core().getLogger().warning(x.toString());
core().getSLF4JLogger().debug(x.toString());
}
}

Expand All @@ -312,7 +312,7 @@ public static void debug(@NotNull Object x) {
* @param x Object to log.
*/
public static void error(@NotNull Object x) {
core().getLogger().severe(x.toString());
core().getSLF4JLogger().error(x.toString());
}

/**
Expand Down
26 changes: 7 additions & 19 deletions src/main/java/dev/majek/hexnicks/command/CommandNick.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@
import dev.majek.hexnicks.config.NicksMessages;
import java.util.Collections;
import java.util.List;

import dev.majek.hexnicks.util.MiniMessageWrapper;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
Expand Down Expand Up @@ -60,25 +60,13 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command

String nickInput = String.join(" ", args);

// Check if we're supporting legacy
if (Nicks.config().LEGACY_COLORS) {
nickInput = Nicks.utils().legacyToMini(nickInput);
}

MiniMessageWrapper wrapper = new MiniMessageWrapper(nickInput);

// Check permissions for colors
if(!player.hasPermission("hexnicks.nick.gradient")) {
wrapper.removeGradients();
}
if(!player.hasPermission("hexnicks.nick.hex")) {
wrapper.removeHex();
}
if(!player.hasPermission("hexnicks.nick.color")) {
wrapper.removeAllTokens();
}
Component nickname = MiniMessageWrapper.builder()
.gradients(player.hasPermission("hexnicks.nick.gradient"))
.hexColors(player.hasPermission("hexnicks.nick.hex"))
.standardColors(player.hasPermission("hexnicks.nick.color"))
.legacyColors(Nicks.config().LEGACY_COLORS)
.build().mmParse(nickInput);

Component nickname = wrapper.mmParse();
String plainTextNick = PlainTextComponentSerializer.plainText().serialize(nickname);
int maxLength = Nicks.config().MAX_LENGTH;
int minLength = Nicks.config().MIN_LENGTH;
Expand Down
20 changes: 7 additions & 13 deletions src/main/java/dev/majek/hexnicks/command/CommandNickColor.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,23 +74,17 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command
return true;
}

MiniMessageWrapper wrapper = new MiniMessageWrapper(nickInput);

// Check permissions for colors
if(!player.hasPermission("hexnicks.nick.gradient")) {
wrapper.removeGradients();
}
if(!player.hasPermission("hexnicks.nick.hex")) {
wrapper.removeHex();
}
if(!player.hasPermission("hexnicks.nick.color")) {
wrapper.removeAllTokens();
}
MiniMessageWrapper wrapper = MiniMessageWrapper.builder()
.gradients(player.hasPermission("hexnicks.nick.gradient"))
.hexColors(player.hasPermission("hexnicks.nick.hex"))
.standardColors(player.hasPermission("hexnicks.nick.color"))
.legacyColors(Nicks.config().LEGACY_COLORS)
.build();

// Get the players current nickname to apply color codes to
String plainTextNick = PlainTextComponentSerializer.plainText()
.serialize(Nicks.core().getDisplayName(player));
Component nickname = MiniMessage.miniMessage().parse(wrapper.mmString() + plainTextNick);
Component nickname = wrapper.mmParse(wrapper.mmString(nickInput) + plainTextNick);

// Call event
NickColorEvent colorEvent = new NickColorEvent(player, nickname,
Expand Down
27 changes: 7 additions & 20 deletions src/main/java/dev/majek/hexnicks/server/PaperServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,13 @@
package dev.majek.hexnicks.server;

import dev.majek.hexnicks.Nicks;
import dev.majek.hexnicks.util.MiniMessageWrapper;
import io.papermc.paper.event.player.AsyncChatEvent;
import java.util.Arrays;
import java.util.List;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextReplacementConfig;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextDecoration;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.transformation.Transformation;
import net.kyori.adventure.text.minimessage.transformation.TransformationRegistry;
import net.kyori.adventure.text.minimessage.transformation.TransformationType;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.bukkit.command.CommandSender;
Expand Down Expand Up @@ -94,16 +90,9 @@ public String softwareName() {
* @param event AsyncChatEvent.
*/
@EventHandler(priority = EventPriority.LOWEST)
@SuppressWarnings("unchecked")
public void onChat(AsyncChatEvent event) {
if (Nicks.config().CHAT_FORMATTER) {
Nicks.debug("paper chat event fired");
List<? extends TransformationType<? extends Transformation>> allTransformations = Arrays.asList(
TransformationType.CLICK_EVENT, TransformationType.COLOR, TransformationType.DECORATION, TransformationType.FONT,
TransformationType.GRADIENT, TransformationType.HOVER_EVENT, TransformationType.INSERTION, TransformationType.KEYBIND,
TransformationType.RAINBOW, TransformationType.TRANSLATABLE);
List<? extends TransformationType<? extends Transformation>> colorTransformations = Arrays.asList(
TransformationType.COLOR, TransformationType.DECORATION, TransformationType.GRADIENT, TransformationType.RAINBOW);
event.renderer((source, sourceDisplayName, message, viewer) -> MiniMessage.miniMessage().parse(Nicks.config().CHAT_FORMAT)
.replaceText(TextReplacementConfig.builder().matchLiteral("{displayname}").replacement(Nicks.core().getDisplayName(source)).build())
.replaceText(TextReplacementConfig.builder().matchLiteral("{prefix}").replacement(LegacyComponentSerializer.builder().hexColors()
Expand All @@ -112,14 +101,12 @@ public void onChat(AsyncChatEvent event) {
.useUnusualXRepeatedCharacterHexFormat().build().deserialize(Nicks.hooks().vaultSuffix(source))).build())
.replaceText(TextReplacementConfig.builder().matchLiteral("{message}").replacement(
Nicks.config().LEGACY_COLORS ?
MiniMessage.builder().transformations(TransformationRegistry.builder().add(
source.hasPermission("hexnicks.chat.advanced") ? allTransformations.toArray(new TransformationType[0])
: colorTransformations.toArray(new TransformationType[0])).build()).build()
.parse(Nicks.utils().legacyToMini(PlainTextComponentSerializer.plainText().serialize(message))) :
MiniMessage.builder().transformations(TransformationRegistry.builder().add(
source.hasPermission("hexnicks.chat.advanced") ? allTransformations.toArray(new TransformationType[0])
: colorTransformations.toArray(new TransformationType[0])).build()).build()
.parse(PlainTextComponentSerializer.plainText().serialize(message))
MiniMessageWrapper.builder().legacyColors(true)
.advancedTransformations(source.hasPermission("hexnicks.chat.advanced")).build()
.mmParse(PlainTextComponentSerializer.plainText().serialize(message)) :
MiniMessageWrapper.builder()
.advancedTransformations(source.hasPermission("hexnicks.chat.advanced")).build()
.mmParse(PlainTextComponentSerializer.plainText().serialize(message))
).build()));
}
}
Expand Down
128 changes: 81 additions & 47 deletions src/main/java/dev/majek/hexnicks/util/MiniMessageWrapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,77 +26,111 @@

import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.transformation.TransformationType;
import net.kyori.adventure.util.Buildable;
import org.jetbrains.annotations.NotNull;

public class MiniMessageWrapper {

private String mmString;
/**
* A wrapper for {@link MiniMessage} to add a few more methods for more customization.
*
* @since 2.1.2
*/
public interface MiniMessageWrapper extends Buildable<MiniMessageWrapper, MiniMessageWrapper.Builder> {

/**
* Create a new wrapper with a string with {@link MiniMessage} tags to eventually be parsed.
* Gets a simple instance with legacy code support.
*
* @param mmString String with {@link MiniMessage} tags.
* @return a simple instance
* @since 2.1.2
*/
public MiniMessageWrapper(@NotNull String mmString) {
this.mmString = mmString;
static @NotNull MiniMessageWrapper legacy() {
return MiniMessageWrapperImpl.LEGACY;
}

/**
* Remove {@link MiniMessage}'s hex color code tokens.
* Parse a string into a {@link Component} using {@link MiniMessage}.
*
* @return Wrapper.
* @param mmString the string to parse
* @return component
* @since 2.1.2
*/
public MiniMessageWrapper removeHex() {
this.mmString = this.mmString.replaceAll("<#([0-9a-fA-F]{6})>", "");
this.mmString = this.mmString.replaceAll("</#([0-9a-fA-F]{6})>", "");
this.mmString = this.mmString.replaceAll("<c:#([0-9a-fA-F]{6})>", "");
this.mmString = this.mmString.replaceAll("</c:#([0-9a-fA-F]{6})>", "");
this.mmString = this.mmString.replaceAll("</c>", "");
this.mmString = this.mmString.replaceAll("<color:#([0-9a-fA-F]{6})>", "");
this.mmString = this.mmString.replaceAll("</color:#([0-9a-fA-F]{6})>", "");
this.mmString = this.mmString.replaceAll("</color>", "");
this.mmString = this.mmString.replaceAll("<colour:#([0-9a-fA-F]{6})>", "");
this.mmString = this.mmString.replaceAll("</colour:#([0-9a-fA-F]{6})>", "");
this.mmString = this.mmString.replaceAll("</colour>", "");
return this;
}
@NotNull Component mmParse(@NotNull String mmString);

/**
* Remove {@link MiniMessage}'s gradient tokens.
* Get the modified string.
*
* @return Wrapper.
* @param mmString string to modify with settings from builder
* @return modified string
* @since 2.1.2
*/
public MiniMessageWrapper removeGradients() {
this.mmString = this.mmString.replaceAll("<gradient([:#0-9a-fA-F]{8})+>", "");
this.mmString = this.mmString.replaceAll("</gradient>", "");
return this;
}
@NotNull String mmString(@NotNull String mmString);

/**
* Remove all of {@link MiniMessage}'s tokens.
* Creates a new {@link MiniMessageWrapper.Builder}.
*
* @return Wrapper.
* @return a builder
* @since 2.1.2
*/
public MiniMessageWrapper removeAllTokens() {
this.mmString = MiniMessage.miniMessage().stripTokens(mmString);
return this;
static @NotNull Builder builder() {
return new MiniMessageWrapperImpl.BuilderImpl();
}

/**
* Parse the string passed through in the constructor with {@link MiniMessage}.
* A builder for {@link MiniMessageWrapper}.
*
* @return Parsed {@link Component}.
* @since 2.1.2
*/
public Component mmParse() {
return MiniMessage.miniMessage().parse(mmString);
}
interface Builder extends Buildable.Builder<MiniMessageWrapper> {

/**
* Return the modified string passed through in the constructor.
*
* @return Modified string.
*/
public String mmString() {
return mmString;
/**
* Whether gradients on the final string should be parsed.
* Default is true.
*
* @param parse whether to parse
* @return this builder
* @since 2.1.2
*/
@NotNull Builder gradients(boolean parse);

/**
* Whether hex colors on the final string should be parsed.
* Default is true.
*
* @param parse whether to parse
* @return this builder
* @since 2.1.2
*/
@NotNull Builder hexColors(boolean parse);

/**
* Whether all standard color codes on the final string should be parsed.
* Default is true.
*
* @param parse whether to parse
* @return this builder
* @since 2.1.2
*/
@NotNull Builder standardColors(boolean parse);

/**
* Whether legacy color codes on the final string should be parsed.
* Default is false.
*
* @param parse whether to parse
* @return this builder
* @since 2.1.2
*/
@NotNull Builder legacyColors(boolean parse);

/**
* Whether to parse advanced {@link TransformationType}s on the final string to be parsed.
* This includes click events, hover events, fonts, etc.
* Default is false.
*
* @param advancedTransformations whether to parse
* @return this builder
* @since 2.1.2
*/
@NotNull Builder advancedTransformations(boolean advancedTransformations);
}
}
Loading

0 comments on commit d5de5a2

Please sign in to comment.