Remove Custom Brigadier argument
This commit is contained in:
@@ -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 <dimension>`, `/ls gamemode <dimension>`, 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 <dimension>`, `/ls gamemode <dimension>`, 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.
|
||||
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
@@ -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 <dimension> <mode>.
|
||||
*/
|
||||
public final class DimensionIdArgumentType implements ArgumentType<String> {
|
||||
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());
|
||||
}
|
||||
}
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user