From a4cbeb2db36e15e74f26d47682063922ec1f481b Mon Sep 17 00:00:00 2001 From: Darto KLoning Date: Sun, 6 Sep 2026 16:41:38 +0700 Subject: [PATCH] Remove Custom Brigadier argument --- README.md | 18 +++++----- gradle.properties | 2 +- .../lobbysystems/DimensionIdArgumentType.java | 35 ------------------- .../lobbysystems/LobbySystemsMod.java | 19 +++++----- 4 files changed, 20 insertions(+), 54 deletions(-) delete mode 100644 src/main/java/id/dartokloning/lobbysystems/DimensionIdArgumentType.java diff --git a/README.md b/README.md index 41eda0a..1bdcea1 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# Lobby Systems v1.3.1 — Fabric 26.2 +# Lobby Systems v1.3.2 — Fabric 26.2 Server-side lobby routing untuk Minecraft 26.2/Fabric. Versi 1.3.0 menambahkan viewer gamerule per-dimension dengan pagination dan pengelolaan gamemode player berdasarkan dimension, sambil mempertahankan portal antar-dimensi, last-position, minimum playtime, dan konfigurasi terpusat di `config/lobby/`. -**v1.3.1 bugfix:** parser dimension command sekarang menerima resource identifier seperti `minecraft:lobby` tanpa memakan argumen sesudahnya. Ini memperbaiki `/ls gamerule `, `/ls gamemode `, dan `/ls gamemode set/remove ...`. +**v1.3.2 bugfix:** parser dimension command sekarang menerima resource identifier seperti `minecraft:lobby` tanpa memakan argumen sesudahnya. Ini memperbaiki `/ls gamerule `, `/ls gamemode `, dan `/ls gamemode set/remove ...`. ### Reload feedback @@ -40,7 +40,7 @@ chmod +x compile.sh release.sh ```text ============================================ Lobby Systems - Fabric 26.2 Build - Version: 1.3.1 + Version: 1.3.2 Namespace: id.dartokloning.lobbysystems Mod ID: dartokloning ============================================ @@ -49,7 +49,7 @@ chmod +x compile.sh release.sh Output utama: ```text -build/libs/lobby-systems-1.3.1.jar +build/libs/lobby-systems-1.3.2.jar ``` `*-sources.jar` hanya source archive dan tidak perlu dipasang ke server. @@ -80,14 +80,14 @@ State penting Lobby Systems memakai separator agar mudah terlihat di server cons ```text ============================================ Lobby Systems - READY - Version: 1.3.1 + Version: 1.3.2 Minecraft: 26.2 Config directory: config/lobby WorldEdit: available ============================================ ``` -## Struktur konfigurasi v1.3.1 +## Struktur konfigurasi v1.3.2 ```text config/ @@ -157,7 +157,7 @@ Portal adalah region/cuboid, bukan harus Nether Portal asli. Anda bebas membuat ### `config/lobby/dimension-gamemodes.json` -Minecraft menyimpan gamemode pada player, bukan pada dimension. Lobby Systems v1.3.1 menambahkan mapping dimension → gamemode dan menerapkannya ketika player masuk ke dimension tersebut. File ini dibuat otomatis dan dapat dikelola lewat command admin. +Minecraft menyimpan gamemode pada player, bukan pada dimension. Lobby Systems v1.3.2 menambahkan mapping dimension → gamemode dan menerapkannya ketika player masuk ke dimension tersebut. File ini dibuat otomatis dan dapat dikelola lewat command admin. Contoh: @@ -173,7 +173,7 @@ Gamemode yang didukung: `survival`, `creative`, `adventure`, dan `spectator`. ## Migrasi dari v1.1.x -Pada startup pertama v1.3.1: +Pada startup pertama v1.3.2: ```text config/lobby-systems.json @@ -197,7 +197,7 @@ akan dimigrasikan ke: config/lobby/player-positions.json ``` -Nama file lama hanya digunakan oleh `LegacyConfigMigrator` untuk proses migrasi. Runtime v1.3.1 membaca dan menulis file baru di `config/lobby/`. +Nama file lama hanya digunakan oleh `LegacyConfigMigrator` untuk proses migrasi. Runtime v1.3.2 membaca dan menulis file baru di `config/lobby/`. Jika file tujuan baru sudah ada, migrator tidak menimpanya. diff --git a/gradle.properties b/gradle.properties index 4132cbb..e0f39f5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,6 +5,6 @@ minecraft_version=26.2 loader_version=0.19.3 loom_version=1.17-SNAPSHOT fabric_api_version=0.156.0+26.2 -mod_version=1.3.1 +mod_version=1.3.2 maven_group=id.dartokloning archives_base_name=lobby-systems diff --git a/src/main/java/id/dartokloning/lobbysystems/DimensionIdArgumentType.java b/src/main/java/id/dartokloning/lobbysystems/DimensionIdArgumentType.java deleted file mode 100644 index 7d627cb..0000000 --- a/src/main/java/id/dartokloning/lobbysystems/DimensionIdArgumentType.java +++ /dev/null @@ -1,35 +0,0 @@ -package id.dartokloning.lobbysystems; - -import com.mojang.brigadier.StringReader; -import com.mojang.brigadier.arguments.ArgumentType; -import com.mojang.brigadier.context.CommandContext; -import com.mojang.brigadier.exceptions.CommandSyntaxException; - -/** - * Brigadier argument type for Minecraft resource/dimension identifiers such as - * {@code minecraft:lobby}. Vanilla Brigadier's word() does not accept ':', - * while greedyString() consumes following arguments. This parser reads exactly - * one whitespace-delimited token and therefore works correctly in the middle - * of commands such as /ls gamemode set . - */ -public final class DimensionIdArgumentType implements ArgumentType { - private DimensionIdArgumentType() { - } - - public static DimensionIdArgumentType dimensionId() { - return new DimensionIdArgumentType(); - } - - public static String getDimensionId(CommandContext context, String name) { - return context.getArgument(name, String.class); - } - - @Override - public String parse(StringReader reader) throws CommandSyntaxException { - int start = reader.getCursor(); - while (reader.canRead() && !Character.isWhitespace(reader.peek())) { - reader.skip(); - } - return reader.getString().substring(start, reader.getCursor()); - } -} diff --git a/src/main/java/id/dartokloning/lobbysystems/LobbySystemsMod.java b/src/main/java/id/dartokloning/lobbysystems/LobbySystemsMod.java index eaacba0..4ee1f78 100644 --- a/src/main/java/id/dartokloning/lobbysystems/LobbySystemsMod.java +++ b/src/main/java/id/dartokloning/lobbysystems/LobbySystemsMod.java @@ -9,6 +9,7 @@ import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; import net.minecraft.commands.SharedSuggestionProvider; +import net.minecraft.commands.arguments.IdentifierArgument; import net.minecraft.core.BlockPos; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; @@ -148,26 +149,26 @@ public final class LobbySystemsMod implements ModInitializer { true, true)))) .then(Commands.literal("gamerule") - .then(Commands.argument("dimension", DimensionIdArgumentType.dimensionId()) + .then(Commands.argument("dimension", IdentifierArgument.id()) .suggests((ctx, builder) -> SharedSuggestionProvider.suggestResource( ctx.getSource().getServer().levelKeys().stream().map(ResourceKey::identifier), builder)) .executes(ctx -> listGameRules( ctx.getSource(), ctx.getSource().getServer(), - DimensionIdArgumentType.getDimensionId(ctx, "dimension"), + IdentifierArgument.getId(ctx, "dimension").toString(), 1)) .then(Commands.literal("--page") .then(Commands.argument("page", IntegerArgumentType.integer(1)) .executes(ctx -> listGameRules( ctx.getSource(), ctx.getSource().getServer(), - DimensionIdArgumentType.getDimensionId(ctx, "dimension"), + IdentifierArgument.getId(ctx, "dimension").toString(), IntegerArgumentType.getInteger(ctx, "page"))))))) .then(Commands.literal("gamemode") .then(Commands.literal("list") .executes(ctx -> listDimensionGameModes(ctx.getSource()))) .then(Commands.literal("set") - .then(Commands.argument("dimension", DimensionIdArgumentType.dimensionId()) + .then(Commands.argument("dimension", IdentifierArgument.id()) .suggests((ctx, builder) -> SharedSuggestionProvider.suggestResource( ctx.getSource().getServer().levelKeys().stream().map(ResourceKey::identifier), builder)) .then(Commands.argument("mode", StringArgumentType.word()) @@ -176,21 +177,21 @@ public final class LobbySystemsMod implements ModInitializer { .executes(ctx -> setDimensionGameMode( ctx.getSource(), ctx.getSource().getServer(), - DimensionIdArgumentType.getDimensionId(ctx, "dimension"), + IdentifierArgument.getId(ctx, "dimension").toString(), StringArgumentType.getString(ctx, "mode")))))) .then(Commands.literal("remove") - .then(Commands.argument("dimension", DimensionIdArgumentType.dimensionId()) + .then(Commands.argument("dimension", IdentifierArgument.id()) .suggests((ctx, builder) -> SharedSuggestionProvider.suggestResource( ctx.getSource().getServer().levelKeys().stream().map(ResourceKey::identifier), builder)) .executes(ctx -> removeDimensionGameMode( ctx.getSource(), - DimensionIdArgumentType.getDimensionId(ctx, "dimension"))))) - .then(Commands.argument("dimension", DimensionIdArgumentType.dimensionId()) + IdentifierArgument.getId(ctx, "dimension").toString())))) + .then(Commands.argument("dimension", IdentifierArgument.id()) .suggests((ctx, builder) -> SharedSuggestionProvider.suggestResource( ctx.getSource().getServer().levelKeys().stream().map(ResourceKey::identifier), builder)) .executes(ctx -> showDimensionGameMode( ctx.getSource(), - DimensionIdArgumentType.getDimensionId(ctx, "dimension"))))) + IdentifierArgument.getId(ctx, "dimension").toString())))) .then(Commands.literal("portal") .then(Commands.literal("create") .then(Commands.argument("name", StringArgumentType.word())