diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index d5c2c34..dad5169 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -13,10 +13,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up JDK 21 + - name: Set up JDK 25 uses: actions/setup-java@v4 with: - java-version: '21' + java-version: '25' distribution: 'temurin' - name: Setup Gradle diff --git a/README.md b/README.md index f53020d..05654b2 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # ClanTag github fabric-api -java-21 +java-25 ### What is it? @@ -13,8 +13,7 @@ - Placeholders via https://github.com/Patbox/TextPlaceholderAPI - Permissions via https://github.com/LuckPerms/LuckPerms -## Requires -- LuckPerms: https://luckperms.net/download +If no permissions are set, admin commands default to operator level 3 (Admins) --- diff --git a/build.gradle b/build.gradle index 0bffafe..6547190 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.15-SNAPSHOT' + id 'net.fabricmc.fabric-loom' version '1.15-SNAPSHOT' id 'maven-publish' } @@ -43,32 +43,29 @@ repositories { dependencies { // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" + implementation "net.fabricmc:fabric-loader:${project.loader_version}" - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - modImplementation "eu.pb4:placeholder-api:${project.placeholder_api_version}" - compileOnly "net.luckperms:api:${project.luckperms_version}" + implementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" + implementation "eu.pb4:placeholder-api:${project.placeholder_api_version}" implementation("org.xerial:sqlite-jdbc:${project.sqlite_jdbc_version}") include("org.xerial:sqlite-jdbc:${project.sqlite_jdbc_version}") + include(implementation "me.lucko:fabric-permissions-api:${project.fabric_permissions_api}") } processResources { inputs.property "version", project.version inputs.property "minecraft_version", project.minecraft_version inputs.property "loader_version", project.loader_version - inputs.property "luckperms_version", project.luckperms_version filteringCharset "UTF-8" filesMatching("fabric.mod.json") { expand "version": project.version, "minecraft_version": project.minecraft_version, - "loader_version": project.loader_version, - "luckperms_version": project.luckperms_version + "loader_version": project.loader_version } } -def targetJavaVersion = 21 +def targetJavaVersion = 25 tasks.withType(JavaCompile).configureEach { // ensure that the encoding is set to UTF-8, no matter what the system default is // this fixes some edge cases with special characters not displaying correctly diff --git a/gradle.properties b/gradle.properties index 5f2107f..00e5866 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,16 +2,16 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://modmuss50.me/fabric.html -minecraft_version=1.21.11 -yarn_mappings=1.21.11+build.4 +minecraft_version=26.1 loader_version=0.18.4 +loom_version=1.15-SNAPSHOT # Mod Properties -mod_version=1.1.0 +mod_version=1.1.1+26.1 maven_group=mnfu archives_base_name=ClanTag # Dependencies # check this on https://modmuss50.me/fabric.html -fabric_version=0.141.3+1.21.11 -placeholder_api_version=2.8.2+1.21.10 +fabric_api_version=0.144.3+26.1 +placeholder_api_version=3.0.0-beta.2+26.1 sqlite_jdbc_version=3.51.2.0 -luckperms_version=5.4 +fabric_permissions_api=0.7.0 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 23449a2..c61a118 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/java/mnfu/clantag/ClanTag.java b/src/main/java/mnfu/clantag/ClanTag.java index ec698de..1eb16d1 100644 --- a/src/main/java/mnfu/clantag/ClanTag.java +++ b/src/main/java/mnfu/clantag/ClanTag.java @@ -6,11 +6,12 @@ import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; -import net.minecraft.util.Identifier; +import net.minecraft.commands.Commands; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; +import net.minecraft.resources.Identifier; +import net.minecraft.world.entity.player.Player; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import eu.pb4.placeholders.api.Placeholders; @@ -40,42 +41,46 @@ public void onInitialize() { // cache players when they join, reducing any offline player lookups ServerPlayConnectionEvents.JOIN.register(((serverPlayNetworkHandler, packetSender, minecraftServer) -> { - ServerPlayerEntity player = serverPlayNetworkHandler.getPlayer(); + ServerPlayer player = serverPlayNetworkHandler.getPlayer(); MojangApi.cachePlayer(player); PersistentPlayerCache cache = PersistentPlayerCache.getInstance(); if (cache != null) { - boolean updated = cache.updateIfChanged(player.getUuid(), player.getName().getString()); + boolean updated = cache.updateIfChanged(player.getUUID(), player.getName().getString()); if (updated) { - LOGGER.debug("Updated persistent cache for {} ({})", player.getName().getString(), player.getUuid()); + LOGGER.debug("Updated persistent cache for {} ({})", player.getName().getString(), player.getUUID()); } } })); // register placeholders - Placeholders.register( - Identifier.of("clantag", "player_clan_name"), + Placeholders.registerServer( + Identifier.fromNamespaceAndPath("clantag", "player_clan_name"), (ctx, arg) -> { - if (!ctx.hasPlayer() || ctx.player() == null) return PlaceholderResult.invalid(); - Clan clan = clanManager.getPlayerClan(ctx.player().getUuid()); - if (clan == null) return PlaceholderResult.value(Text.literal("Avience")); - return PlaceholderResult.value(Text.literal(clan.name())); + if (!ctx.hasPlayer()) return PlaceholderResult.invalid(); + Player player = ctx.player(); + if (player == null) return PlaceholderResult.invalid(); + Clan clan = clanManager.getPlayerClan(player.getUUID()); + if (clan == null) return PlaceholderResult.value(Component.literal("Avience")); + return PlaceholderResult.value(Component.literal(clan.name())); } ); - Placeholders.register( - Identifier.of("clantag", "player_clan_name_colored"), + Placeholders.registerServer( + Identifier.fromNamespaceAndPath("clantag", "player_clan_name_colored"), (ctx, arg) -> { - if (!ctx.hasPlayer() || ctx.player() == null) return PlaceholderResult.invalid(); - Clan clan = clanManager.getPlayerClan(ctx.player().getUuid()); - if (clan == null) return PlaceholderResult.value(Text.literal("Avience").formatted(Formatting.GRAY)); - return PlaceholderResult.value(Text.literal(clan.name()).withColor(Integer.parseInt(clan.hexColor().substring(1), 16))); + if (!ctx.hasPlayer()) return PlaceholderResult.invalid(); + Player player = ctx.player(); + if (player == null) return PlaceholderResult.invalid(); + Clan clan = clanManager.getPlayerClan(player.getUUID()); + if (clan == null) return PlaceholderResult.value(Component.literal("Avience").withStyle(ChatFormatting.GRAY)); + return PlaceholderResult.value(Component.literal(clan.name()).withColor(Integer.parseInt(clan.hexColor().substring(1), 16))); } ); // register commands CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { - var baseCommand = CommandManager.literal("clan"); + var baseCommand = Commands.literal("clan"); HelpCommand helpCommandClass = new HelpCommand(); var helpCommand = new HelpCommand().build(); var adminCommand = new AdminCommand(clanManager).build(); diff --git a/src/main/java/mnfu/clantag/MojangApi.java b/src/main/java/mnfu/clantag/MojangApi.java index da5528b..9bb77aa 100644 --- a/src/main/java/mnfu/clantag/MojangApi.java +++ b/src/main/java/mnfu/clantag/MojangApi.java @@ -2,7 +2,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.level.ServerPlayer; import java.net.URI; import java.net.http.HttpClient; @@ -153,10 +153,10 @@ private static Optional handleUuidResponse(HttpResponse response, /** * Caches a currently online player’s UUID and username in {@link MojangCache}. * - * @param player the online {@link ServerPlayerEntity} to cache + * @param player the online {@link ServerPlayer} to cache */ - public static void cachePlayer(ServerPlayerEntity player) { - CACHE.put(player.getUuid(), player.getName().getString()); + public static void cachePlayer(ServerPlayer player) { + CACHE.put(player.getUUID(), player.getName().getString()); } /** diff --git a/src/main/java/mnfu/clantag/commands/AdminCommand.java b/src/main/java/mnfu/clantag/commands/AdminCommand.java index d5bd84f..ce9d9f5 100644 --- a/src/main/java/mnfu/clantag/commands/AdminCommand.java +++ b/src/main/java/mnfu/clantag/commands/AdminCommand.java @@ -6,15 +6,13 @@ import mnfu.clantag.Clan; import mnfu.clantag.ClanManager; import mnfu.clantag.MojangApi; -import net.luckperms.api.LuckPerms; -import net.luckperms.api.LuckPermsProvider; -import net.luckperms.api.model.user.User; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; +import me.lucko.fabric.api.permissions.v0.Permissions; +import net.minecraft.commands.Commands; +import net.minecraft.commands.CommandSourceStack; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; +import net.minecraft.server.permissions.PermissionLevel; import java.util.UUID; import java.util.function.Predicate; @@ -23,9 +21,6 @@ public class AdminCommand { private final ClanManager clanManager; - private LuckPerms lpApi = null; - private static final Predicate OWNER_CHECK = - CommandManager.requirePermissionLevel(CommandManager.OWNERS_CHECK); private final String addUsageMessage = "Usage: /clan admin add "; private final String removeUsageMessage = "Usage: /clan admin remove "; @@ -38,19 +33,19 @@ public AdminCommand(ClanManager clanManager) { this.clanManager = clanManager; } - public LiteralArgumentBuilder build() { - return CommandManager.literal("admin") + public LiteralArgumentBuilder build() { + return Commands.literal("admin") // add - .then(CommandManager.literal("add") - .requires(source -> hasPermission(source, "clantag.admin.add")) - .then(CommandManager.argument("playerName", StringArgumentType.word()) + .then(Commands.literal("add") + .requires(Permissions.require("clantag.admin.add", PermissionLevel.ADMINS)) + .then(Commands.argument("playerName", StringArgumentType.word()) .suggests((context, builder) -> { for (String n : context.getSource().getServer().getPlayerNames()) { builder.suggest(n); } return builder.buildFuture(); }) - .then(CommandManager.argument("clanName", StringArgumentType.greedyString()) + .then(Commands.argument("clanName", StringArgumentType.greedyString()) .suggests((context, builder) -> { for (String canonicalName : clanManager.getAllClansCanonicalNames()) { builder.suggest(canonicalName); @@ -60,27 +55,27 @@ public LiteralArgumentBuilder build() { .executes(this::executeAdd) ) .executes(context -> { - context.getSource().sendError(Text.literal(addUsageMessage)); + context.getSource().sendFailure(Component.literal(addUsageMessage)); return 0; }) ) .executes(context -> { - context.getSource().sendError(Text.literal(addUsageMessage)); + context.getSource().sendFailure(Component.literal(addUsageMessage)); return 0; }) ) // remove - .then(CommandManager.literal("remove") - .requires(source -> hasPermission(source, "clantag.admin.remove")) - .then(CommandManager.argument("playerName", StringArgumentType.word()) + .then(Commands.literal("remove") + .requires(Permissions.require("clantag.admin.remove", PermissionLevel.ADMINS)) + .then(Commands.argument("playerName", StringArgumentType.word()) .suggests((context, builder) -> { for (String n : context.getSource().getServer().getPlayerNames()) { builder.suggest(n); } return builder.buildFuture(); }) - .then(CommandManager.argument("clanName", StringArgumentType.greedyString()) + .then(Commands.argument("clanName", StringArgumentType.greedyString()) .suggests((context, builder) -> { for (String canonicalName : clanManager.getAllClansCanonicalNames()) { builder.suggest(canonicalName); @@ -90,27 +85,27 @@ public LiteralArgumentBuilder build() { .executes(this::executeRemove) ) .executes(context -> { - context.getSource().sendError(Text.literal(removeUsageMessage)); + context.getSource().sendFailure(Component.literal(removeUsageMessage)); return 0; }) ) .executes(context -> { - context.getSource().sendError(Text.literal(removeUsageMessage)); + context.getSource().sendFailure(Component.literal(removeUsageMessage)); return 0; }) ) // transfer - .then(CommandManager.literal("transfer") - .requires(source -> hasPermission(source, "clantag.admin.transfer")) - .then(CommandManager.argument("playerName", StringArgumentType.word()) + .then(Commands.literal("transfer") + .requires(Permissions.require("clantag.admin.transfer", PermissionLevel.ADMINS)) + .then(Commands.argument("playerName", StringArgumentType.word()) .suggests((context, builder) -> { for (String n : context.getSource().getServer().getPlayerNames()) { builder.suggest(n); } return builder.buildFuture(); }) - .then(CommandManager.argument("clanName", StringArgumentType.greedyString()) + .then(Commands.argument("clanName", StringArgumentType.greedyString()) .suggests((context, builder) -> { for (String canonicalName : clanManager.getAllClansCanonicalNames()) { builder.suggest(canonicalName); @@ -120,43 +115,43 @@ public LiteralArgumentBuilder build() { .executes(this::executeTransfer) ) .executes(context -> { - context.getSource().sendError(Text.literal(transferUsageMessage)); + context.getSource().sendFailure(Component.literal(transferUsageMessage)); return 0; }) ) .executes(context -> { - context.getSource().sendError(Text.literal(transferUsageMessage)); + context.getSource().sendFailure(Component.literal(transferUsageMessage)); return 0; }) ) - .then(CommandManager.literal("rename") - .requires(source -> hasPermission(source, "clantag.admin.rename")) - .then(CommandManager.argument("clanName", StringArgumentType.string()) + .then(Commands.literal("rename") + .requires(Permissions.require("clantag.admin.rename", PermissionLevel.ADMINS)) + .then(Commands.argument("clanName", StringArgumentType.string()) .suggests((context, builder) -> { for (String canonicalName : clanManager.getAllClansCanonicalNames()) { builder.suggest(canonicalName); } return builder.buildFuture(); }) - .then(CommandManager.argument("newClanName", StringArgumentType.greedyString()) + .then(Commands.argument("newClanName", StringArgumentType.greedyString()) .executes(this::executeRename) ) .executes(context -> { - context.getSource().sendError(Text.literal(renameUsageMessage)); + context.getSource().sendFailure(Component.literal(renameUsageMessage)); return 0; }) ) .executes(context -> { - context.getSource().sendError(Text.literal(renameUsageMessage)); + context.getSource().sendFailure(Component.literal(renameUsageMessage)); return 0; }) ) // delete (confirm) - .then(CommandManager.literal("delete") - .requires(source -> hasPermission(source, "clantag.admin.delete")) - .then(CommandManager.argument("clanName", StringArgumentType.greedyString()) + .then(Commands.literal("delete") + .requires(Permissions.require("clantag.admin.delete", PermissionLevel.ADMINS)) + .then(Commands.argument("clanName", StringArgumentType.greedyString()) .suggests((context, builder) -> { for (String canonicalName : clanManager.getAllClansCanonicalNames()) { builder.suggest(canonicalName); @@ -166,76 +161,52 @@ public LiteralArgumentBuilder build() { .executes(this::executeDelete) ) .executes(context -> { - context.getSource().sendError(Text.literal(deleteUsageMessage)); + context.getSource().sendFailure(Component.literal(deleteUsageMessage)); return 0; }) ) // reload - .then(CommandManager.literal("reload") - .requires(source -> hasPermission(source, "clantag.admin.reload")) + .then(Commands.literal("reload") + .requires(Permissions.require("clantag.admin.reload", PermissionLevel.ADMINS)) .executes(context -> { boolean reloaded = clanManager.load(); if (reloaded) { - context.getSource().sendFeedback(() -> Text.literal("Reloaded clans.json!"), true); + context.getSource().sendSuccess(() -> Component.literal("Reloaded clans.json!"), true); } else { - context.getSource().sendFeedback(() -> Text.literal("Failed to load or partially loaded clans.json! Manually inputted malformed data?"), true); + context.getSource().sendSuccess(() -> Component.literal("Failed to load or partially loaded clans.json! Manually inputted malformed data?"), true); } return 1; }) ) // cache clear - .then(CommandManager.literal("cache") - .requires(source -> hasPermission(source, "clantag.admin.cache")) - .then(CommandManager.literal("clear") + .then(Commands.literal("cache") + .requires(Permissions.require("clantag.admin.cache", PermissionLevel.ADMINS)) + .then(Commands.literal("clear") .executes(context -> { MojangApi.clearCache(); - context.getSource().sendFeedback( - () -> Text.literal("MojangAPI player cache cleared!"), true + context.getSource().sendSuccess( + () -> Component.literal("MojangAPI player cache cleared!"), true ); return 1; }) ) .executes(context -> { - context.getSource().sendError(Text.literal(cacheUsageMessage)); + context.getSource().sendFailure(Component.literal(cacheUsageMessage)); return 0; }) ) // default response .executes(context -> { - context.getSource().sendError(Text.literal("Valid subcommands: add, remove, transfer, rename, delete, cache, reload")); + context.getSource().sendFailure(Component.literal("Valid subcommands: add, remove, transfer, rename, delete, cache, reload")); return 0; }); } - private boolean hasPermission(ServerCommandSource source, String node) { - if (!source.isExecutedByPlayer()) { // console/other source that is non-player - return true; - } - ServerPlayerEntity player = source.getPlayer(); - if (player == null) return false; - UUID playerUuid = player.getUuid(); - - if (lpApi == null) { - try { - lpApi = LuckPermsProvider.get(); - } catch (IllegalStateException e) { - // LP not ready yet, deny command - return false; - } - } - - User user = lpApi.getUserManager().getUser(playerUuid); - - boolean hasPermissionNode = user != null && user.getCachedData().getPermissionData().checkPermission(node).asBoolean(); - boolean hasOwnerLevelOp = OWNER_CHECK.test(source); //fallback if they have no permissions - return hasPermissionNode || hasOwnerLevelOp; - } - - private int executeAdd(CommandContext context) { + private int executeAdd(CommandContext context) { String clanName = StringArgumentType.getString(context, "clanName"); String playerName = StringArgumentType.getString(context, "playerName"); @@ -243,97 +214,97 @@ private int executeAdd(CommandContext context) { Clan clan = clanManager.getClan(clanName); if (clan == null) { - context.getSource().sendError(Text.literal("Clan not found!")); + context.getSource().sendFailure(Component.literal("Clan not found!")); return 0; } getUuid(context, playerName).thenAccept(optPlayerName -> context.getSource().getServer().execute(() -> { if (optPlayerName.isEmpty()) { - context.getSource().sendError(Text.literal("Player not found!")); + context.getSource().sendFailure(Component.literal("Player not found!")); return; } UUID playerUuid = optPlayerName.get(); if (clanManager.playerInAClan(playerUuid)) { - context.getSource().sendError(Text.literal("Player already in a clan!")); + context.getSource().sendFailure(Component.literal("Player already in a clan!")); return; } clanManager.addMember(clanName, playerUuid); - context.getSource().sendFeedback(() -> Text.literal("Added " + playerName + " to clan " + clanName + "!"), true); + context.getSource().sendSuccess(() -> Component.literal("Added " + playerName + " to clan " + clanName + "!"), true); })); return 1; } - private int executeRemove(CommandContext context) { + private int executeRemove(CommandContext context) { String clanName = StringArgumentType.getString(context, "clanName"); String playerName = StringArgumentType.getString(context, "playerName"); if (clanName == null || playerName == null) return 0; Clan clan = clanManager.getClan(clanName); if (clan == null) { - context.getSource().sendError(Text.literal("Clan not found!")); + context.getSource().sendFailure(Component.literal("Clan not found!")); return 0; } getUuid(context, playerName).thenAccept(optPlayerUuid -> context.getSource().getServer().execute(() -> { if (optPlayerUuid.isEmpty()) { - context.getSource().sendError(Text.literal("Player not found!")); + context.getSource().sendFailure(Component.literal("Player not found!")); return; } UUID playerUuid = optPlayerUuid.get(); if (!clan.members().contains(playerUuid)) { - context.getSource().sendError(Text.literal(playerName + " is not in clan " + clanName + "!")); + context.getSource().sendFailure(Component.literal(playerName + " is not in clan " + clanName + "!")); return; } // prevent removing the leader accidentally if (playerUuid.equals(clan.leader())) { - context.getSource().sendError(Text.literal("Cannot remove the leader from their own clan! You may transfer ownership, or delete the clan instead.")); + context.getSource().sendFailure(Component.literal("Cannot remove the leader from their own clan! You may transfer ownership, or delete the clan instead.")); return; } clanManager.removeMember(clanName, playerUuid); - context.getSource().sendFeedback(() -> Text.literal("Removed " + playerName + " from clan " + clanName + "!"), true); + context.getSource().sendSuccess(() -> Component.literal("Removed " + playerName + " from clan " + clanName + "!"), true); })); return 1; } - private int executeTransfer(CommandContext context) { + private int executeTransfer(CommandContext context) { String playerName = StringArgumentType.getString(context, "playerName"); String clanName = StringArgumentType.getString(context, "clanName"); if (playerName == null || clanName == null) return 0; Clan clan = clanManager.getClan(clanName); if (clan == null) { - context.getSource().sendError(Text.literal("Clan not found!")); + context.getSource().sendFailure(Component.literal("Clan not found!")); return 0; } getUuid(context, playerName).thenAccept(optUuid -> context.getSource().getServer().execute(() -> { if (optUuid.isEmpty()) { - context.getSource().sendError(Text.literal("Player not found!")); + context.getSource().sendFailure(Component.literal("Player not found!")); return; } UUID targetUuid = optUuid.get(); if (targetUuid.equals(clan.leader())) { - context.getSource().sendError(Text.literal(playerName + " is already the leader of " + clanName + "!")); + context.getSource().sendFailure(Component.literal(playerName + " is already the leader of " + clanName + "!")); return; } boolean success = clanManager.transferLeader(clanName, targetUuid); if (!success) { - context.getSource().sendError(Text.literal(playerName + " is not in " + clanName + "!")); + context.getSource().sendFailure(Component.literal(playerName + " is not in " + clanName + "!")); return; } - context.getSource().sendFeedback(() -> Text.literal( + context.getSource().sendSuccess(() -> Component.literal( "Successfully transferred leadership of " + clanName + " to " + playerName + "!"), true); }) ); @@ -341,46 +312,46 @@ private int executeTransfer(CommandContext context) { return 1; } - private int executeRename(CommandContext context) { + private int executeRename(CommandContext context) { String oldClanName = StringArgumentType.getString(context, "clanName"); String newClanName = StringArgumentType.getString(context, "newClanName"); if (oldClanName == null || newClanName == null) return 0; Clan oldClan = clanManager.getClan(oldClanName); if (oldClan == null) { - context.getSource().sendError(Text.literal("Clan not found!")); + context.getSource().sendFailure(Component.literal("Clan not found!")); return 0; } if (newClanName.contains(" ")) { - context.getSource().sendError(Text.literal("Clan names must not contain spaces!")); + context.getSource().sendFailure(Component.literal("Clan names must not contain spaces!")); return 0; } if (newClanName.length() < 3 || newClanName.length() > 16) { - context.getSource().sendMessage(Text.literal("Warning: Proposed new clan name will override length limits!").formatted(Formatting.YELLOW)); + context.getSource().sendSystemMessage(Component.literal("Warning: Proposed new clan name will override length limits!").withStyle(ChatFormatting.YELLOW)); } boolean clanRenamed = clanManager.changeName(oldClanName, newClanName); if (clanRenamed) { - context.getSource().sendFeedback(() -> Text.literal("Successfully renamed " + oldClanName + " to " + newClanName), true); + context.getSource().sendSuccess(() -> Component.literal("Successfully renamed " + oldClanName + " to " + newClanName), true); return 1; } else { - context.getSource().sendError(Text.literal("Clan " + newClanName + " already exists, or " + newClanName + " isn't an allowed name!")); + context.getSource().sendFailure(Component.literal("Clan " + newClanName + " already exists, or " + newClanName + " isn't an allowed name!")); return 0; } } - private int executeDelete(CommandContext context) { + private int executeDelete(CommandContext context) { String clanName = StringArgumentType.getString(context, "clanName"); if (clanName == null) { - context.getSource().sendError(Text.literal("Clan not found!")); + context.getSource().sendFailure(Component.literal("Clan not found!")); return 0; } boolean successful = clanManager.deleteClan(clanName); if (successful) { - context.getSource().sendFeedback(() -> Text.literal("Deleted clan " + clanName + "!"), true); + context.getSource().sendSuccess(() -> Component.literal("Deleted clan " + clanName + "!"), true); return 1; } else { - context.getSource().sendError(Text.literal("Clan not found!")); + context.getSource().sendFailure(Component.literal("Clan not found!")); return 0; } } diff --git a/src/main/java/mnfu/clantag/commands/CommandUtils.java b/src/main/java/mnfu/clantag/commands/CommandUtils.java index 2319c3b..9d53721 100644 --- a/src/main/java/mnfu/clantag/commands/CommandUtils.java +++ b/src/main/java/mnfu/clantag/commands/CommandUtils.java @@ -5,11 +5,11 @@ import mnfu.clantag.MojangApi; import mnfu.clantag.PersistentPlayerCache; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Style; -import net.minecraft.text.Text; -import net.minecraft.text.TextColor; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.network.chat.Style; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextColor; import java.util.Optional; import java.util.UUID; @@ -23,7 +23,7 @@ private CommandUtils() {} // prevent instantiation * * @return an {@link Optional} containing the player's name if found, otherwise {@link Optional#empty()} */ - public static CompletableFuture> getPlayerName(CommandContext context, UUID uuid) { + public static CompletableFuture> getPlayerName(CommandContext context, UUID uuid) { return getPlayerName(context.getSource().getServer(), uuid); } @@ -32,7 +32,7 @@ public static CompletableFuture> getPlayerName(CommandContext> getUuid(CommandContext context, String playerName) { + public static CompletableFuture> getUuid(CommandContext context, String playerName) { return getUuid(context.getSource().getServer(), playerName); } @@ -42,7 +42,7 @@ public static CompletableFuture> getUuid(CommandContext> getPlayerName(MinecraftServer server, UUID uuid) { - ServerPlayerEntity player = server.getPlayerManager().getPlayer(uuid); + ServerPlayer player = server.getPlayerList().getPlayer(uuid); if (player != null) return CompletableFuture.completedFuture(Optional.of(player.getName().getString())); return CompletableFuture.supplyAsync(() -> { @@ -69,8 +69,8 @@ public static CompletableFuture> getPlayerName(MinecraftServer * @return an {@link Optional} containing the UUID if found, otherwise {@link Optional#empty()} */ public static CompletableFuture> getUuid(MinecraftServer server, String playerName) { - ServerPlayerEntity player = server.getPlayerManager().getPlayer(playerName); - if (player != null) return CompletableFuture.completedFuture(Optional.of(player.getUuid())); + ServerPlayer player = server.getPlayerList().getPlayerByName(playerName); + if (player != null) return CompletableFuture.completedFuture(Optional.of(player.getUUID())); return CompletableFuture.supplyAsync(() -> { PersistentPlayerCache cache = PersistentPlayerCache.getInstance(); @@ -87,9 +87,9 @@ public static CompletableFuture> getUuid(MinecraftServer server, }); } - public static Text getColoredClanName(Clan clan) { - TextColor textColor = TextColor.parse(clan.hexColor()).getOrThrow(); - return Text.literal(clan.name()) + public static Component getColoredClanName(Clan clan) { + TextColor textColor = TextColor.parseColor(clan.hexColor()).getOrThrow(); + return Component.literal(clan.name()) .setStyle(Style.EMPTY.withColor(textColor)); } } diff --git a/src/main/java/mnfu/clantag/commands/CreateCommand.java b/src/main/java/mnfu/clantag/commands/CreateCommand.java index a2cb17a..7cae22c 100644 --- a/src/main/java/mnfu/clantag/commands/CreateCommand.java +++ b/src/main/java/mnfu/clantag/commands/CreateCommand.java @@ -3,10 +3,10 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import mnfu.clantag.ClanManager; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; +import net.minecraft.commands.Commands; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.network.chat.Component; import com.mojang.brigadier.arguments.StringArgumentType; @@ -20,23 +20,23 @@ public CreateCommand(ClanManager clanManager) { this.clanManager = clanManager; } - public LiteralArgumentBuilder build() { - return CommandManager.literal("create") - .then(CommandManager.argument("clanName", StringArgumentType.greedyString()) + public LiteralArgumentBuilder build() { + return Commands.literal("create") + .then(Commands.argument("clanName", StringArgumentType.greedyString()) .executes(this::executeCreate) ); } - private int executeCreate(CommandContext context) { - ServerPlayerEntity executor = context.getSource().getPlayer(); + private int executeCreate(CommandContext context) { + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) { - context.getSource().sendError(Text.literal("Only players can create clans!")); + context.getSource().sendFailure(Component.literal("Only players can create clans!")); return 0; } - UUID executorUuid = executor.getUuid(); + UUID executorUuid = executor.getUUID(); if (clanManager.playerInAClan(executorUuid)) { - context.getSource().sendError(Text.literal( + context.getSource().sendFailure(Component.literal( "You must leave or disband your current clan before creating a new one." )); return 0; @@ -44,19 +44,19 @@ private int executeCreate(CommandContext context) { String clanName = StringArgumentType.getString(context, "clanName"); if (clanName.contains(" ")) { - context.getSource().sendError(Text.literal("Clan names must not contain spaces!")); + context.getSource().sendFailure(Component.literal("Clan names must not contain spaces!")); return 0; } if (clanName.length() < 3 || clanName.length() > 16) { - context.getSource().sendError(Text.literal("Clan names must be 3-16 characters in length!")); + context.getSource().sendFailure(Component.literal("Clan names must be 3-16 characters in length!")); return 0; } boolean clanCreated = clanManager.createClan(clanName, executorUuid); if (clanCreated) { - executor.sendMessage(Text.literal("Clan " + clanName + " created!"), false); + context.getSource().sendSystemMessage(Component.literal("Clan " + clanName + " created!")); } else { - context.getSource().sendError(Text.literal("Clan " + clanName + " already exists, or " + clanName + " isn't an allowed name!")); + context.getSource().sendFailure(Component.literal("Clan " + clanName + " already exists, or " + clanName + " isn't an allowed name!")); } return 1; diff --git a/src/main/java/mnfu/clantag/commands/DemoteCommand.java b/src/main/java/mnfu/clantag/commands/DemoteCommand.java index 45eed2e..63dfa1b 100644 --- a/src/main/java/mnfu/clantag/commands/DemoteCommand.java +++ b/src/main/java/mnfu/clantag/commands/DemoteCommand.java @@ -5,10 +5,10 @@ import com.mojang.brigadier.context.CommandContext; import mnfu.clantag.Clan; import mnfu.clantag.ClanManager; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; +import net.minecraft.commands.Commands; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.network.chat.Component; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -22,13 +22,13 @@ public DemoteCommand(ClanManager clanManager) { this.clanManager = clanManager; } - public LiteralArgumentBuilder build() { - return CommandManager.literal("demote") - .then(CommandManager.argument("playerName", StringArgumentType.greedyString()) + public LiteralArgumentBuilder build() { + return Commands.literal("demote") + .then(Commands.argument("playerName", StringArgumentType.greedyString()) .suggests((context, builder) -> { - ServerPlayerEntity player = context.getSource().getPlayer(); + ServerPlayer player = context.getSource().getPlayer(); if (player == null) return builder.buildFuture(); - Clan clan = clanManager.getPlayerClan(player.getUuid()); + Clan clan = clanManager.getPlayerClan(player.getUUID()); if (clan == null) return builder.buildFuture(); CompletableFuture[] nameFutures = clan.members().stream() .filter(uuid -> !uuid.equals(clan.leader())) @@ -41,45 +41,45 @@ public LiteralArgumentBuilder build() { }) .executes(this::executeDemote)) .executes(context -> { - context.getSource().sendError(Text.literal("Usage: /clan demote ")); + context.getSource().sendFailure(Component.literal("Usage: /clan demote ")); return 1; }); } - private int executeDemote(CommandContext context) { - ServerPlayerEntity executor = context.getSource().getPlayer(); + private int executeDemote(CommandContext context) { + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) return 0; - Clan clan = clanManager.getPlayerClan(executor.getUuid()); + Clan clan = clanManager.getPlayerClan(executor.getUUID()); if (clan == null) { - context.getSource().sendError(Text.literal("You are not in a clan!")); + context.getSource().sendFailure(Component.literal("You are not in a clan!")); return 0; } - if (!clan.leader().equals(executor.getUuid())) { - context.getSource().sendError(Text.literal("You must be a clan leader to use this command!")); + if (!clan.leader().equals(executor.getUUID())) { + context.getSource().sendFailure(Component.literal("You must be a clan leader to use this command!")); return 0; } String targetName = StringArgumentType.getString(context, "playerName"); getUuid(context, targetName).thenAccept(optUuid -> context.getSource().getServer().execute(() -> { if (optUuid.isEmpty()) { - context.getSource().sendError(Text.literal("Player not found!")); + context.getSource().sendFailure(Component.literal("Player not found!")); return; } UUID targetUuid = optUuid.get(); if (targetUuid.equals(clan.leader())) { - context.getSource().sendError(Text.literal("You cannot demote yourself!")); + context.getSource().sendFailure(Component.literal("You cannot demote yourself!")); return; } if (!clan.members().contains(targetUuid)) { - context.getSource().sendError(Text.literal(targetName + " is not in your clan!")); + context.getSource().sendFailure(Component.literal(targetName + " is not in your clan!")); return; } if (!clan.officers().contains(targetUuid)) { - context.getSource().sendError(Text.literal(targetName + " is not an Officer!")); + context.getSource().sendFailure(Component.literal(targetName + " is not an Officer!")); return; } clanManager.removeOfficer(clan.name(), targetUuid); - context.getSource().sendMessage(Text.literal("Demoted " + targetName + " from Officer!")); + context.getSource().sendSystemMessage(Component.literal("Demoted " + targetName + " from Officer!")); })); return 1; } diff --git a/src/main/java/mnfu/clantag/commands/DisbandCommand.java b/src/main/java/mnfu/clantag/commands/DisbandCommand.java index 4abde92..4976cee 100644 --- a/src/main/java/mnfu/clantag/commands/DisbandCommand.java +++ b/src/main/java/mnfu/clantag/commands/DisbandCommand.java @@ -4,10 +4,10 @@ import com.mojang.brigadier.context.CommandContext; import mnfu.clantag.Clan; import mnfu.clantag.ClanManager; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; +import net.minecraft.commands.Commands; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.network.chat.Component; import java.util.UUID; @@ -18,39 +18,39 @@ public DisbandCommand(ClanManager clanManager) { this.clanManager = clanManager; } - public LiteralArgumentBuilder build() { - return CommandManager.literal("disband") - .then(CommandManager.literal("confirm") + public LiteralArgumentBuilder build() { + return Commands.literal("disband") + .then(Commands.literal("confirm") .executes(context -> executeDisband(context, true)) ) .executes(context -> executeDisband(context, false)); } - private int executeDisband(CommandContext context, boolean confirm) { - ServerPlayerEntity executor = context.getSource().getPlayer(); + private int executeDisband(CommandContext context, boolean confirm) { + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) { - context.getSource().sendError(Text.literal("Only players can disband clans!")); + context.getSource().sendFailure(Component.literal("Only players can disband clans!")); return 0; } - UUID executorUuid = executor.getUuid(); + UUID executorUuid = executor.getUUID(); Clan clan = clanManager.getPlayerClan(executorUuid); if (clan == null) { - context.getSource().sendError(Text.literal( + context.getSource().sendFailure(Component.literal( "You must be in a clan to disband one!" )); return 0; } if (!clan.leader().equals(executorUuid)) { - context.getSource().sendError(Text.literal( + context.getSource().sendFailure(Component.literal( "You must be a clan leader to disband a clan!" )); return 0; } if (!confirm) { - context.getSource().sendMessage(Text.literal( + context.getSource().sendSystemMessage(Component.literal( "Are you sure you want to do this? If so, run: /clan disband confirm" )); return 1; @@ -59,11 +59,11 @@ private int executeDisband(CommandContext context, boolean // now we know they're the leader of their clan, and they've confirmed. boolean success = clanManager.deleteClan(clan.name()); if (success) { - context.getSource().sendMessage(Text.literal( + context.getSource().sendSystemMessage(Component.literal( "Clan " + clan.name() + " has been disbanded." )); } else { - context.getSource().sendMessage(Text.literal( + context.getSource().sendSystemMessage(Component.literal( "Clan " + clan.name() + " does not exist." )); } diff --git a/src/main/java/mnfu/clantag/commands/HelpCommand.java b/src/main/java/mnfu/clantag/commands/HelpCommand.java index cc77e83..e7542e5 100644 --- a/src/main/java/mnfu/clantag/commands/HelpCommand.java +++ b/src/main/java/mnfu/clantag/commands/HelpCommand.java @@ -2,19 +2,19 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.text.ClickEvent; -import net.minecraft.text.HoverEvent; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.commands.Commands; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; public class HelpCommand { - private final MutableText generalMessage; - private final MutableText manageMessage; - private final MutableText adminMessage; + private final MutableComponent generalMessage; + private final MutableComponent manageMessage; + private final MutableComponent adminMessage; public HelpCommand() { generalMessage = buildGeneralMessage(); @@ -22,111 +22,111 @@ public HelpCommand() { adminMessage = buildAdminMessage(); } - public LiteralArgumentBuilder build() { - return CommandManager.literal("help") + public LiteralArgumentBuilder build() { + return Commands.literal("help") .executes(this::executeGeneral) // default to "general commands" page - .then(CommandManager.literal("general").executes(this::executeGeneral)) - .then(CommandManager.literal("manage").executes(this::executeManage)) - .then(CommandManager.literal("admin").executes(this::executeAdmin)); + .then(Commands.literal("general").executes(this::executeGeneral)) + .then(Commands.literal("manage").executes(this::executeManage)) + .then(Commands.literal("admin").executes(this::executeAdmin)); } // HELP PAGE FOR GENERAL COMMANDS - public int executeGeneral(CommandContext context) { - context.getSource().sendMessage(generalMessage); + public int executeGeneral(CommandContext context) { + context.getSource().sendSystemMessage(generalMessage); return 1; } // HELP PAGE FOR MANAGEMENT COMMANDS - private int executeManage(CommandContext context) { - context.getSource().sendMessage(manageMessage); + private int executeManage(CommandContext context) { + context.getSource().sendSystemMessage(manageMessage); return 1; } // HELP PAGE FOR ADMIN COMMANDS - private int executeAdmin(CommandContext context) { - context.getSource().sendMessage(adminMessage); + private int executeAdmin(CommandContext context) { + context.getSource().sendSystemMessage(adminMessage); return 1; } - public MutableText buildGeneralMessage () { - MutableText message = Text.empty(); - message.append(Text.literal("[ General Commands ]").formatted(Formatting.WHITE)).append("\n"); - message.append(Text.literal("/clan help [pageName]").formatted(Formatting.YELLOW)).append(" - Shows a help menu page (defaults to this page if [pageName] isn't chosen)").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan create ").formatted(Formatting.YELLOW)).append(" - Creates a clan if it doesn't already exist").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan info [name|player] ").formatted(Formatting.YELLOW)).append(" - Shows info about a clan, defaults to your clan if no arguments given").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan invites").formatted(Formatting.YELLOW)).append(" - Displays your current clan invites to accept/decline").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan accept ").formatted(Formatting.YELLOW)).append(" - Accepts a clan invite").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan decline ").formatted(Formatting.YELLOW)).append(" - Declines a clan invite").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan join ").formatted(Formatting.YELLOW)).append(" - Joins a clan if it is open").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan leave").formatted(Formatting.YELLOW)).append(" - Leaves your current clan. If you are the last remaining member, it disbands the clan as well").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("[Management Help Page]") - .styled(style -> style - .withColor(Formatting.GOLD) + public MutableComponent buildGeneralMessage () { + MutableComponent message = Component.empty(); + message.append(Component.literal("[ General Commands ]").withStyle(ChatFormatting.WHITE)).append("\n"); + message.append(Component.literal("/clan help [pageName]").withStyle(ChatFormatting.YELLOW)).append(" - Shows a help menu page (defaults to this page if [pageName] isn't chosen)").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan create ").withStyle(ChatFormatting.YELLOW)).append(" - Creates a clan if it doesn't already exist").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan info [name|player] ").withStyle(ChatFormatting.YELLOW)).append(" - Shows info about a clan, defaults to your clan if no arguments given").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan invites").withStyle(ChatFormatting.YELLOW)).append(" - Displays your current clan invites to accept/decline").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan accept ").withStyle(ChatFormatting.YELLOW)).append(" - Accepts a clan invite").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan decline ").withStyle(ChatFormatting.YELLOW)).append(" - Declines a clan invite").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan join ").withStyle(ChatFormatting.YELLOW)).append(" - Joins a clan if it is open").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan leave").withStyle(ChatFormatting.YELLOW)).append(" - Leaves your current clan. If you are the last remaining member, it disbands the clan as well").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("[Management Help Page]") + .withStyle(style -> style + .withColor(ChatFormatting.GOLD) .withClickEvent(new ClickEvent.RunCommand("/clan help manage")) - .withHoverEvent(new HoverEvent.ShowText(Text.literal("Click to view management commands")))) + .withHoverEvent(new HoverEvent.ShowText(Component.literal("Click to view management commands")))) ); - message.append(Text.literal(" | ").formatted(Formatting.GRAY)); - message.append(Text.literal("[Admin Help Page]") - .styled(style -> style - .withColor(Formatting.GOLD) + message.append(Component.literal(" | ").withStyle(ChatFormatting.GRAY)); + message.append(Component.literal("[Admin Help Page]") + .withStyle(style -> style + .withColor(ChatFormatting.GOLD) .withClickEvent(new ClickEvent.RunCommand("/clan help admin")) - .withHoverEvent(new HoverEvent.ShowText(Text.literal("Click to view admin commands")))) + .withHoverEvent(new HoverEvent.ShowText(Component.literal("Click to view admin commands")))) ); message.append("\n"); return message; } - public MutableText buildManageMessage () { - MutableText message = Text.empty(); - message.append(Text.literal("[ Management Commands ]").formatted(Formatting.WHITE)).append("\n"); - message.append(Text.literal("/clan invite ").formatted(Formatting.YELLOW)).append(" - Invites to your clan").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan kick ").formatted(Formatting.YELLOW)).append(" - Kicks from your clan").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan promote ").formatted(Formatting.YELLOW)).append(" - Promotes a player in the clan rank hierarchy").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan demote ").formatted(Formatting.YELLOW)).append(" - Demotes a player in the clan rank hierarchy").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan disband [confirm]").formatted(Formatting.YELLOW)).append(" - Facilitates the deletion of your clan").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan set color ").formatted(Formatting.YELLOW)).append(" - Sets your clan color (supports \"WHITE\" or #FFFFFF or FFFFFF formats)").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan set access [open|invite_only|toggle]").formatted(Formatting.YELLOW)).append(" - Sets your clan access to open or invite only").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan set name ").formatted(Formatting.YELLOW)).append(" - Sets your clan name to if it is available").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan transfer ").formatted(Formatting.YELLOW)).append(" - Transfers clan ownership to ").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("[General Help Page]") - .styled(style -> style - .withColor(Formatting.GOLD) + public MutableComponent buildManageMessage () { + MutableComponent message = Component.empty(); + message.append(Component.literal("[ Management Commands ]").withStyle(ChatFormatting.WHITE)).append("\n"); + message.append(Component.literal("/clan invite ").withStyle(ChatFormatting.YELLOW)).append(" - Invites to your clan").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan kick ").withStyle(ChatFormatting.YELLOW)).append(" - Kicks from your clan").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan promote ").withStyle(ChatFormatting.YELLOW)).append(" - Promotes a player in the clan rank hierarchy").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan demote ").withStyle(ChatFormatting.YELLOW)).append(" - Demotes a player in the clan rank hierarchy").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan disband [confirm]").withStyle(ChatFormatting.YELLOW)).append(" - Facilitates the deletion of your clan").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan set color ").withStyle(ChatFormatting.YELLOW)).append(" - Sets your clan color (supports \"WHITE\" or #FFFFFF or FFFFFF formats)").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan set access [open|invite_only|toggle]").withStyle(ChatFormatting.YELLOW)).append(" - Sets your clan access to open or invite only").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan set name ").withStyle(ChatFormatting.YELLOW)).append(" - Sets your clan name to if it is available").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan transfer ").withStyle(ChatFormatting.YELLOW)).append(" - Transfers clan ownership to ").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("[General Help Page]") + .withStyle(style -> style + .withColor(ChatFormatting.GOLD) .withClickEvent(new ClickEvent.RunCommand("/clan help general")) - .withHoverEvent(new HoverEvent.ShowText(Text.literal("Click to view general commands")))) + .withHoverEvent(new HoverEvent.ShowText(Component.literal("Click to view general commands")))) ); - message.append(Text.literal(" | ").formatted(Formatting.GRAY)); - message.append(Text.literal("[Admin Help Page]") - .styled(style -> style - .withColor(Formatting.GOLD) + message.append(Component.literal(" | ").withStyle(ChatFormatting.GRAY)); + message.append(Component.literal("[Admin Help Page]") + .withStyle(style -> style + .withColor(ChatFormatting.GOLD) .withClickEvent(new ClickEvent.RunCommand("/clan help admin")) - .withHoverEvent(new HoverEvent.ShowText(Text.literal("Click to view admin commands")))) + .withHoverEvent(new HoverEvent.ShowText(Component.literal("Click to view admin commands")))) ); message.append("\n"); return message; } - public MutableText buildAdminMessage () { - MutableText message = Text.empty(); - message.append(Text.literal("[ Admin Commands ]").formatted(Formatting.WHITE)).append("\n"); - message.append(Text.literal("/clan admin add ").formatted(Formatting.YELLOW)).append(" - Adds to a clan").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan admin remove ").formatted(Formatting.YELLOW)).append(" - Removes from a clan").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan admin delete ").formatted(Formatting.YELLOW)).append(" - Deletes a clan").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan admin rename <\"clanName\"> ").formatted(Formatting.YELLOW)).append(" - Renames a clan (Overrides length limitations)").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan admin transfer ").formatted(Formatting.YELLOW)).append(" - Transfers clan ownership to ").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan admin reload").formatted(Formatting.YELLOW)).append(" - Reloads clans.json from disk").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("/clan admin cache clear").formatted(Formatting.YELLOW)).append(" - Clears the MojangAPI Cache").formatted(Formatting.GRAY).append("\n"); - message.append(Text.literal("[General Help Page]") - .styled(style -> style - .withColor(Formatting.GOLD) + public MutableComponent buildAdminMessage () { + MutableComponent message = Component.empty(); + message.append(Component.literal("[ Admin Commands ]").withStyle(ChatFormatting.WHITE)).append("\n"); + message.append(Component.literal("/clan admin add ").withStyle(ChatFormatting.YELLOW)).append(" - Adds to a clan").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan admin remove ").withStyle(ChatFormatting.YELLOW)).append(" - Removes from a clan").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan admin delete ").withStyle(ChatFormatting.YELLOW)).append(" - Deletes a clan").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan admin rename <\"clanName\"> ").withStyle(ChatFormatting.YELLOW)).append(" - Renames a clan (Overrides length limitations)").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan admin transfer ").withStyle(ChatFormatting.YELLOW)).append(" - Transfers clan ownership to ").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan admin reload").withStyle(ChatFormatting.YELLOW)).append(" - Reloads clans.json from disk").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("/clan admin cache clear").withStyle(ChatFormatting.YELLOW)).append(" - Clears the MojangAPI Cache").withStyle(ChatFormatting.GRAY).append("\n"); + message.append(Component.literal("[General Help Page]") + .withStyle(style -> style + .withColor(ChatFormatting.GOLD) .withClickEvent(new ClickEvent.RunCommand("/clan help general")) - .withHoverEvent(new HoverEvent.ShowText(Text.literal("Click to view general commands")))) + .withHoverEvent(new HoverEvent.ShowText(Component.literal("Click to view general commands")))) ); - message.append(Text.literal(" | ").formatted(Formatting.GRAY)); - message.append(Text.literal("[Management Help Page]") - .styled(style -> style - .withColor(Formatting.GOLD) + message.append(Component.literal(" | ").withStyle(ChatFormatting.GRAY)); + message.append(Component.literal("[Management Help Page]") + .withStyle(style -> style + .withColor(ChatFormatting.GOLD) .withClickEvent(new ClickEvent.RunCommand("/clan help manage")) - .withHoverEvent(new HoverEvent.ShowText(Text.literal("Click to view management commands")))) + .withHoverEvent(new HoverEvent.ShowText(Component.literal("Click to view management commands")))) ); message.append("\n"); return message; diff --git a/src/main/java/mnfu/clantag/commands/InfoCommand.java b/src/main/java/mnfu/clantag/commands/InfoCommand.java index 5fc9221..b0f4306 100644 --- a/src/main/java/mnfu/clantag/commands/InfoCommand.java +++ b/src/main/java/mnfu/clantag/commands/InfoCommand.java @@ -5,14 +5,14 @@ import com.mojang.brigadier.context.CommandContext; import mnfu.clantag.Clan; import mnfu.clantag.ClanManager; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.MutableText; -import net.minecraft.text.Style; -import net.minecraft.text.Text; -import net.minecraft.text.TextColor; -import net.minecraft.util.Formatting; +import net.minecraft.commands.Commands; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Style; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextColor; +import net.minecraft.ChatFormatting; import java.util.Collection; import java.util.LinkedHashSet; @@ -30,11 +30,11 @@ public InfoCommand(ClanManager clanManager) { this.clanManager = clanManager; } - public LiteralArgumentBuilder build() { - return CommandManager.literal("info") + public LiteralArgumentBuilder build() { + return Commands.literal("info") .executes(this::executeForSelf) - .then(CommandManager.literal("name") - .then(CommandManager.argument("clanName", StringArgumentType.greedyString()) + .then(Commands.literal("name") + .then(Commands.argument("clanName", StringArgumentType.greedyString()) .suggests((context, builder) -> { for (String canonicalName : clanManager.getAllClansCanonicalNames()) { builder.suggest(canonicalName); @@ -44,10 +44,10 @@ public LiteralArgumentBuilder build() { .executes(this::executeForClanName) ) ) - .then(CommandManager.literal("player") - .then(CommandManager.argument("playerName", StringArgumentType.word()) + .then(Commands.literal("player") + .then(Commands.argument("playerName", StringArgumentType.word()) .suggests((context, builder) -> { - Collection onlinePlayers = context.getSource().getPlayerNames(); + Collection onlinePlayers = context.getSource().getOnlinePlayerNames(); onlinePlayers.forEach(builder::suggest); return builder.buildFuture(); }) @@ -56,17 +56,17 @@ public LiteralArgumentBuilder build() { ); } - private int executeForSelf(CommandContext context) { - ServerPlayerEntity executor = context.getSource().getPlayer(); + private int executeForSelf(CommandContext context) { + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) { // not a player if null, assume console - context.getSource().sendError(Text.literal("You are not a player, so you must specify a clan name.")); + context.getSource().sendFailure(Component.literal("You are not a player, so you must specify a clan name.")); return 0; } - Clan clan = clanManager.getPlayerClan(executor.getUuid()); + Clan clan = clanManager.getPlayerClan(executor.getUUID()); if (clan == null) { - context.getSource().sendError(Text.literal("Clan not found!")); + context.getSource().sendFailure(Component.literal("Clan not found!")); return 0; } @@ -74,12 +74,12 @@ private int executeForSelf(CommandContext context) { return 1; } - private int executeForClanName(CommandContext context) { + private int executeForClanName(CommandContext context) { String clanName = StringArgumentType.getString(context, "clanName"); Clan clan = clanManager.getClan(clanName); if (clan == null) { - context.getSource().sendError(Text.literal("Clan not found!")); + context.getSource().sendFailure(Component.literal("Clan not found!")); return 0; } @@ -87,19 +87,19 @@ private int executeForClanName(CommandContext context) { return 1; } - private int executeForPlayer(CommandContext context) { + private int executeForPlayer(CommandContext context) { String playerName = StringArgumentType.getString(context, "playerName"); getUuid(context, playerName).thenAccept(optUuid -> { UUID playerUuid = optUuid.orElse(null); if (playerUuid == null) { - context.getSource().sendError(Text.literal("Player not found!")); + context.getSource().sendFailure(Component.literal("Player not found!")); return; } Clan clan = clanManager.getPlayerClan(playerUuid); if (clan == null) { - context.getSource().sendError(Text.literal("This player is not in a clan.")); + context.getSource().sendFailure(Component.literal("This player is not in a clan.")); return; } @@ -109,83 +109,83 @@ private int executeForPlayer(CommandContext context) { return 1; } - private void displayClanInfo(CommandContext context, Clan clan) { - MutableText message = Text.empty(); - TextColor clanColor = TextColor.parse(clan.hexColor()).getOrThrow(); + private void displayClanInfo(CommandContext context, Clan clan) { + MutableComponent message = Component.empty(); + TextColor clanColor = TextColor.parseColor(clan.hexColor()).getOrThrow(); - message.append(Text.literal(clan.name()) + message.append(Component.literal(clan.name()) .setStyle(Style.EMPTY.withColor(clanColor))); - message.append(Text.literal(" (" + clan.name() + ")").formatted(Formatting.GRAY)) + message.append(Component.literal(" (" + clan.name() + ")").withStyle(ChatFormatting.GRAY)) .append("\n"); getPlayerName(context, clan.leader()).thenAccept(optLeaderName -> { String leaderName = optLeaderName.orElse("Unknown Player"); - message.append(Text.literal("Leader: ").formatted(Formatting.WHITE)) - .append(Text.literal(leaderName).formatted(Formatting.GOLD)) + message.append(Component.literal("Leader: ").withStyle(ChatFormatting.WHITE)) + .append(Component.literal(leaderName).withStyle(ChatFormatting.GOLD)) .append("\n"); formatPlayerList(context, clan.officers(), clan.leader(), clan.officers()).thenAccept(officersText -> { if (!clan.officers().isEmpty()) { - message.append(Text.literal("Officers: ").formatted(Formatting.WHITE)) + message.append(Component.literal("Officers: ").withStyle(ChatFormatting.WHITE)) .append(officersText) .append("\n"); } formatPlayerList(context, clan.members(), clan.leader(), clan.officers()).thenAccept(membersText -> { - message.append(Text.literal("Members: ").formatted(Formatting.WHITE)) + message.append(Component.literal("Members: ").withStyle(ChatFormatting.WHITE)) .append(membersText) .append("\n"); - message.append(Text.literal("Color: ").formatted(Formatting.WHITE)); + message.append(Component.literal("Color: ").withStyle(ChatFormatting.WHITE)); MinecraftColor color = MinecraftColor.fromColor( Integer.parseInt(clan.hexColor().substring(1), 16) ); if (color != null) { - message.append(Text.literal(color.getDisplayName()) + message.append(Component.literal(color.getDisplayName()) .setStyle(Style.EMPTY.withColor(clanColor))); } else { - message.append(Text.literal(clan.hexColor()) + message.append(Component.literal(clan.hexColor()) .setStyle(Style.EMPTY.withColor(clanColor))); } - message.append(", Access: ").formatted(Formatting.WHITE); - message.append(Text.literal(clan.isClosed() ? "Invite Only" : "Open") - .formatted(clan.isClosed() ? Formatting.RED : Formatting.GREEN)); + message.append(", Access: ").withStyle(ChatFormatting.WHITE); + message.append(Component.literal(clan.isClosed() ? "Invite Only" : "Open") + .withStyle(clan.isClosed() ? ChatFormatting.RED : ChatFormatting.GREEN)); - context.getSource().getServer().execute(() -> context.getSource().sendMessage(message)); + context.getSource().getServer().execute(() -> context.getSource().sendSystemMessage(message)); }); }); }); } - private CompletableFuture formatPlayerList(CommandContext context, - LinkedHashSet uuids, - UUID leaderUuid, - LinkedHashSet officerUuids) { - List> futures = uuids.stream() + private CompletableFuture formatPlayerList(CommandContext context, + LinkedHashSet uuids, + UUID leaderUuid, + LinkedHashSet officerUuids) { + List> futures = uuids.stream() .map(uuid -> getPlayerName(context, uuid).thenApply(optName -> { String name = optName.orElse("Unknown Player"); - Formatting format; + ChatFormatting format; if (uuid.equals(leaderUuid)) { - format = Formatting.GOLD; + format = ChatFormatting.GOLD; } else if (officerUuids.contains(uuid)) { - format = Formatting.YELLOW; + format = ChatFormatting.YELLOW; } else { - format = Formatting.GRAY; + format = ChatFormatting.GRAY; } - return Text.literal(name).formatted(format); + return Component.literal(name).withStyle(format); }) ) .toList(); return CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new)) .thenApply(v -> { - MutableText list = Text.empty(); + MutableComponent list = Component.empty(); for (int i = 0; i < futures.size(); i++) { list.append(futures.get(i).join()); if (i < futures.size() - 1) { - list.append(Text.literal(", ").formatted(Formatting.GRAY)); + list.append(Component.literal(", ").withStyle(ChatFormatting.GRAY)); } } return list; diff --git a/src/main/java/mnfu/clantag/commands/InviteCommand.java b/src/main/java/mnfu/clantag/commands/InviteCommand.java index 5186c91..e2bd553 100644 --- a/src/main/java/mnfu/clantag/commands/InviteCommand.java +++ b/src/main/java/mnfu/clantag/commands/InviteCommand.java @@ -5,17 +5,17 @@ import com.mojang.brigadier.context.CommandContext; import mnfu.clantag.Clan; import mnfu.clantag.ClanManager; -import net.minecraft.server.PlayerManager; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.ClickEvent; -import net.minecraft.text.HoverEvent; -import net.minecraft.text.MutableText; -import net.minecraft.text.Style; -import net.minecraft.text.Text; -import net.minecraft.text.TextColor; -import net.minecraft.util.Formatting; +import net.minecraft.server.players.PlayerList; +import net.minecraft.commands.Commands; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Style; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextColor; +import net.minecraft.ChatFormatting; import java.util.Collection; import java.util.Set; @@ -30,24 +30,24 @@ public InviteCommand(ClanManager clanManager, InviteManager inviteManager) { this.inviteManager = inviteManager; } - public LiteralArgumentBuilder buildInvite() { - return CommandManager.literal("invite") - .then(CommandManager.argument("playerName", StringArgumentType.word()) + public LiteralArgumentBuilder buildInvite() { + return Commands.literal("invite") + .then(Commands.argument("playerName", StringArgumentType.word()) .suggests((context, builder) -> { - Collection onlinePlayers = context.getSource().getPlayerNames(); + Collection onlinePlayers = context.getSource().getOnlinePlayerNames(); onlinePlayers.forEach(builder::suggest); return builder.buildFuture(); }) .executes(this::executeInvite)); } - public LiteralArgumentBuilder buildAccept() { - return CommandManager.literal("accept") - .then(CommandManager.argument("clanName", StringArgumentType.greedyString()) + public LiteralArgumentBuilder buildAccept() { + return Commands.literal("accept") + .then(Commands.argument("clanName", StringArgumentType.greedyString()) .suggests((context, suggestionsBuilder) -> { - ServerPlayerEntity player = context.getSource().getPlayer(); + ServerPlayer player = context.getSource().getPlayer(); if (player != null) { - Set invites = inviteManager.getInvites(player.getUuid()); + Set invites = inviteManager.getInvites(player.getUUID()); for (String clanName : invites) { suggestionsBuilder.suggest(clanName); } @@ -57,13 +57,13 @@ public LiteralArgumentBuilder buildAccept() { .executes(this::executeAccept)); } - public LiteralArgumentBuilder buildDecline() { - return CommandManager.literal("decline") - .then(CommandManager.argument("clanName", StringArgumentType.greedyString()) + public LiteralArgumentBuilder buildDecline() { + return Commands.literal("decline") + .then(Commands.argument("clanName", StringArgumentType.greedyString()) .suggests((context, suggestionsBuilder) -> { - ServerPlayerEntity player = context.getSource().getPlayer(); + ServerPlayer player = context.getSource().getPlayer(); if (player != null) { - Set invites = inviteManager.getInvites(player.getUuid()); + Set invites = inviteManager.getInvites(player.getUUID()); for (String clanName : invites) { suggestionsBuilder.suggest(clanName); } @@ -73,28 +73,28 @@ public LiteralArgumentBuilder buildDecline() { .executes(this::executeDecline)); } - public LiteralArgumentBuilder buildInvites() { - return CommandManager.literal("invites") + public LiteralArgumentBuilder buildInvites() { + return Commands.literal("invites") .executes(this::executeListInvites); } - private int executeInvite(CommandContext context) { - ServerPlayerEntity executor = context.getSource().getPlayer(); + private int executeInvite(CommandContext context) { + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) { - context.getSource().sendError(Text.literal("Only players can send invites!")); + context.getSource().sendFailure(Component.literal("Only players can send invites!")); return 0; } - UUID executorUuid = executor.getUuid(); + UUID executorUuid = executor.getUUID(); Clan executorClan = clanManager.getPlayerClan(executorUuid); if (executorClan == null) { - context.getSource().sendError(Text.literal("You must be in a clan to invite players!")); + context.getSource().sendFailure(Component.literal("You must be in a clan to invite players!")); return 0; } if (!executorClan.leader().equals(executorUuid) && !executorClan.officers().contains(executorUuid)) { - context.getSource().sendError(Text.literal("You are not the leader or an officer of a clan!")); + context.getSource().sendFailure(Component.literal("You are not the leader or an officer of a clan!")); return 0; } @@ -102,197 +102,197 @@ private int executeInvite(CommandContext context) { CommandUtils.getUuid(context, targetName).thenAccept(optUuid -> context.getSource().getServer().execute(() -> { if (optUuid.isEmpty()) { - context.getSource().sendError(Text.literal("Player not found!")); + context.getSource().sendFailure(Component.literal("Player not found!")); return; } UUID targetUuid = optUuid.get(); - if (targetUuid.equals(executor.getUuid())) { - context.getSource().sendError(Text.literal("You cannot invite yourself!")); + if (targetUuid.equals(executor.getUUID())) { + context.getSource().sendFailure(Component.literal("You cannot invite yourself!")); return; } Clan targetClan = clanManager.getPlayerClan(targetUuid); if (targetClan != null) { - context.getSource().sendError(Text.literal(targetName + " is already in a clan!")); + context.getSource().sendFailure(Component.literal(targetName + " is already in a clan!")); return; } if (inviteManager.hasInvite(targetUuid, executorClan.name())) { - context.getSource().sendError(Text.literal(targetName + " already has a pending invite to " + executorClan.name() + "!")); + context.getSource().sendFailure(Component.literal(targetName + " already has a pending invite to " + executorClan.name() + "!")); return; } inviteManager.addInvite(targetUuid, executorClan.name()); - context.getSource().sendMessage(Text.literal("Invited " + targetName + " to " + executorClan.name() + "!")); + context.getSource().sendSystemMessage(Component.literal("Invited " + targetName + " to " + executorClan.name() + "!")); - ServerPlayerEntity targetPlayer = context.getSource().getServer() - .getPlayerManager() + ServerPlayer targetPlayer = context.getSource().getServer() + .getPlayerList() .getPlayer(targetUuid); if (targetPlayer != null) { - MutableText inviteMessage = Text.literal("You've been invited to join ") - .formatted(Formatting.YELLOW); + MutableComponent inviteMessage = Component.literal("You've been invited to join ") + .withStyle(ChatFormatting.YELLOW); - inviteMessage.append(Text.literal(executorClan.name()) - .setStyle(Style.EMPTY.withColor(TextColor.parse(executorClan.hexColor()).getOrThrow()))); + inviteMessage.append(Component.literal(executorClan.name()) + .setStyle(Style.EMPTY.withColor(TextColor.parseColor(executorClan.hexColor()).getOrThrow()))); - inviteMessage.append(Text.literal("! ").formatted(Formatting.YELLOW)); + inviteMessage.append(Component.literal("! ").withStyle(ChatFormatting.YELLOW)); - MutableText acceptButton = Text.literal("[Accept]") - .styled(style -> style - .withColor(Formatting.GREEN) + MutableComponent acceptButton = Component.literal("[Accept]") + .withStyle(style -> style + .withColor(ChatFormatting.GREEN) .withClickEvent(new ClickEvent.RunCommand("/clan accept " + executorClan.name())) - .withHoverEvent(new HoverEvent.ShowText(Text.literal("Click to accept")))); + .withHoverEvent(new HoverEvent.ShowText(Component.literal("Click to accept")))); inviteMessage.append(acceptButton); - inviteMessage.append(Text.literal(" ")); + inviteMessage.append(Component.literal(" ")); - MutableText declineButton = Text.literal("[Decline]") - .styled(style -> style - .withColor(Formatting.RED) + MutableComponent declineButton = Component.literal("[Decline]") + .withStyle(style -> style + .withColor(ChatFormatting.RED) .withClickEvent(new ClickEvent.RunCommand("/clan decline " + executorClan.name())) - .withHoverEvent(new HoverEvent.ShowText(Text.literal("Click to decline")))); + .withHoverEvent(new HoverEvent.ShowText(Component.literal("Click to decline")))); inviteMessage.append(declineButton); - targetPlayer.sendMessage(inviteMessage, false); + targetPlayer.sendSystemMessage(inviteMessage); } })); return 1; } - private int executeAccept(CommandContext context) { - ServerPlayerEntity executor = context.getSource().getPlayer(); + private int executeAccept(CommandContext context) { + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) { - context.getSource().sendError(Text.literal("Only players can accept invites!")); + context.getSource().sendFailure(Component.literal("Only players can accept invites!")); return 0; } String clanName = StringArgumentType.getString(context, "clanName"); - UUID executorUuid = executor.getUuid(); + UUID executorUuid = executor.getUUID(); Clan currentClan = clanManager.getPlayerClan(executorUuid); if (currentClan != null) { - context.getSource().sendError(Text.literal("You are already in a clan! Leave your current clan first.")); + context.getSource().sendFailure(Component.literal("You are already in a clan! Leave your current clan first.")); return 0; } Clan clan = clanManager.getClan(clanName); if (clan == null) { - context.getSource().sendError(Text.literal("That clan no longer exists!")); + context.getSource().sendFailure(Component.literal("That clan no longer exists!")); inviteManager.removeInvite(executorUuid, clanName); return 0; } if (!inviteManager.hasInvite(executorUuid, clan.name())) { - context.getSource().sendError(Text.literal("You don't have an invite to " + clanName + "!")); + context.getSource().sendFailure(Component.literal("You don't have an invite to " + clanName + "!")); return 0; } clanManager.addMember(clan.name(), executorUuid); - PlayerManager pm = context.getSource().getServer().getPlayerManager(); + PlayerList pm = context.getSource().getServer().getPlayerList(); for (UUID member : clan.members()) { - ServerPlayerEntity player = pm.getPlayer(member); + ServerPlayer player = pm.getPlayer(member); if (player != null) { - player.sendMessage(Text.literal(executor.getName().getString() + " joined the clan!")); + player.sendSystemMessage(Component.literal(executor.getName().getString() + " joined the clan!")); } } inviteManager.clearInvitesForPlayer(executorUuid); - MutableText message = Text.literal("You've joined ") - .formatted(Formatting.GREEN); - message.append(Text.literal(clan.name()) - .setStyle(Style.EMPTY.withColor(TextColor.parse(clan.hexColor()).getOrThrow()))); - message.append(Text.literal("!").formatted(Formatting.GREEN)); + MutableComponent message = Component.literal("You've joined ") + .withStyle(ChatFormatting.GREEN); + message.append(Component.literal(clan.name()) + .setStyle(Style.EMPTY.withColor(TextColor.parseColor(clan.hexColor()).getOrThrow()))); + message.append(Component.literal("!").withStyle(ChatFormatting.GREEN)); - context.getSource().sendMessage(message); + context.getSource().sendSystemMessage(message); return 1; } - private int executeDecline(CommandContext context) { - ServerPlayerEntity executor = context.getSource().getPlayer(); + private int executeDecline(CommandContext context) { + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) { - context.getSource().sendError(Text.literal("Only players can decline invites!")); + context.getSource().sendFailure(Component.literal("Only players can decline invites!")); return 0; } String clanName = StringArgumentType.getString(context, "clanName"); - UUID executorUuid = executor.getUuid(); + UUID executorUuid = executor.getUUID(); Clan clan = clanManager.getClan(clanName); if (clan == null) { // clean up stale invite even if the clan no longer exists inviteManager.removeInvite(executorUuid, clanName); - context.getSource().sendError(Text.literal("That clan no longer exists!")); + context.getSource().sendFailure(Component.literal("That clan no longer exists!")); return 0; } if (!inviteManager.hasInvite(executorUuid, clan.name())) { - context.getSource().sendError(Text.literal("You don't have an invite to " + clanName + "!")); + context.getSource().sendFailure(Component.literal("You don't have an invite to " + clanName + "!")); return 0; } inviteManager.removeInvite(executorUuid, clan.name()); - context.getSource().sendMessage(Text.literal("Declined invite to " + clanName + ".").formatted(Formatting.GRAY)); + context.getSource().sendSystemMessage(Component.literal("Declined invite to " + clanName + ".").withStyle(ChatFormatting.GRAY)); return 1; } - private int executeListInvites(CommandContext context) { - ServerPlayerEntity executor = context.getSource().getPlayer(); + private int executeListInvites(CommandContext context) { + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) { - context.getSource().sendError(Text.literal("Only players can view invites!")); + context.getSource().sendFailure(Component.literal("Only players can view invites!")); return 0; } - Set invites = inviteManager.getInvites(executor.getUuid()); + Set invites = inviteManager.getInvites(executor.getUUID()); if (invites.isEmpty()) { - context.getSource().sendMessage(Text.literal("You have no pending clan invites.").formatted(Formatting.GRAY)); + context.getSource().sendSystemMessage(Component.literal("You have no pending clan invites.").withStyle(ChatFormatting.GRAY)); return 0; } - MutableText message = Text.literal("Pending clan invites:").formatted(Formatting.YELLOW); + MutableComponent message = Component.literal("Pending clan invites:").withStyle(ChatFormatting.YELLOW); message.append("\n"); for (String clanName : invites) { Clan clan = clanManager.getClan(clanName); if (clan != null) { - message.append(Text.literal("• ")); - message.append(Text.literal(clan.name()) - .setStyle(Style.EMPTY.withColor(TextColor.parse(clan.hexColor()).getOrThrow()))); + message.append(Component.literal("• ")); + message.append(Component.literal(clan.name()) + .setStyle(Style.EMPTY.withColor(TextColor.parseColor(clan.hexColor()).getOrThrow()))); - message.append(Text.literal(" ")); + message.append(Component.literal(" ")); - MutableText acceptButton = Text.literal("[Accept]") - .styled(style -> style - .withColor(Formatting.GREEN) + MutableComponent acceptButton = Component.literal("[Accept]") + .withStyle(style -> style + .withColor(ChatFormatting.GREEN) .withClickEvent(new ClickEvent.RunCommand("/clan accept " + clanName)) - .withHoverEvent(new HoverEvent.ShowText(Text.literal("Click to accept")))); + .withHoverEvent(new HoverEvent.ShowText(Component.literal("Click to accept")))); message.append(acceptButton); - message.append(Text.literal(" ")); + message.append(Component.literal(" ")); - MutableText declineButton = Text.literal("[Decline]") - .styled(style -> style - .withColor(Formatting.RED) + MutableComponent declineButton = Component.literal("[Decline]") + .withStyle(style -> style + .withColor(ChatFormatting.RED) .withClickEvent(new ClickEvent.RunCommand("/clan decline " + clanName)) - .withHoverEvent(new HoverEvent.ShowText(Text.literal("Click to decline")))); + .withHoverEvent(new HoverEvent.ShowText(Component.literal("Click to decline")))); message.append(declineButton); message.append("\n"); } } - context.getSource().sendMessage(message); + context.getSource().sendSystemMessage(message); return 1; } } diff --git a/src/main/java/mnfu/clantag/commands/JoinCommand.java b/src/main/java/mnfu/clantag/commands/JoinCommand.java index da5af17..084076d 100644 --- a/src/main/java/mnfu/clantag/commands/JoinCommand.java +++ b/src/main/java/mnfu/clantag/commands/JoinCommand.java @@ -5,15 +5,15 @@ import com.mojang.brigadier.context.CommandContext; import mnfu.clantag.Clan; import mnfu.clantag.ClanManager; -import net.minecraft.server.PlayerManager; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.MutableText; -import net.minecraft.text.Style; -import net.minecraft.text.Text; -import net.minecraft.text.TextColor; -import net.minecraft.util.Formatting; +import net.minecraft.server.players.PlayerList; +import net.minecraft.commands.Commands; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Style; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextColor; +import net.minecraft.ChatFormatting; import java.util.Map; import java.util.UUID; @@ -25,9 +25,9 @@ public JoinCommand(ClanManager clanManager) { this.clanManager = clanManager; } - public LiteralArgumentBuilder build() { - return CommandManager.literal("join") - .then(CommandManager.argument("clanName", StringArgumentType.greedyString()) + public LiteralArgumentBuilder build() { + return Commands.literal("join") + .then(Commands.argument("clanName", StringArgumentType.greedyString()) .suggests((context, builder) -> { for (Map.Entry entry : clanManager.getClansMap().entrySet()) { if (!entry.getValue().isClosed()) builder.suggest(entry.getKey()); @@ -38,40 +38,40 @@ public LiteralArgumentBuilder build() { ); } - private int executeJoin(CommandContext context) { - ServerPlayerEntity executor = context.getSource().getPlayer(); + private int executeJoin(CommandContext context) { + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) return 0; - Clan clan = clanManager.getPlayerClan(executor.getUuid()); + Clan clan = clanManager.getPlayerClan(executor.getUUID()); if (clan != null) { - context.getSource().sendError(Text.literal("You must leave your current clan to join a new one!")); + context.getSource().sendFailure(Component.literal("You must leave your current clan to join a new one!")); return 0; } String newClanName = StringArgumentType.getString(context, "clanName"); Clan newClan = clanManager.getClan(newClanName); if (newClan == null) { - context.getSource().sendError(Text.literal("Clan not found!")); + context.getSource().sendFailure(Component.literal("Clan not found!")); return 0; } if (newClan.isClosed()) { - context.getSource().sendError(Text.literal(newClan.name() + " is currently invite only!")); + context.getSource().sendFailure(Component.literal(newClan.name() + " is currently invite only!")); return 0; } else { - clanManager.addMember(newClanName, executor.getUuid()); + clanManager.addMember(newClanName, executor.getUUID()); - PlayerManager pm = context.getSource().getServer().getPlayerManager(); + PlayerList pm = context.getSource().getServer().getPlayerList(); for (UUID member : newClan.members()) { - ServerPlayerEntity player = pm.getPlayer(member); + ServerPlayer player = pm.getPlayer(member); if (player != null) { - player.sendMessage(Text.literal(executor.getName().getString() + " joined the clan!")); + player.sendSystemMessage(Component.literal(executor.getName().getString() + " joined the clan!")); } } - MutableText message = Text.literal("You've joined ") - .formatted(Formatting.GREEN); - message.append(Text.literal(newClan.name()) - .setStyle(Style.EMPTY.withColor(TextColor.parse(newClan.hexColor()).getOrThrow()))); - message.append(Text.literal("!").formatted(Formatting.GREEN)); - context.getSource().sendMessage(message); + MutableComponent message = Component.literal("You've joined ") + .withStyle(ChatFormatting.GREEN); + message.append(Component.literal(newClan.name()) + .setStyle(Style.EMPTY.withColor(TextColor.parseColor(newClan.hexColor()).getOrThrow()))); + message.append(Component.literal("!").withStyle(ChatFormatting.GREEN)); + context.getSource().sendSystemMessage(message); return 1; } } diff --git a/src/main/java/mnfu/clantag/commands/KickCommand.java b/src/main/java/mnfu/clantag/commands/KickCommand.java index c6c4b17..9b3c596 100644 --- a/src/main/java/mnfu/clantag/commands/KickCommand.java +++ b/src/main/java/mnfu/clantag/commands/KickCommand.java @@ -4,11 +4,11 @@ import com.mojang.brigadier.arguments.StringArgumentType; import mnfu.clantag.Clan; import mnfu.clantag.ClanManager; -import net.minecraft.server.PlayerManager; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; +import net.minecraft.server.players.PlayerList; +import net.minecraft.commands.Commands; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.network.chat.Component; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -22,23 +22,23 @@ public KickCommand(ClanManager clanManager) { this.clanManager = clanManager; } - public LiteralArgumentBuilder build() { - return CommandManager.literal("kick") - .then(CommandManager.argument("playerName", StringArgumentType.word()) + public LiteralArgumentBuilder build() { + return Commands.literal("kick") + .then(Commands.argument("playerName", StringArgumentType.word()) .suggests((context, builder) -> { - ServerPlayerEntity executor = context.getSource().getPlayer(); + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) return builder.buildFuture(); - Clan clan = clanManager.getPlayerClan(executor.getUuid()); + Clan clan = clanManager.getPlayerClan(executor.getUUID()); if (clan == null) return builder.buildFuture(); - boolean executorIsLeader = clan.leader().equals(executor.getUuid()); - boolean executorIsOfficer = clan.officers().contains(executor.getUuid()); + boolean executorIsLeader = clan.leader().equals(executor.getUUID()); + boolean executorIsOfficer = clan.officers().contains(executor.getUUID()); CompletableFuture[] nameFutures = clan.members().stream() .filter(targetUuid -> { // always allow self for self-kick - if (targetUuid.equals(executor.getUuid())) return true; + if (targetUuid.equals(executor.getUUID())) return true; // leader can kick anyone if (executorIsLeader) return true; @@ -55,18 +55,18 @@ public LiteralArgumentBuilder build() { }) .executes(context -> { - ServerPlayerEntity executor = context.getSource().getPlayer(); + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) { - context.getSource().sendError(Text.literal("Only players can kick members from clans!")); + context.getSource().sendFailure(Component.literal("Only players can kick members from clans!")); return 0; } String targetName = StringArgumentType.getString(context, "playerName"); - UUID executorUuid = executor.getUuid(); + UUID executorUuid = executor.getUUID(); Clan playerClan = clanManager.getPlayerClan(executorUuid); if (playerClan == null) { - context.getSource().sendError(Text.literal("You are not in a clan!")); + context.getSource().sendFailure(Component.literal("You are not in a clan!")); return 0; } @@ -74,7 +74,7 @@ public LiteralArgumentBuilder build() { boolean executorIsClanOfficer = playerClan.officers().contains(executorUuid); if (!executorIsClanLeader && !executorIsClanOfficer) { - context.getSource().sendError(Text.literal("You are not the leader or an officer of a clan!")); + context.getSource().sendFailure(Component.literal("You are not the leader or an officer of a clan!")); return 0; } @@ -82,14 +82,14 @@ public LiteralArgumentBuilder build() { getUuid(context, targetName).thenAccept(optUuid -> context.getSource().getServer().execute(() -> { // back on main thread if (optUuid.isEmpty()) { - context.getSource().sendError(Text.literal("Player not found!")); + context.getSource().sendFailure(Component.literal("Player not found!")); return; } UUID targetUuid = optUuid.get(); if (!playerClan.members().contains(targetUuid)) { - context.getSource().sendError(Text.literal(targetName + " is not in clan " + playerClan.name() + "!")); + context.getSource().sendFailure(Component.literal(targetName + " is not in clan " + playerClan.name() + "!")); return; } @@ -97,29 +97,29 @@ public LiteralArgumentBuilder build() { if (targetUuid.equals(executorUuid)) { if (playerClan.members().size() == 1) { clanManager.deleteClan(playerClan.name()); - context.getSource().sendMessage(Text.literal( + context.getSource().sendSystemMessage(Component.literal( "You have kicked yourself from " + playerClan.name() + "! Since you were the only member, the clan was disbanded." )); return; } if (executorIsClanLeader) { - context.getSource().sendError(Text.literal( + context.getSource().sendFailure(Component.literal( "You must transfer ownership before leaving or disbanding the clan!" )); return; } clanManager.removeMember(playerClan.name(), targetUuid); - PlayerManager pm = context.getSource().getServer().getPlayerManager(); + PlayerList pm = context.getSource().getServer().getPlayerList(); String executorName = executor.getName().getString(); for (UUID member : playerClan.members()) { if (member.equals(targetUuid)) continue; - ServerPlayerEntity player = pm.getPlayer(member); + ServerPlayer player = pm.getPlayer(member); if (player != null) { - player.sendMessage(Text.literal(executorName + " was kicked from the clan by " + executorName)); + player.sendSystemMessage(Component.literal(executorName + " was kicked from the clan by " + executorName)); } } - context.getSource().sendMessage(Text.literal("You have kicked yourself from " + playerClan.name() + "!")); + context.getSource().sendSystemMessage(Component.literal("You have kicked yourself from " + playerClan.name() + "!")); return; } @@ -128,7 +128,7 @@ public LiteralArgumentBuilder build() { // officer trying to kick leader or officer if (executorIsClanOfficer && (targetIsLeader || targetIsOfficer)) { - context.getSource().sendError(Text.literal( + context.getSource().sendFailure(Component.literal( "Officers cannot kick other officers or the leader!" )); return; @@ -138,16 +138,16 @@ public LiteralArgumentBuilder build() { // remove the member clanManager.removeMember(playerClan.name(), targetUuid); - PlayerManager pm = context.getSource().getServer().getPlayerManager(); + PlayerList pm = context.getSource().getServer().getPlayerList(); String executorName = executor.getName().getString(); for (UUID member : playerClan.members()) { if (member.equals(executorUuid) || member.equals(targetUuid)) continue; - ServerPlayerEntity player = pm.getPlayer(member); + ServerPlayer player = pm.getPlayer(member); if (player != null) { - player.sendMessage(Text.literal(targetName + " was kicked from the clan by " + executorName)); + player.sendSystemMessage(Component.literal(targetName + " was kicked from the clan by " + executorName)); } } - context.getSource().sendMessage(Text.literal( + context.getSource().sendSystemMessage(Component.literal( "Kicked " + targetName + " from " + playerClan.name() + "!" )); }) diff --git a/src/main/java/mnfu/clantag/commands/LeaveCommand.java b/src/main/java/mnfu/clantag/commands/LeaveCommand.java index 2c42aaa..7b49c92 100644 --- a/src/main/java/mnfu/clantag/commands/LeaveCommand.java +++ b/src/main/java/mnfu/clantag/commands/LeaveCommand.java @@ -3,11 +3,11 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import mnfu.clantag.Clan; import mnfu.clantag.ClanManager; -import net.minecraft.server.PlayerManager; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; +import net.minecraft.server.players.PlayerList; +import net.minecraft.commands.Commands; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.network.chat.Component; import java.util.UUID; @@ -18,20 +18,20 @@ public LeaveCommand(ClanManager clanManager) { this.clanManager = clanManager; } - public LiteralArgumentBuilder build() { - return CommandManager.literal("leave") + public LiteralArgumentBuilder build() { + return Commands.literal("leave") .executes(context -> { - ServerPlayerEntity executor = context.getSource().getPlayer(); + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) { - context.getSource().sendError(Text.literal("Only players can leave clans!")); + context.getSource().sendFailure(Component.literal("Only players can leave clans!")); return 0; } - UUID executorUuid = executor.getUuid(); + UUID executorUuid = executor.getUUID(); Clan playerClan = clanManager.getPlayerClan(executorUuid); if (playerClan == null) { - context.getSource().sendError(Text.literal("You are not in a clan!")); + context.getSource().sendFailure(Component.literal("You are not in a clan!")); return 0; } @@ -40,7 +40,7 @@ public LiteralArgumentBuilder build() { // if sole member, disband clan if (playerClan.members().size() == 1) { clanManager.deleteClan(playerClan.name()); - context.getSource().sendMessage(Text.literal( + context.getSource().sendSystemMessage(Component.literal( "You have left " + playerClan.name() + "! Since you were the only member remaining, the clan was disbanded." )); @@ -48,7 +48,7 @@ public LiteralArgumentBuilder build() { } // must transfer ownership first - context.getSource().sendError(Text.literal( + context.getSource().sendFailure(Component.literal( "You must transfer ownership before leaving or disbanding the clan!" )); return 0; @@ -56,15 +56,15 @@ public LiteralArgumentBuilder build() { // normal member leaving clanManager.removeMember(playerClan.name(), executorUuid); - PlayerManager pm = context.getSource().getServer().getPlayerManager(); + PlayerList pm = context.getSource().getServer().getPlayerList(); for (UUID member : playerClan.members()) { if (member.equals(executorUuid)) continue; - ServerPlayerEntity player = pm.getPlayer(member); + ServerPlayer player = pm.getPlayer(member); if (player != null) { - player.sendMessage(Text.literal(executor.getName().getString() + " left the clan!")); + player.sendSystemMessage(Component.literal(executor.getName().getString() + " left the clan!")); } } - context.getSource().sendMessage(Text.literal( + context.getSource().sendSystemMessage(Component.literal( "You have left " + playerClan.name() + "!" )); return 1; diff --git a/src/main/java/mnfu/clantag/commands/PromoteCommand.java b/src/main/java/mnfu/clantag/commands/PromoteCommand.java index 8cbe7b3..8a247b4 100644 --- a/src/main/java/mnfu/clantag/commands/PromoteCommand.java +++ b/src/main/java/mnfu/clantag/commands/PromoteCommand.java @@ -5,10 +5,10 @@ import com.mojang.brigadier.context.CommandContext; import mnfu.clantag.Clan; import mnfu.clantag.ClanManager; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; +import net.minecraft.commands.Commands; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.network.chat.Component; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -22,13 +22,13 @@ public PromoteCommand(ClanManager clanManager) { this.clanManager = clanManager; } - public LiteralArgumentBuilder build() { - return CommandManager.literal("promote") - .then(CommandManager.argument("playerName", StringArgumentType.greedyString()) + public LiteralArgumentBuilder build() { + return Commands.literal("promote") + .then(Commands.argument("playerName", StringArgumentType.greedyString()) .suggests((context, builder) -> { - ServerPlayerEntity player = context.getSource().getPlayer(); + ServerPlayer player = context.getSource().getPlayer(); if (player == null) return builder.buildFuture(); - Clan clan = clanManager.getPlayerClan(player.getUuid()); + Clan clan = clanManager.getPlayerClan(player.getUUID()); if (clan == null) return builder.buildFuture(); CompletableFuture[] nameFutures = clan.members().stream() .filter(uuid -> !uuid.equals(clan.leader())) @@ -41,45 +41,45 @@ public LiteralArgumentBuilder build() { }) .executes(this::executePromote)) .executes(context -> { - context.getSource().sendError(Text.literal("Usage: /clan promote ")); + context.getSource().sendFailure(Component.literal("Usage: /clan promote ")); return 1; }); } - private int executePromote(CommandContext context) { - ServerPlayerEntity executor = context.getSource().getPlayer(); + private int executePromote(CommandContext context) { + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) return 0; - Clan clan = clanManager.getPlayerClan(executor.getUuid()); + Clan clan = clanManager.getPlayerClan(executor.getUUID()); if (clan == null) { - context.getSource().sendError(Text.literal("You are not in a clan!")); + context.getSource().sendFailure(Component.literal("You are not in a clan!")); return 0; } - if (!clan.leader().equals(executor.getUuid())) { - context.getSource().sendError(Text.literal("You must be a clan leader to use this command!")); + if (!clan.leader().equals(executor.getUUID())) { + context.getSource().sendFailure(Component.literal("You must be a clan leader to use this command!")); return 0; } String targetName = StringArgumentType.getString(context, "playerName"); getUuid(context, targetName).thenAccept(optUuid -> context.getSource().getServer().execute(() -> { if (optUuid.isEmpty()) { - context.getSource().sendError(Text.literal("Player not found!")); + context.getSource().sendFailure(Component.literal("Player not found!")); return; } UUID targetUuid = optUuid.get(); if (targetUuid.equals(clan.leader())) { - context.getSource().sendError(Text.literal("You cannot promote yourself!")); + context.getSource().sendFailure(Component.literal("You cannot promote yourself!")); return; } if (!clan.members().contains(targetUuid)) { - context.getSource().sendError(Text.literal(targetName + " is not in your clan!")); + context.getSource().sendFailure(Component.literal(targetName + " is not in your clan!")); return; } if (clan.officers().contains(targetUuid)) { - context.getSource().sendError(Text.literal(targetName + " is already an Officer!")); + context.getSource().sendFailure(Component.literal(targetName + " is already an Officer!")); return; } clanManager.addOfficer(clan.name(), targetUuid); - context.getSource().sendMessage(Text.literal("Promoted " + targetName + " to an Officer!")); + context.getSource().sendSystemMessage(Component.literal("Promoted " + targetName + " to an Officer!")); })); return 1; } diff --git a/src/main/java/mnfu/clantag/commands/SetCommand.java b/src/main/java/mnfu/clantag/commands/SetCommand.java index 8cc217f..e50c040 100644 --- a/src/main/java/mnfu/clantag/commands/SetCommand.java +++ b/src/main/java/mnfu/clantag/commands/SetCommand.java @@ -6,31 +6,31 @@ import mnfu.clantag.Clan; import mnfu.clantag.ClanManager; import mnfu.clantag.ClanManager.JoinPolicy; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.MutableText; -import net.minecraft.text.Style; -import net.minecraft.text.Text; -import net.minecraft.text.TextColor; -import net.minecraft.util.Formatting; +import net.minecraft.commands.Commands; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Style; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextColor; +import net.minecraft.ChatFormatting; import java.util.Collection; import java.util.Locale; public class SetCommand { private final ClanManager clanManager; - private final Collection colorNames = Formatting.getNames(true, false); + private final Collection colorNames = ChatFormatting.getNames(true, false); public SetCommand(ClanManager clanManager) { this.clanManager = clanManager; } - public LiteralArgumentBuilder build() { - return CommandManager.literal("set") + public LiteralArgumentBuilder build() { + return Commands.literal("set") // color - .then(CommandManager.literal("color") - .then(CommandManager.argument("newColorNameOrHex", StringArgumentType.greedyString()) + .then(Commands.literal("color") + .then(Commands.argument("newColorNameOrHex", StringArgumentType.greedyString()) .suggests((context, builder) -> { for (String c : colorNames) { builder.suggest(c); @@ -40,73 +40,73 @@ public LiteralArgumentBuilder build() { .executes(this::executeColor) ) .executes(context -> { - context.getSource().sendError(Text.literal("Usage: /clan set color ")); + context.getSource().sendFailure(Component.literal("Usage: /clan set color ")); return 0; }) ) // access subcommands - .then(CommandManager.literal("access") - .then(CommandManager.literal("open").executes(ctx -> executeAccess(ctx, JoinPolicy.OPEN))) - .then(CommandManager.literal("invite_only").executes(ctx -> executeAccess(ctx, JoinPolicy.INVITE_ONLY))) - .then(CommandManager.literal("toggle").executes(this::executeAccessToggle)) + .then(Commands.literal("access") + .then(Commands.literal("open").executes(ctx -> executeAccess(ctx, JoinPolicy.OPEN))) + .then(Commands.literal("invite_only").executes(ctx -> executeAccess(ctx, JoinPolicy.INVITE_ONLY))) + .then(Commands.literal("toggle").executes(this::executeAccessToggle)) ) // name - .then(CommandManager.literal("name") - .then(CommandManager.argument("newClanName", StringArgumentType.greedyString()) + .then(Commands.literal("name") + .then(Commands.argument("newClanName", StringArgumentType.greedyString()) .executes(this::executeName) ) .executes(context -> { - context.getSource().sendError(Text.literal("Usage: /clan set name ")); + context.getSource().sendFailure(Component.literal("Usage: /clan set name ")); return 0; }) ) // default response .executes(context -> { - context.getSource().sendError(Text.literal("Valid subcommands: color, access, name")); + context.getSource().sendFailure(Component.literal("Valid subcommands: color, access, name")); return 0; }); } - private int executeColor(CommandContext context) { - ServerPlayerEntity executor = context.getSource().getPlayer(); + private int executeColor(CommandContext context) { + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) return 0; - Clan clan = clanManager.getPlayerClan(executor.getUuid()); + Clan clan = clanManager.getPlayerClan(executor.getUUID()); if (!checkClanLeader(executor, clan, context)) return 0; assert clan != null; // checkClanLeader handles this case String newColor = StringArgumentType.getString(context, "newColorNameOrHex"); if (newColor == null || newColor.isEmpty()) return 0; - Formatting formatting = Formatting.byName(newColor); + ChatFormatting formatting = ChatFormatting.getByName(newColor); if (formatting != null && formatting.isColor()) { - newColor = "#" + Integer.toHexString(formatting.getColorValue()).toUpperCase(Locale.ROOT); + newColor = "#" + Integer.toHexString(formatting.getColor()).toUpperCase(Locale.ROOT); } else if (newColor.matches("(?i)^#?[0-9a-f]{1,6}$")) { newColor = "#" + newColor.replaceFirst("^#", "").toUpperCase(Locale.ROOT); } else if ("reset".equalsIgnoreCase(newColor)) { - newColor = "#" + Integer.toHexString(Formatting.WHITE.getColorValue()).toUpperCase(Locale.ROOT); + newColor = "#" + Integer.toHexString(ChatFormatting.WHITE.getColor()).toUpperCase(Locale.ROOT); } else { - context.getSource().sendError(Text.literal(newColor + " is not a valid hex color or minecraft color.")); + context.getSource().sendFailure(Component.literal(newColor + " is not a valid hex color or minecraft color.")); return 0; } String oldColor = clan.hexColor(); boolean success = clanManager.changeColor(clan.name(), newColor); if (!success) { - context.getSource().sendError(Text.literal("Failed to update the color for clan " + clan.name())); + context.getSource().sendFailure(Component.literal("Failed to update the color for clan " + clan.name())); return 0; } - MutableText message = Text.empty(); - TextColor oldClanTextColor = TextColor.parse(oldColor).getOrThrow(); - TextColor newClanTextColor = TextColor.parse(newColor).getOrThrow(); + MutableComponent message = Component.empty(); + TextColor oldClanTextColor = TextColor.parseColor(oldColor).getOrThrow(); + TextColor newClanTextColor = TextColor.parseColor(newColor).getOrThrow(); - message.append(Text.literal("Updated clan color from ").formatted(Formatting.GRAY)) - .append(Text.literal(colorDisplayName(oldColor)).setStyle(Style.EMPTY.withColor(oldClanTextColor))) - .append(Text.literal(" to ").formatted(Formatting.GRAY)) - .append(Text.literal(colorDisplayName(newColor)).setStyle(Style.EMPTY.withColor(newClanTextColor))) - .append(Text.literal("!").formatted(Formatting.GRAY)); + message.append(Component.literal("Updated clan color from ").withStyle(ChatFormatting.GRAY)) + .append(Component.literal(colorDisplayName(oldColor)).setStyle(Style.EMPTY.withColor(oldClanTextColor))) + .append(Component.literal(" to ").withStyle(ChatFormatting.GRAY)) + .append(Component.literal(colorDisplayName(newColor)).setStyle(Style.EMPTY.withColor(newClanTextColor))) + .append(Component.literal("!").withStyle(ChatFormatting.GRAY)); - context.getSource().sendMessage(message); + context.getSource().sendSystemMessage(message); return 1; } @@ -115,31 +115,31 @@ private String colorDisplayName(String colorString) { return color != null ? color.getDisplayName() : colorString; } - private int executeAccess(CommandContext context, JoinPolicy newPolicy) { - ServerPlayerEntity executor = context.getSource().getPlayer(); + private int executeAccess(CommandContext context, JoinPolicy newPolicy) { + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) return 0; - Clan clan = clanManager.getPlayerClan(executor.getUuid()); + Clan clan = clanManager.getPlayerClan(executor.getUUID()); if (!checkClanLeader(executor, clan, context)) return 0; assert clan != null; // checkClanLeader handles this case JoinPolicy oldPolicy = clan.isClosed() ? JoinPolicy.INVITE_ONLY : JoinPolicy.OPEN; clanManager.changePolicy(clan.name(), newPolicy); - MutableText message = Text.empty() - .append(Text.literal("Updated clan access from ").formatted(Formatting.GRAY)) + MutableComponent message = Component.empty() + .append(Component.literal("Updated clan access from ").withStyle(ChatFormatting.GRAY)) .append(accessText(oldPolicy != JoinPolicy.OPEN)) - .append(Text.literal(" to ").formatted(Formatting.GRAY)) + .append(Component.literal(" to ").withStyle(ChatFormatting.GRAY)) .append(accessText(newPolicy != JoinPolicy.OPEN)) - .append(Text.literal("!").formatted(Formatting.GRAY)); + .append(Component.literal("!").withStyle(ChatFormatting.GRAY)); - context.getSource().sendMessage(message); + context.getSource().sendSystemMessage(message); return 1; } - private int executeAccessToggle(CommandContext context) { - ServerPlayerEntity executor = context.getSource().getPlayer(); + private int executeAccessToggle(CommandContext context) { + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) return 0; - Clan clan = clanManager.getPlayerClan(executor.getUuid()); + Clan clan = clanManager.getPlayerClan(executor.getUUID()); if (!checkClanLeader(executor, clan, context)) return 0; assert clan != null; // checkClanLeader handles this case @@ -147,52 +147,52 @@ private int executeAccessToggle(CommandContext context) { return executeAccess(context, newPolicy); } - private MutableText accessText(boolean closed) { - return Text.literal(closed ? "Invite Only" : "Open") - .formatted(closed ? Formatting.RED : Formatting.GREEN); + private MutableComponent accessText(boolean closed) { + return Component.literal(closed ? "Invite Only" : "Open") + .withStyle(closed ? ChatFormatting.RED : ChatFormatting.GREEN); } - private int executeName(CommandContext context) { - ServerPlayerEntity executor = context.getSource().getPlayer(); + private int executeName(CommandContext context) { + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) return 0; - Clan clan = clanManager.getPlayerClan(executor.getUuid()); + Clan clan = clanManager.getPlayerClan(executor.getUUID()); if (!checkClanLeader(executor, clan, context)) return 0; assert clan != null; // checkClanLeader handles this case String newClanName = StringArgumentType.getString(context, "newClanName"); if (newClanName.contains(" ")) { - context.getSource().sendError(Text.literal("Clan names must not contain spaces!")); + context.getSource().sendFailure(Component.literal("Clan names must not contain spaces!")); return 0; } if (newClanName.length() < 3 || newClanName.length() > 16) { - context.getSource().sendError(Text.literal("Clan names must be 3-16 characters in length!")); + context.getSource().sendFailure(Component.literal("Clan names must be 3-16 characters in length!")); return 0; } boolean clanRenamed = clanManager.changeName(clan.name(), newClanName); if (!clanRenamed) { - context.getSource().sendError(Text.literal("Clan " + newClanName + " already exists, or " + newClanName + " isn't an allowed name!")); + context.getSource().sendFailure(Component.literal("Clan " + newClanName + " already exists, or " + newClanName + " isn't an allowed name!")); return 0; } - TextColor clanTextColor = TextColor.parse(clan.hexColor()).getOrThrow(); - MutableText message = Text.literal("Updated clan name from ").formatted(Formatting.GRAY) - .append(Text.literal(clan.name()).setStyle(Style.EMPTY.withColor(clanTextColor))) - .append(Text.literal(" to ").formatted(Formatting.GRAY)) - .append(Text.literal(newClanName).setStyle(Style.EMPTY.withColor(clanTextColor))) - .append(Text.literal("!").formatted(Formatting.GRAY)); + TextColor clanTextColor = TextColor.parseColor(clan.hexColor()).getOrThrow(); + MutableComponent message = Component.literal("Updated clan name from ").withStyle(ChatFormatting.GRAY) + .append(Component.literal(clan.name()).setStyle(Style.EMPTY.withColor(clanTextColor))) + .append(Component.literal(" to ").withStyle(ChatFormatting.GRAY)) + .append(Component.literal(newClanName).setStyle(Style.EMPTY.withColor(clanTextColor))) + .append(Component.literal("!").withStyle(ChatFormatting.GRAY)); - context.getSource().sendMessage(message); + context.getSource().sendSystemMessage(message); return 1; } - private boolean checkClanLeader(ServerPlayerEntity executor, Clan clan, CommandContext context) { + private boolean checkClanLeader(ServerPlayer executor, Clan clan, CommandContext context) { if (clan == null) { - context.getSource().sendError(Text.literal("You are not in a clan!")); + context.getSource().sendFailure(Component.literal("You are not in a clan!")); return false; } - if (!clan.leader().equals(executor.getUuid())) { - context.getSource().sendError(Text.literal("You must be a clan leader to use this command!")); + if (!clan.leader().equals(executor.getUUID())) { + context.getSource().sendFailure(Component.literal("You must be a clan leader to use this command!")); return false; } return true; diff --git a/src/main/java/mnfu/clantag/commands/TransferLeadershipCommand.java b/src/main/java/mnfu/clantag/commands/TransferLeadershipCommand.java index 17b5c2b..3f3150b 100644 --- a/src/main/java/mnfu/clantag/commands/TransferLeadershipCommand.java +++ b/src/main/java/mnfu/clantag/commands/TransferLeadershipCommand.java @@ -5,10 +5,10 @@ import com.mojang.brigadier.context.CommandContext; import mnfu.clantag.Clan; import mnfu.clantag.ClanManager; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; +import net.minecraft.commands.Commands; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.network.chat.Component; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -22,13 +22,13 @@ public TransferLeadershipCommand(ClanManager clanManager) { this.clanManager = clanManager; } - public LiteralArgumentBuilder build() { - return CommandManager.literal("transfer") - .then(CommandManager.argument("playerName", StringArgumentType.word()) + public LiteralArgumentBuilder build() { + return Commands.literal("transfer") + .then(Commands.argument("playerName", StringArgumentType.word()) .suggests((context, builder) -> { - ServerPlayerEntity player = context.getSource().getPlayer(); + ServerPlayer player = context.getSource().getPlayer(); if (player == null) return builder.buildFuture(); - Clan clan = clanManager.getPlayerClan(player.getUuid()); + Clan clan = clanManager.getPlayerClan(player.getUUID()); if (clan == null) return builder.buildFuture(); CompletableFuture[] nameFutures = clan.members().stream() .map(uuid -> CommandUtils.getPlayerName(context, uuid) @@ -41,48 +41,48 @@ public LiteralArgumentBuilder build() { ); } - private int executeTransfer(CommandContext context) { - ServerPlayerEntity executor = context.getSource().getPlayer(); + private int executeTransfer(CommandContext context) { + ServerPlayer executor = context.getSource().getPlayer(); if (executor == null) { - context.getSource().sendError(Text.literal("Only players can transfer leadership!")); + context.getSource().sendFailure(Component.literal("Only players can transfer leadership!")); return 0; } String targetName = StringArgumentType.getString(context, "playerName"); - UUID executorUuid = executor.getUuid(); + UUID executorUuid = executor.getUUID(); Clan playerClan = clanManager.getPlayerClan(executorUuid); if (playerClan == null) { - context.getSource().sendError(Text.literal("You are not in a clan!")); + context.getSource().sendFailure(Component.literal("You are not in a clan!")); return 0; } if (!playerClan.leader().equals(executorUuid)) { - context.getSource().sendError(Text.literal("You are not the leader of a clan!")); + context.getSource().sendFailure(Component.literal("You are not the leader of a clan!")); return 0; } getUuid(context, targetName).thenAccept(optUuid -> context.getSource().getServer().execute(() -> { if (optUuid.isEmpty()) { - context.getSource().sendError(Text.literal("Player not found!")); + context.getSource().sendFailure(Component.literal("Player not found!")); return; } UUID targetUuid = optUuid.get(); if (targetUuid.equals(executorUuid)) { - context.getSource().sendError(Text.literal("You are already the leader of this clan!")); + context.getSource().sendFailure(Component.literal("You are already the leader of this clan!")); return; } boolean success = clanManager.transferLeader(playerClan.name(), targetUuid); if (!success) { - context.getSource().sendError(Text.literal(targetName + " is not in " + playerClan.name())); + context.getSource().sendFailure(Component.literal(targetName + " is not in " + playerClan.name())); return; } - context.getSource().sendMessage(Text.literal( + context.getSource().sendSystemMessage(Component.literal( "Successfully transferred leadership of " + playerClan.name() + " to " + targetName + "!")); }) ); diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 5fa72ab..f6f5d84 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -27,7 +27,6 @@ "depends": { "fabricloader": ">=${loader_version}", "fabric-api": "*", - "minecraft": ">=${minecraft_version}", - "luckperms": ">=${luckperms_version}" + "minecraft": ">=${minecraft_version}" } }