From 83a76e380dfa86ad8f2de46fed2aca49536cdc93 Mon Sep 17 00:00:00 2001 From: Video Date: Fri, 25 Aug 2023 13:23:06 -0600 Subject: [PATCH] This was a PITA --- .gitignore | 3 + build.gradle.kts | 7 +- settings.gradle.kts | 2 +- src/main/java/dev/plex/ExampleModule.java | 21 ------ .../java/dev/plex/command/ExampleCommand.java | 21 ------ .../dev/plex/listener/ExampleListener.java | 17 ----- .../nickmm/NickMiniMessageModule.java | 25 +++++++ .../nickmm/command/NickMMCommand.java | 69 +++++++++++++++++++ src/main/resources/module.yml | 6 +- 9 files changed, 105 insertions(+), 66 deletions(-) delete mode 100644 src/main/java/dev/plex/ExampleModule.java delete mode 100644 src/main/java/dev/plex/command/ExampleCommand.java delete mode 100644 src/main/java/dev/plex/listener/ExampleListener.java create mode 100644 src/main/java/me/videogamesm12/nickmm/NickMiniMessageModule.java create mode 100644 src/main/java/me/videogamesm12/nickmm/command/NickMMCommand.java diff --git a/.gitignore b/.gitignore index 9ee36ae..4c5b7d9 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ Thumbs.db # Gradle /build/ /.gradle/ + +# Libraries +/libs/ diff --git a/build.gradle.kts b/build.gradle.kts index 95de678..2de866b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,11 +20,12 @@ dependencies { annotationProcessor("org.projectlombok:lombok:1.18.28") compileOnly("io.papermc.paper:paper-api:1.20.1-R0.1-SNAPSHOT") compileOnly("dev.plex:server:1.3") + compileOnly(files("libs/EssentialsX.jar")) } -group = "dev.plex" +group = "me.videogamesm12" version = "1.0" -description = "ExampleModule" +description = "Module-NickMiniMessage" java { toolchain.languageVersion.set(JavaLanguageVersion.of(17)) @@ -39,7 +40,7 @@ publishing { } tasks.getByName("jar") { - archiveBaseName.set("Plex-ExampleModule") + archiveBaseName.set("Module-NickMiniMessage") archiveVersion.set("") } diff --git a/settings.gradle.kts b/settings.gradle.kts index cf4af05..3905d56 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1 +1 @@ -rootProject.name = "plexmodule-template" +rootProject.name = "Module-NickMiniMessage" diff --git a/src/main/java/dev/plex/ExampleModule.java b/src/main/java/dev/plex/ExampleModule.java deleted file mode 100644 index 5de621d..0000000 --- a/src/main/java/dev/plex/ExampleModule.java +++ /dev/null @@ -1,21 +0,0 @@ -package dev.plex; - -import dev.plex.command.ExampleCommand; -import dev.plex.listener.ExampleListener; -import dev.plex.module.PlexModule; - -public class ExampleModule extends PlexModule -{ - @Override - public void enable() - { - registerCommand(new ExampleCommand()); - registerListener(new ExampleListener()); - } - - @Override - public void disable() - { - // Unregistering listeners / commands is handled by Plex - } -} diff --git a/src/main/java/dev/plex/command/ExampleCommand.java b/src/main/java/dev/plex/command/ExampleCommand.java deleted file mode 100644 index e08610f..0000000 --- a/src/main/java/dev/plex/command/ExampleCommand.java +++ /dev/null @@ -1,21 +0,0 @@ -package dev.plex.command; - -import dev.plex.command.annotation.CommandParameters; -import dev.plex.command.annotation.CommandPermissions; -import dev.plex.rank.enums.Rank; -import net.kyori.adventure.text.Component; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -@CommandParameters(name = "examplemodule", description = "An example command provided by Plex's example module") -@CommandPermissions(level = Rank.OP, permission = "plex.module.command") -public class ExampleCommand extends PlexCommand -{ - @Override - protected Component execute(@NotNull CommandSender commandSender, @Nullable Player player, @NotNull String[] strings) - { - return Component.text("Example module command"); - } -} diff --git a/src/main/java/dev/plex/listener/ExampleListener.java b/src/main/java/dev/plex/listener/ExampleListener.java deleted file mode 100644 index 8f2676f..0000000 --- a/src/main/java/dev/plex/listener/ExampleListener.java +++ /dev/null @@ -1,17 +0,0 @@ -package dev.plex.listener; - -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.player.PlayerJoinEvent; - -public class ExampleListener extends PlexListener -{ - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player player = event.getPlayer(); - player.sendMessage(Component.text("This is a message from Plex's example module!").color(NamedTextColor.GOLD)); - } -} diff --git a/src/main/java/me/videogamesm12/nickmm/NickMiniMessageModule.java b/src/main/java/me/videogamesm12/nickmm/NickMiniMessageModule.java new file mode 100644 index 0000000..7a3c9dd --- /dev/null +++ b/src/main/java/me/videogamesm12/nickmm/NickMiniMessageModule.java @@ -0,0 +1,25 @@ +package me.videogamesm12.nickmm; + +import com.earth2me.essentials.Essentials; +import dev.plex.module.PlexModule; +import me.videogamesm12.nickmm.command.NickMMCommand; +import org.bukkit.Bukkit; + +public class NickMiniMessageModule extends PlexModule +{ + @Override + public void enable() + { + if (!Bukkit.getPluginManager().isPluginEnabled("Essentials")) + { + throw new IllegalStateException("We need Essentials for this module to work!"); + } + + registerCommand(new NickMMCommand()); + } + + public static Essentials getEssentials() + { + return (Essentials) Bukkit.getPluginManager().getPlugin("Essentials"); + } +} diff --git a/src/main/java/me/videogamesm12/nickmm/command/NickMMCommand.java b/src/main/java/me/videogamesm12/nickmm/command/NickMMCommand.java new file mode 100644 index 0000000..f359edb --- /dev/null +++ b/src/main/java/me/videogamesm12/nickmm/command/NickMMCommand.java @@ -0,0 +1,69 @@ +package me.videogamesm12.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.source.RequiredCommandSource; +import dev.plex.util.PlexUtils; +import dev.plex.util.minimessage.SafeMiniMessage; +import me.videogamesm12.nickmm.NickMiniMessageModule; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +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 +{ + private final PlainTextComponentSerializer plainText = PlainTextComponentSerializer.plainText(); + private final LegacyComponentSerializer legacyComponent = LegacyComponentSerializer.legacySection(); + + @Override + protected Component execute(@NotNull CommandSender commandSender, @Nullable Player player, @NotNull String[] strings) + { + if (!Bukkit.getPluginManager().isPluginEnabled("Essentials")) + { + return Component.text("Essentials is not enabled!", NamedTextColor.RED); + } + + if (strings.length == 0) + { + return usage(); + } + + final Component nick = SafeMiniMessage.mmDeserializeWithoutEvents(strings[0]); + final String plain = plainText.serialize(nick); + + if (plain.length() > NickMiniMessageModule.getEssentials().getSettings().getMaxNickLength() + && !commandSender.hasPermission("plex.nickmm.ignore_length_limit")) + { + return legacyComponent.deserialize(I18n.tl("nickTooLong")); + } + + if (!commandSender.hasPermission("plex.nickmm.ignore_matching")) + { + for (final User user : NickMiniMessageModule.getEssentials().getOnlineUsers()) + { + final String name = user.getNickname() != null ? plainText.serialize(legacyComponent.deserialize(user.getNickname())) : user.getName(); + + if (name.equalsIgnoreCase(plain) && !user.getUUID().equals(player.getUniqueId())) + { + return legacyComponent.deserialize(I18n.tl("nickInUse")); + } + } + } + + final String legacy = legacyComponent.serialize(nick); + NickMiniMessageModule.getEssentials().getUser(player).setNickname(legacy); + + return legacyComponent.deserialize(I18n.tl("nickSet", legacy)); + } +} diff --git a/src/main/resources/module.yml b/src/main/resources/module.yml index 171f2ac..295bfb3 100644 --- a/src/main/resources/module.yml +++ b/src/main/resources/module.yml @@ -1,4 +1,4 @@ -name: Module-Example -main: dev.plex.ExampleModule -description: An example module for Plex +name: Module-NickMiniMessage +main: me.videogamesm12.nickmm.NickMiniMessageModule +description: Module for Plex that adds a command allowing for Essentials nicknames to be created with MiniMessage version: 1.0 \ No newline at end of file