diff --git a/build.gradle.kts b/build.gradle.kts index 22b7124..f97901c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,19 +20,19 @@ repositories { } dependencies { - compileOnly("org.projectlombok:lombok:1.18.42") - annotationProcessor("org.projectlombok:lombok:1.18.42") - compileOnly("io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT") - compileOnly("dev.plex:server:1.6") - compileOnly("net.essentialsx:EssentialsX:2.21.2-SNAPSHOT") + compileOnly("org.projectlombok:lombok:1.18.46") + annotationProcessor("org.projectlombok:lombok:1.18.46") + compileOnly("io.papermc.paper:paper-api:26.1.2.build.+") + compileOnly("dev.plex:api:2.0-SNAPSHOT") + compileOnly("net.essentialsx:EssentialsX:2.22.0-SNAPSHOT") } group = "dev.plex" -version = "1.6" +version = "2.0-SNAPSHOT" description = "Module-NickMiniMessage" java { - toolchain.languageVersion.set(JavaLanguageVersion.of(21)) + toolchain.languageVersion.set(JavaLanguageVersion.of(25)) } publishing { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index a4b76b9..b1b8ef5 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index bad7c24..b52fb7e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,9 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-bin.zip networkTimeout=10000 +retries=0 +retryBackOffMs=500 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index f5feea6..b9bb139 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -57,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -115,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -173,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -206,15 +203,14 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 9b42019..aa5f10b 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -23,8 +23,8 @@ @rem @rem ########################################################################## -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. @@ -51,7 +51,7 @@ echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% @@ -65,30 +65,18 @@ echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% diff --git a/src/main/java/dev/plex/module/nickmm/command/NickMMCommand.java b/src/main/java/dev/plex/module/nickmm/command/NickMMCommand.java index ac69fbe..f005107 100644 --- a/src/main/java/dev/plex/module/nickmm/command/NickMMCommand.java +++ b/src/main/java/dev/plex/module/nickmm/command/NickMMCommand.java @@ -2,18 +2,22 @@ package dev.plex.module.nickmm.command; import com.earth2me.essentials.I18n; import com.earth2me.essentials.User; -import dev.plex.command.PlexCommand; -import dev.plex.command.annotation.CommandParameters; -import dev.plex.command.annotation.CommandPermissions; +import dev.plex.command.SimplePlexCommand; import dev.plex.command.source.RequiredCommandSource; import dev.plex.module.nickmm.NickMiniMessageModule; -import dev.plex.util.minimessage.SafeMiniMessage; +import java.util.Arrays; import java.util.Collections; import java.util.List; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.minimessage.Context; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.minimessage.ParsingException; +import net.kyori.adventure.text.minimessage.tag.Tag; +import net.kyori.adventure.text.minimessage.tag.resolver.ArgumentQueue; +import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.Bukkit; @@ -22,12 +26,22 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -@CommandParameters(name = "nickmm", description = "Change your nickname using MiniMessage formatting!", usage = "/ ", aliases = "nickminimessage") -@CommandPermissions(permission = "plex.nickmm", source = RequiredCommandSource.IN_GAME) -public class NickMMCommand extends PlexCommand +public class NickMMCommand extends SimplePlexCommand { private final PlainTextComponentSerializer plainText = PlainTextComponentSerializer.plainText(); private final LegacyComponentSerializer legacyComponent = LegacyComponentSerializer.legacySection(); + private final MiniMessage miniMessage = MiniMessage.builder().tags(new NicknameTagResolver()).build(); + + public NickMMCommand() + { + super(command("nickmm") + .description("Change your nickname using MiniMessage formatting!") + .usage("/ ") + .aliases("nickminimessage") + .permission("plex.nickmm") + .source(RequiredCommandSource.IN_GAME) + .build()); + } @Override protected Component execute(@NotNull CommandSender commandSender, @Nullable Player player, @NotNull String[] args) @@ -42,7 +56,7 @@ public class NickMMCommand extends PlexCommand return usage(); } - final Component nick = SafeMiniMessage.mmDeserializeWithoutEvents(args[0]); + final Component nick = miniMessage.deserialize(args[0]).clickEvent(null).hoverEvent(null); final String plain = plainText.serialize(nick); if (plain.length() > NickMiniMessageModule.getEssentials().getSettings().getMaxNickLength() @@ -65,14 +79,45 @@ public class NickMMCommand extends PlexCommand } final String legacy = legacyComponent.serialize(nick); - NickMiniMessageModule.getEssentials().getUser(player).setNickname(legacy); + User essentialsUser = NickMiniMessageModule.getEssentials().getUser(player); + essentialsUser.setNickname(legacy); + essentialsUser.setDisplayNick(); return mmString(I18n.tlLiteral("nickSet", legacy)); } @Override - public @NotNull List smartTabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException + protected @NotNull List suggestions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) { return Collections.emptyList(); } + + private static class NicknameTagResolver implements TagResolver + { + private static final TagResolver STANDARD_RESOLVER = TagResolver.standard(); + private static final List IGNORED_TAGS = Arrays.asList( + "click", + "hover", + "insertion", + "insert", + "obfuscated", + "obf", + "br", + "newline", + "lang", + "key", + "translate"); + + @Override + public @Nullable Tag resolve(@NotNull String name, @NotNull ArgumentQueue arguments, @NotNull Context ctx) throws ParsingException + { + return IGNORED_TAGS.contains(name.toLowerCase()) ? null : STANDARD_RESOLVER.resolve(name, arguments, ctx); + } + + @Override + public boolean has(@NotNull String name) + { + return STANDARD_RESOLVER.has(name); + } + } } diff --git a/src/main/resources/module.yml b/src/main/resources/module.yml index bdf2725..d21ab96 100644 --- a/src/main/resources/module.yml +++ b/src/main/resources/module.yml @@ -1,4 +1,5 @@ name: Module-NickMiniMessage main: dev.plex.module.nickmm.NickMiniMessageModule description: Module for Plex that adds a command allowing for Essentials nicknames to be created with MiniMessage -version: 1.6 \ No newline at end of file +version: 2.0-SNAPSHOT +apiCompatibility: 1