Repository-Quelle
Die Artefakte und der projektbezogene Zugriff laufen ueber
nexus.zimplex.net. Ohne diese Quelle ist kein
vollstaendiger Projektstart moeglich.
Development
Das Projekt wird intern ueber den Zimplex Nexus verteilt. Fuer einen
echten Entwicklungsstart braucht dein Setup deshalb zuerst Zugriff auf
nexus.zimplex.net und danach erst den normalen Build- und
Run-Workflow.
Die Artefakte und der projektbezogene Zugriff laufen ueber
nexus.zimplex.net. Ohne diese Quelle ist kein
vollstaendiger Projektstart moeglich.
Benutzername und Passwort werden nur an Entwickler des Teams herausgegeben. Zugangsdaten gehoeren nicht in das Repository und nicht in die oeffentliche Dokumentation.
nexus.zimplex.net intern anfordern.Schnellstart verwenden.Schnellstart
Sobald der Repository-Zugriff steht, laeuft der eigentliche Einstieg
ueber Java 25, Gradle und die bekannten Runtime-Verzeichnisse unter
build/, config/, data/ und
extensions/.
build/, config/, data/ und extensions/:run startet den normalen Service-Run.:runStandaloneLocal startet bewusst ohne CloudNet-Core-Bootstrap..\gradlew.bat../gradlew :minigames-server:test
./gradlew :minigames-server:run
./gradlew :minigames-server:assemble
./gradlew :minigames-server:assembleStandaloneLocal
java -jar application.jar --migrate-stats-to-cloudnet
config/minigames.conf und optional config/extensions/*.conf pruefen.Grundlagen
Die Engine sitzt nicht isoliert in einem eigenen Monorepo, sondern erweitert das bestehende Minestom-Setup. Ein Prozess hostet genau eine aktive MatchSession und faehrt nach Match-Ende kontrolliert herunter.
minigames-extension-apiOeffentliche SPI fuer Erweiterungen, Services und Spielmodi.
minigames-serverServer-Main, Match-System, Stats-Backends und Bundle-Build.
minigames-extension-cloudnetEingebaute CloudNet-Anbindung fuer Service-State und Startup-Infos.
minigames-extension-permsPermissions-Extension mit Provider-Kette und LuckPerms-Bootstrap.
MinestomPvP.init(true, false) genau einmal aus.CloudNetAccess und ein DatabaseProvider aufgeloest.Gameplay
Oeffentlich arbeitet die Engine mit den Game-Phasen
Lobby, Preparation, Ingame
und End. Intern mappt der Core diese auf seinen
Session-Lifecycle und steuert damit Join-Logik, Map-Aufloesung,
Respawn und Match-Ende.
max-players werden Spieler kompetitiv markiert, weitere Spieler sind Spectator.Ingame aufgeloest.ffa-spawns.| Thema | Wesentliches Verhalten |
|---|---|
| VictoryMode | LAST_ALIVE oder SCORE_LIMIT |
| RespawnMode | ELIMINATION oder DELAYED; LAST_ALIVE + DELAYED ist ungueltig |
| Match-Ende | Siegbedingung, Zeitlimit, leeres Match oder /mg end |
/mg
/start
/forcemap <mapId>
/setup ...
Betrieb
Im Betrieb greifen Konfiguration, Startup-Modus, Permissions, CloudNet-Bridge und Bundle-Struktur direkt ineinander. Fuer lokale Tests gibt es einen bewusst abgespeckten Standalone-Modus.
config/minigames.conf, config/extensions/cloudnet.conf und config/extensions/perms.conf bilden den Standardzustand.
Optional. Ohne verfuegbare CloudNet-Klassen laeuft der Server lokal weiter, nur ohne Bridge-Zugriffe und CloudNet-Database-Provider.
Provider-Reihenfolge: Op-Umgebungsvariable, LuckPermsMinestom und danach LuckPermsProvider.
minigames-server/build/bundle ist das vorgesehene Deployment-Artefakt.
| Bereich | Wichtig fuer den Betrieb |
|---|---|
runtime.mode |
service fuer normalen Betrieb, standalone-local fuer lokalen Offline-Run ohne CloudNet-Core-Bootstrap |
server.forwarding-mode |
modern braucht ein gesetztes velocity-secret |
stats.backend |
auto, jdbc oder cloudnet |
| Permissions | Wichtige Nodes: minigames.command.reload, .start, .forcemap, .setup, .end, .stats.* |
config/
|-- minigames.conf
|-- extensions/
| |-- cloudnet.conf
| `-- perms.conf
Bundle:
|-- application.jar
|-- config/
|-- extensions/
|-- data/
`-- luckperms/
:minigames-server:test ausfuehren.:minigames-server:assemble bauen.java -jar application.jar --migrate-stats-to-cloudnet migrieren.API Reference
MinigamesExtensionContextDas ist der zentrale Einstiegspunkt fuer Spielmodi und Extensions. Von hier aus werden alle relevanten Runtime-Services und Infrastrukturzugaenge bezogen.
phaseController()
gameSetupRegistry()
setupService()
matchRuntime()
matchQuery()
matchSessionEvents()
playerIdentityService()
inventoryService()
countdownService()
itemSpawnerService()
kitService()
perkService()
lobbySelectionService()
particleService()
mobService()
statsService()
templateRegistry()
cloudNetAccess()
phaseController()Gibt den Einstieg in die feste Game-Phasensteuerung frei und verbindet Extensions mit Lobby, Preparation, Ingame und End.
gameSetupRegistry() / setupService()gameSetupRegistry() stellt die laufende Map-Registry bereit, setupService() die persistente Quelle mit Editor- und Publish-API.
matchRuntime() / matchQuery()matchRuntime() liefert die aktuelle Runtime, sofern bereits eine Session existiert. matchQuery() ist die read-only Sicht auf Teilnehmer, Setup, Phasen und Combat-Abfragen.
matchSessionEvents()Lose gekoppelte Beobachtung fuer Match-Erzeugung, Lobby-Start, Preparation-Start, Match-Start, Eliminierung, Match-Ende und geplanten Shutdown.
playerIdentityService() / inventoryService()Spieleridentitaet, DisplayName und Skin lassen sich zur Laufzeit aendern; GUI-Menus werden ueber den Inventory-Service mit Builder und Hooks erstellt.
countdownService()Erzeugt wiederverwendbare Countdowns mit IDs, Start-, Tick-, Complete- und Cancel-Callbacks.
itemSpawnerService()Deckt Generator-Szenarien mit Stages, Spawn-Modi und manueller Stage-Steuerung ab.
kitService() / perkService()Kits liefern feste Loadouts, Perks freie Runtime-Boni mit Apply- und Remove-Hooks.
lobbySelectionService()Fuehrt den pre-game State fuer Kitwahl, Map-Votes, forcedMap und finale Kartenauflosung.
statsService() / templateRegistry() / cloudNetAccess()Diese Getter verbinden die Erweiterung mit Persistenz, Template-Metadaten und optionaler CloudNet-Bridge.
GameModeContext
bleibt kompatibel, ist intern aber logisch in Query- und
Control-Sicht getrennt. Neue Integrationen sollten die schlankeren
APIs bevorzugen.
API Reference
GamePhaseController / PhaseManagerDer Controller steuert die oeffentlichen Game-Phasen. Die vorhandene Dokumentation nennt nur einen Teil der exakten Methodennamen explizit; deshalb ist diese Referenz hier bewusst verhaltensorientiert aufgebaut.
aktuelle Phase lesen
Phase-Definitionen lesen
Listener fuer Phasenwechsel registrieren
Preparation aktivieren
Ingame aktivieren
End aktivieren
Preparation -> Lobby
advancePhase()
Der Controller liefert sowohl die aktuelle Game-Phase als auch die zugehoerigen Definitionen fuer Anzeige, Dauer, Join-Verhalten und CloudNet-State.
Extensions koennen Listener fuer Phasenwechsel registrieren und darauf Telemetrie, UI oder mode-spezifische Logik aufsetzen.
Direkte Wechsel sind auf Preparation, Ingame und End ausgelegt. Die Rueckkehr Preparation -> Lobby ist erlaubt; Rueckspruenge aus Ingame oder End nicht.
advancePhase()Durchlaeuft die feste Standard-Reihenfolge Lobby -> Preparation -> Ingame -> End und ist der sauberste Weg, um die vorgesehene Match-Folge beizubehalten.
API Reference
SetupServiceDer SetupService ist die persistente Schicht fuer admin-gepflegte Maps. Er sitzt vor der Runtime-Registry und verbindet Dateisystem, Edit-Sessions und Runtime-Publishing.
storedSetups()
find(id)
create(id)
edit(id)
save(session)
publish(id)
publishAll()
setupDirectory(id)
storedSetups() / find(id)Liest bereits gespeicherte Setups aus dem Dateisystem und liefert die persistente Sicht auf Maps, Spawns, Marker und Metadaten.
create(id) / edit(id)Oeffnet neue oder bestehende Edit-Sessions. Dort lassen sich Display-Name, Template-IDs, Weltquelle, Spectator-Spawns, Player-Spawns, Team-Spawns, Item-Spawns und Metadaten mutieren.
save(session) / publish(id) / publishAll()save(session) schreibt nur auf Platte. publish(id) und publishAll() registrieren Setups zusaetzlich sofort fuer die laufende Runtime.
setupDirectory(id)Loest das Zielverzeichnis eines Setups auf, zum Beispiel fuer Weltquellen, Schematic-Dateien oder weitere assets im Setup-Kontext.
API Reference
InventoryServiceDer Inventory-Service baut GUI-Menus fuer Kitwahl, Voting oder Admin-Steuerung, ohne dass Extensions direkt an eine konkrete GUI-Library gekoppelt werden.
title(...)
item(slot, itemStack)
fill(itemStack)
cancelAllClicks(...)
closeOnClick(...)
globale Click-Handler
slot-spezifische Click-Handler
Open-, Close- und Item-Change-Handler
InventoryView:
inventory()
open(player)
setItem(slot, itemStack)
Mit title(...), item(...) und fill(...) wird das Menu selbst aufgebaut. cancelAllClicks(...) und closeOnClick(...) steuern das generelle Klickverhalten.
Globale und slot-spezifische Click-Handler sowie Open-, Close- und Item-Change-Hooks erlauben es, Menus in Gameplay- und Admin-Flows einzubetten.
InventoryViewinventory() liefert das gebaute Inventory, open(player) oeffnet es fuer einen Spieler und setItem(slot, itemStack) aktualisiert Slots waehrend der Laufzeit.
API Reference
CountdownServiceDer Countdown-Service erzeugt wiederverwendbare Countdowns per ID und eignet sich fuer Vorbereitung, Sonderereignisse oder mode-spezifische Eventfenster.
Builder:
durationSeconds(...)
listener(...)
onStart(...)
onTick(...)
onComplete(...)
onCancel(...)
CountdownHandle:
start()
cancel()
restart()
running()
remainingSeconds()
Service:
find(id)
countdowns()
Der Builder definiert Dauer und Listener. Darueber haengst du Start-, Tick-, Complete- und Cancel-Logik an einen eindeutig adressierbaren Countdown.
onStart(...), onTick(...), onComplete(...) und onCancel(...) kapseln die Match- oder UI-Reaktionen pro Statuswechsel.
CountdownHandleMit start(), cancel() und restart() steuerst du die Laufzeit. running() und remainingSeconds() liefern den aktuellen Zustand.
find(id) / countdowns()Der Service kann Countdowns spaeter wieder finden oder als komplette Sammlung fuer Monitoring, Debugging oder zentrale Steuerung bereitstellen.
API Reference
ItemSpawnerServiceDer ItemSpawner-Service deckt Generator-Szenarien wie Single-Drops, spaetere Item-Upgrades und gezielte Give-to-Nearby-Mechaniken ab.
Stage:
id
itemStack
amountPerSpawn
interval
unlockAfter
Spawn-Modi:
GROUND_DROP
GIVE_TO_NEARBY_PLAYERS
Runtime:
setStage(...)
clearStageOverride()
spawnNow()
start()
stop()
Ein Spawner ist als Stage-Folge aufgebaut. Jede Stage definiert Item, Menge, Spawn-Intervall und den Zeitpunkt, ab dem sie aktiviert wird.
Freie Konfiguration fuer Instance, Position, Pickup-Delay, Initial-Velocity und Merge-Verhalten erlaubt sehr unterschiedliche Generator-Typen.
start() und stop() steuern laufende Generatoren. spawnNow() erzwingt einen sofortigen Drop. setStage(...) und clearStageOverride() setzen manuelle Stage-Wechsel.
GROUND_DROP legt Items in die Welt, GIVE_TO_NEARBY_PLAYERS gibt sie in einem definierten Radius direkt an Spieler aus.
API Reference
KitService und PerkServiceBeide Services kapseln spielmodus-spezifische Spielerzustaende, aber mit unterschiedlicher Starrheit: Kits liefern feste Loadouts, Perks freie Runtime-Boni.
KitServiceKits enthalten Inventory-Slots, Equipment, Potion-Effekte und freie Metadaten. Die Flags clearInventory und clearEffects steuern, wie aggressiv alte Zustaende ueberschrieben werden.
PerkServicePerks bestehen aus ID, optionalem Display-Namen, Beschreibung, Metadaten und den Hooks onApply und onRemove. Damit lassen sich Bonus-Items, Tags, Effekte oder freie Runtime-Flags kapseln.
allowed-kit-ids
freigegeben sind.
API Reference
StatsServiceDer StatsService ist die oeffentliche Persistenz-SPI. Im aktuellen Stand kann die Engine zwischen JDBC und CloudNet-Dokumenten als Backend umschalten.
recordMatch(MatchRecord)
loadPlayerTotals(UUID playerUuid)
loadTeamTotals(String templateId, String teamId)
recordMatch(MatchRecord)Persistiert Match-Kopfdaten, beteiligte Spieler, Team-Stats und Aggregatwerte. Der Write erfolgt genau einmal pro Match-ID beim Match-Ende.
loadPlayerTotals(...) / loadTeamTotals(...)Laden aggregierte Spieler- oder Teamwerte und bilden damit die Grundlage fuer Kommandos wie /mg stats oder mode-spezifische Auswertungen.
Moeglich sind SqlStatsService und CloudNetDocumentStatsService. auto bevorzugt CloudNet und faellt sonst auf JDBC zurueck.
Der Core verwendet derzeit unter anderem kills, deaths, assists, damage_dealt, damage_taken, hits, wins, losses, draws und score.