Lobby Systems v1.9.0 — Fabric 26.2
Server-side lobby framework untuk Minecraft Fabric 26.2. Lobby Systems menangani pre-login lobby placement, portal antar-dimensi, gamemode/gamerule per dimension, Starter Kit, persistent player data, serta hybrid authentication untuk premium dan local/cracked player.
Target
- Minecraft 26.2
- Java 25
- Fabric Loader 0.19.3
- Fabric API 0.156.0+26.2
- Fabric Loom 1.17
- Mod ID
dartokloning - Java namespace
id.dartokloning.lobbysystems - License All Rights Reserved
Lobby Systems adalah mod server-side. WorldEdit Fabric digunakan untuk workflow pembuatan portal dari selection.
Build dan release
Windows:
.\compile.bat
Linux:
./compile.sh
Script membaca versi dari gradle.properties dan menggunakan Java 25. release.bat / release.sh menangani build release, Git push/tag, Gitea release, dan upload JAR.
Struktur data dan konfigurasi
config/lobby/
├── config.json
├── player.json
├── portals.json
├── auth/
│ ├── config.json
│ └── rules.json
├── dimension/
│ ├── gamemodes.json
│ └── gamerules.json
└── starterkit/
├── list.json
└── recipients.json
config.json adalah konfigurasi utama Lobby. player.json adalah database persistent player bersama yang dipakai Auth dan last-position. File konfigurasi subsystem dikelompokkan ke folder auth, dimension, dan starterkit.
v1.9.0 ditujukan untuk development layout baru dan tidak melakukan automatic migration. Pada development server, hapus data config/lobby lama sebelum first run v1.9.0 jika ingin generated defaults yang bersih.
/ls reload
/ls reload adalah satu pintu untuk me-reload seluruh runtime configuration/data Lobby Systems. Reload mencakup:
config/lobby/config.jsonconfig/lobby/player.jsonmelalui Auth/player-data subsystemconfig/lobby/auth/config.jsonconfig/lobby/auth/rules.jsonconfig/lobby/portals.jsondan portal visual repairconfig/lobby/dimension/gamemodes.jsonlalu apply ke dimension/playerconfig/lobby/dimension/gamerules.jsonlalu apply ke loaded dimensionsconfig/lobby/starterkit/list.jsonconfig/lobby/starterkit/recipients.json- refresh runtime state yang terkait
Perubahan Auth diterapkan ke session player yang sedang online. Console menampilkan status reload dan admin yang menjalankan command menerima ringkasan hasilnya.
Lobby dan player position
Player ditempatkan ke Lobby pada fase awal login agar gameplay dimension sebelumnya tidak sempat menjadi initial world yang dikirim ke client. Lobby sebaiknya merupakan dimension yang safe dan secure karena Rules/Register/Login berjalan setelah player masuk server.
/lobby hanya tersedia dari luar Lobby dan mengikuti minimum gameplay time pada config.json.
Last-position per gameplay dimension disimpan pada section positions di player.json. Lobby dikecualikan sehingga posisi Lobby tidak menggantikan posisi gameplay yang harus dipulihkan.
Authentication System
Server tetap menggunakan:
online-mode=true
Hybrid authentication Lobby Systems:
- Premium player tetap melewati official Mojang/vanilla authentication.
- Local/cracked player memakai deterministic offline UUID dan password Lobby Systems.
- Premium username dilindungi agar tidak dapat diregistrasikan sebagai local identity.
- Password disimpan menggunakan PBKDF2-HMAC-SHA256 + random salt; plaintext password tidak disimpan.
- Metadata account, password hash/salt, Rules acceptance, dan last-position sama-sama disimpan di
config/lobby/player.jsonpada section masing-masing.
Dialog flow
Rules/Register/Login menggunakan vanilla Minecraft Dialog UI sehingga normal player tidak perlu mengetik command.
Connect
-> Server Rules (jika enabled dan belum accepted)
-> Premium auto-login ATAU Create Account / Sign In
-> Authenticated
/register dan /login tetap tersedia sebagai fallback compatibility.
Premium policy
auth/config.json menyediakan premiumAutoLogin dan requireLoginEveryJoin.
premiumAutoLogin=true+requireLoginEveryJoin=false: premium cukup dengan Mojang authentication dan auto-login.premiumAutoLogin=false: premium tetap diverifikasi Mojang tetapi juga harus mempunyai password Lobby Systems dan melewati Register/Login Dialog.requireLoginEveryJoin=true: premium wajib melewati password Lobby Systems setiap connection.- Local/cracked selalu memakai password Lobby Systems setiap connection.
Password Lobby Systems pada premium account adalah authentication layer tambahan dan tidak menggantikan Mojang authentication.
Authentication timeout
Register/Login menggunakan authenticationTimeoutSeconds dari config/lobby/auth/config.json. Timeout tidak ditampilkan sebagai visual countdown karena Minecraft Dialog berada pada modal UI layer. Jika batas waktu habis, player di-disconnect dengan message yang dapat dikustomisasi dari Auth config.
Server Rules
Rules berasal dari config/lobby/auth/rules.json. Contoh default:
{
"enabled": true,
"version": 1,
"timeoutSeconds": 60,
"timeoutMessage": "You did not accept the server rules within {seconds} seconds. Please reconnect and try again.",
"title": "Server Rules",
"introduction": "Please read and accept our rules:",
"rules": [
"No cheating, hacking, or exploits.",
"Be respectful to all players.",
"No advertising or spam.",
"Follow staff instructions.",
"Have fun and play fair!"
],
"footer": "You must accept these rules to continue.",
"agreementLabel": "I have read and agree to the server rules",
"acceptButton": "I Accept"
}
enabled=false melewati Rules Dialog. version adalah metadata internal: naikkan hanya jika semua player harus menerima ulang rules yang baru. Nomor version tidak ditampilkan pada Dialog.
timeoutSeconds membatasi berapa lama Rules Dialog boleh dibiarkan tanpa acceptance. Tidak ada visual countdown; ketika timeout habis player menerima disconnect reason dari timeoutMessage. Placeholder {seconds} diisi dari nilai timeoutSeconds.
player.json
player.json adalah satu persistent database untuk data player. Saat ini mempunyai dua logical section:
{
"auth": {
"player-name": {
"salt": "...",
"hash": "...",
"iterations": 210000,
"accountType": "PREMIUM",
"officialUuid": "...",
"rulesVersionAccepted": 1,
"rulesAcceptedAt": "..."
}
},
"positions": {
"player-uuid": {
"minecraft:overworld": {
"x": 0.5,
"y": 64.0,
"z": 0.5,
"yaw": 0.0,
"pitch": 0.0
}
}
}
}
Kedua subsystem menggunakan file yang sama dan writer mempertahankan section milik subsystem lain agar update Auth tidak menghapus positions dan sebaliknya.
Portal System
Portal dibuat dari WorldEdit selection dan disimpan di config/lobby/portals.json. Visual menggunakan vanilla minecraft:nether_portal, tetapi registered Lobby Systems portal mencegah vanilla Nether routing mengambil alih.
Teleport menggunakan TeleportTransition, chunk preload, dan teleport lock. Portal visual diperbaiki saat startup/reload bila diperlukan.
Dimension Gamemode
Gamemode per dimension bersifat authoritative dan selalu aktif.
/ls gamemode list
/ls gamemode set <dimension> <gamemode>
/ls gamemode remove <dimension>
Mapping disimpan di config/lobby/dimension/gamemodes.json dan diterapkan pada join serta dimension change.
Dimension Gamerules
Gamerule per dimension disimpan di config/lobby/dimension/gamerules.json dan diterapkan ke native gamerules masing-masing ServerLevel.
Gunakan /ls gamerule ... beserta command completion untuk melihat dan mengubah mapping.
Starter Kit
Starter Kit adalah snapshot inventory/equipment per dimension. Definitions berada di config/lobby/starterkit/list.json, sedangkan automatic-delivery history berada di config/lobby/starterkit/recipients.json.
/ls starterkit set <name> <dimension>
/ls starterkit load <name>
/ls starterkit activate <name>
/ls starterkit deactivate <name>
/ls starterkit give <name> <player>
/ls starterkit list
/ls starterkit info <name>
/ls starterkit status <dimension> <player>
/ls starterkit reset <dimension> <player>
/ls starterkit delete <name>
Satu dimension hanya mempunyai satu active kit. Eligibility automatic delivery dicatat per player + dimension. Forced admin give tidak mengubah recipient history.
Command utama
/lobby
/ls reload
/ls tp <dimension>
/ls gamemode ...
/ls gamerule ...
/ls portal ...
/ls starterkit ...
Command /ls administratif memerlukan operator permission sesuai implementasi command.
v1.9.0 — Config restructure
- Config/data dikelompokkan menjadi folder
auth,dimension, danstarterkit. - Persistent Auth data dan last-position memakai satu
config/lobby/player.json. - Starter Kit definitions memakai
starterkit/list.json; recipient history memakaistarterkit/recipients.json. - Dimension gamemode/gamerule memakai
dimension/gamemodes.jsondandimension/gamerules.json. /ls reload, startup loader, save path, error message, dan logging menggunakan layout v1.9.0.- Tidak ada automatic migration karena v1.9.0 masih berada dalam development workflow.
Known compatibility note
Local/cracked identity tidak mempunyai Mojang profile public key. Dengan enforce-secure-profile=true, vanilla secure-chat dapat menolak normal chat local player karena missing profile public key. Ini terpisah dari Auth login dan memerlukan compatibility handling khusus.
License
All Rights Reserved. Source dan asset Lobby Systems tidak boleh didistribusikan atau digunakan ulang di luar izin pemilik project.