Add gamerule per dimension

This commit is contained in:
Darto KLoning
2026-09-06 19:31:59 +07:00
parent e037fadfc9
commit ba4fc88538
11 changed files with 598 additions and 40 deletions
+35 -13
View File
@@ -1,8 +1,8 @@
# Lobby Systems v1.3.3 — Fabric 26.2
# Lobby Systems v1.4.0 — 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/`.
Server-side lobby routing untuk Minecraft 26.2/Fabric. v1.4.0 menambahkan **native persistent per-dimension gamerules** milik Lobby Systems, tetap mempertahankan portal antar-dimensi, last-position, minimum playtime, gamerule viewer ber-pagination, serta per-dimension player gamemode.
**v1.3.3 bugfix:** viewer gamerule sekarang membaca nilai gamerule Minecraft 26.x secara aman per-rule, melewati rule yang tidak aktif/tidak tersedia untuk feature set dimension, dan tidak lagi menggagalkan seluruh command ketika satu rule bermasalah. Versi ini juga mengganti lisensi project menjadi proprietary **All Rights Reserved** dengan penggunaan hanya berdasarkan izin tertulis dari DartoKloning.
**v1.4.0 feature release:** gamerule tidak lagi bergantung pada WorldGameRules. Lobby Systems membuat instance `GameRules` terpisah untuk setiap `ServerLevel`, menyimpan override ke `config/lobby/dimension-gamerules.json`, lalu menerapkannya kembali saat world load, server start, dan `/ls reload`. WorldGameRules harus dihapus karena kedua mod mengubah mekanisme gamerule per-world.
### Reload feedback
@@ -40,7 +40,7 @@ chmod +x compile.sh release.sh
```text
============================================
Lobby Systems - Fabric 26.2 Build
Version: 1.3.3
Version: 1.4.0
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.3.jar
build/libs/lobby-systems-1.4.0.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.3
Version: 1.4.0
Minecraft: 26.2
Config directory: config/lobby
WorldEdit: available
============================================
```
## Struktur konfigurasi v1.3.3
## Struktur konfigurasi v1.4.0
```text
config/
@@ -95,7 +95,8 @@ config/
├── config.json
├── player-positions.json
├── portals.json
└── dimension-gamemodes.json
├── dimension-gamemodes.json
└── dimension-gamerules.json
```
### `config/lobby/config.json`
@@ -157,7 +158,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.3 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.4.0 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 +174,7 @@ Gamemode yang didukung: `survival`, `creative`, `adventure`, dan `spectator`.
## Migrasi dari v1.1.x
Pada startup pertama v1.3.3:
Pada startup pertama v1.4.0:
```text
config/lobby-systems.json
@@ -197,7 +198,7 @@ akan dimigrasikan ke:
config/lobby/player-positions.json
```
Nama file lama hanya digunakan oleh `LegacyConfigMigrator` untuk proses migrasi. Runtime v1.3.3 membaca dan menulis file baru di `config/lobby/`.
Nama file lama hanya digunakan oleh `LegacyConfigMigrator` untuk proses migrasi. Runtime v1.4.0 membaca dan menulis file baru di `config/lobby/`.
Jika file tujuan baru sudah ada, migrator tidak menimpanya.
@@ -220,6 +221,8 @@ Jika file tujuan baru sudah ada, migrator tidak menimpanya.
/ls gamerule <dimension>
/ls gamerule <dimension> --page <page>
/ls gamerule set <dimension> <rule> <value>
/ls gamerule reset <dimension> <rule>
/ls gamemode <dimension>
/ls gamemode list
@@ -236,9 +239,27 @@ Jika file tujuan baru sudah ada, migrator tidak menimpanya.
`/ls tp` tetap command maintenance/admin. Player biasa tidak memerlukannya karena flow normal menggunakan portal.
### Gamerule viewer per dimension
### Gamerule per dimension
`/ls gamerule <dimension>` menampilkan gamerule aktual dari dimension yang sedang ter-load. Viewer ini bersifat read-only dan cocok dipakai bersama WorldGameRules. Hasil ditampilkan 10 rule per halaman.
`/ls gamerule <dimension>` menampilkan gamerule aktual dari dimension yang sedang ter-load. Hasil ditampilkan 10 rule per halaman dan dipisahkan separator agar lebih mudah dibaca di chat.
Untuk perubahan yang harus **persist setelah restart**, gunakan `/ls gamerule set ...`. Perintah vanilla `/gamerule` dapat mengubah nilai runtime yang terlihat pada dimension aktif, tetapi perubahan tersebut tidak ditulis ke `dimension-gamerules.json`, sehingga bukan source of truth Lobby Systems.
> **Catatan Minecraft 26.2:** mayoritas gamerule gameplay server-side dapat diisolasi melalui `ServerLevel#getGameRules()`. Rule yang berhubungan dengan clock/weather seperti `minecraft:advance_time` dan `minecraft:advance_weather` memiliki mekanisme sinkronisasi tambahan di 26.x; uji keduanya secara khusus sebelum mengandalkannya untuk world yang membutuhkan waktu/cuaca benar-benar independen.
Gunakan command berikut untuk membuat override persistent:
```text
/ls gamerule set minecraft:lobby minecraft:spawn_mobs false
/ls gamerule set minecraft:lobby minecraft:mob_griefing false
/ls gamerule set minecraft:lobby minecraft:keep_inventory true
```
Untuk menghapus override dan mengembalikan rule ke default Minecraft:
```text
/ls gamerule reset minecraft:lobby minecraft:spawn_mobs
```
Contoh:
@@ -268,6 +289,7 @@ Reload live:
- `config/lobby/config.json`
- `config/lobby/portals.json`
- `config/lobby/dimension-gamemodes.json`
- `config/lobby/dimension-gamerules.json`
- lobby exclusion pada player-position store
Tidak perlu restart untuk perubahan JSON tersebut.