MiniGame
Überblick
MiniGame ist ein einziges Framework, das viele Arten von Minispielen aus TypeWriter-Entries heraus betreibt. Du beschreibst im Web-Panel eine Arena: den Spielmodus, die Lobby- und Spiel-Spawns, Spielerlimits, Teams, Kit, Runden und Nachrichten. Spieler treten dann über Action-Entries und Menüs bei. Die Erweiterung kümmert sich um die Lobby, die Bereitschaftsprüfung, den Countdown, das Spiel selbst, das Siegerpodest und das Aufräumen.
Jedes Spiel durchläuft dieselbe Phasenfolge: Lobby, Countdown, Playing, Ending, Cleanup. Jedes laufende Spiel besitzt einen Kontext, der seine Spieler, Teams, Punktestände und seinen Zustand speichert, sodass sich Runden, Teams und Scoreboards in jedem Modus gleich verhalten. Inventare werden vor dem Spiel gespeichert und danach wiederhergestellt. Spieleränderungen verwenden regionssicheres Scheduling, sodass die Erweiterung auf Paper und Folia läuft.
Ergebnisse werden in Artifacts gehalten (Siege, Punktestände, Bestzeiten, Ranglisten) und über Quest-Objectives, Facts, Trigger und Platzhalter dem Rest deines Servers zur Verfügung gestellt. Parkour, das früher eine eigene Erweiterung war, ist jetzt einer der Spielmodi. Diese Erweiterung ist zur Referenz dokumentiert und läuft auf dem BTC-Build von TypeWriter.
Funktionen
- 26 Spielmodi — PvP, Parkour und Bewegung, Survival, Strategie, Party- und Arcade-Modi, alle über das Feld
gameTypeeiner Arena gewählt. - Phasen-Engine — Lobby, Countdown, Playing, Ending und Cleanup, mit Bereitschaftsprüfung, Mindestspielerzahl, spätem Beitritt und Zuschauern.
- Teams —
NONE,SOLO,RED_BLUEoder eigene Teams mit eigenen Namen, im Lobby-Menü gewählt oder automatisch ausbalanciert. - Runden und Power-ups — optionale Runden, die Spieler zwischen den Runden wiederbeleben, und zeitgesteuerte Power-up-Drops für die regelbasierten Modi.
- Parkour — Startpunkte, geordnete Checkpoints und Endpunkte mit Partikeln, Fehlschlag-Aktionen, Timern sowie persönlichen und Arena-Rekorden.
- Eigene Arenen — zusätzliche Konfigurations-Entries für Parkour, Dé à Coudre und Bogenschießen.
- Menüs — Spielbrowser, Arenaauswahl, Lobby, Teamauswahl, Statistik- und Ergebnismenüs.
- Persistenz — Siege, Niederlagen, Punktestände, Bestzeiten und Top-Zeiten werden in Artifacts gespeichert, asynchron gesichert.
- Quest-Integration — ein Abschluss-Objective und -Fact sowie Trigger für Spielstart, -ende, Beitritt, Ausscheiden, Rundenstart und Rekorde.
- Scoreboard und Nachrichten — konfigurierbare Scoreboard-Zeilen sowie Nachrichten für Beitritt, Verlassen, Ausscheiden und Sieg mit Spiel-Platzhaltern.
Installation
- Betreibe den BTC-Build von TypeWriter (BTC Core, Paper oder Folia).
- Installiere die Erweiterungen, von denen MiniGame abhängt: die BTC-Erweiterung GUI (alle Menüs verwenden sie), Quest und Region.
- Lege die MiniGame-JAR in
plugins/Typewriter/extensions/ab und starte den Server neu. - Installiere MiniPlaceholders, wenn du die Platzhalter
<minigame_...>außerhalb des Scoreboards möchtest. Sie werden über die BTC-MiniPlaceholders-Bridge veröffentlicht, nicht über PlaceholderAPI. - Baue die Arenen in der Welt, erstelle eine Schutzregion, wo ein Entry eine verlangt (zum Beispiel das Becken einer Dé-à-Coudre-Arena), und konfiguriere dann die Entries im Web-Panel.
Erste Schritte
Diese Anleitung richtet eine Spleef-Arena mit persistenten Statistiken ein.
- Öffne im TypeWriter-Web-Panel eine Manifest-Page und füge ein Wins statistics-Artifact hinzu. Gib ihm eine
artifactId, zum Beispielspleef_wins. - Füge auf derselben Page einen Minigame Arena-Entry hinzu. Setze
gameTypeaufSPLEEF, dannlobbySpawn,gameSpawn,spectatorSpawnundendTeleportmit dem Positionswähler. - Setze
minPlayersundmaxPlayers,autoStartCountdown(Sekunden bis zum Spielstart) undmaxGameDuration(Sekunden). - Aktiviere
useRoundsund setzemaxRounds, wenn du mehrere Runden möchtest (Spieler werden wiederbelebt und in jeder Runde beigameSpawnneu platziert). Füge Items zukitItemshinzu und lassgiveKitaktiviert. - Verknüpfe
winStatArtifactmit dem Artifact aus Schritt 1. - Öffne eine Sequence-Page. Füge eine Open the minigame browser-Aktion hinzu und löse sie über einen NPC-Dialog, ein Item oder einen Befehl aus. Oder verwende Join a minigame mit
arenaauf deine Arena gesetzt, um den Spieler direkt in die Lobby zu bringen. - Veröffentliche, tritt der Arena bei, klicke im Lobby-Menü auf Ready und warte auf den Countdown. Wenn das Spiel endet, wird der Gewinner verkündet und die Statistik gespeichert.
Die Lobby zählt erst herunter, wenn mindestens minPlayers Spieler auf Ready geklickt haben. Setze minPlayers auf 1, solange du allein testest.
Funktionsweise
- Lobby. Spieler warten bei
lobbySpawn. Der Countdown beginnt nach einigen Sekunden, wenn die Zahl der als bereit markierten SpielerminPlayerserreicht. Später beitreten ist nach der Lobby nur möglich, wennallowLateJoinaktiviert ist. - Countdown. Dauert
autoStartCountdownSekunden mit Chatnachrichten. Verlassen Spieler den Server und die Zahl sinkt unter das Minimum, kehrt das Spiel in die Lobby zurück. - Playing. Spieler werden zu
gameSpawnteleportiert, ihr Inventar wird gespeichert, und das Kit wird vergeben. Die Phase endet spätestens nachmaxGameDurationSekunden.onGameStartwird ausgelöst. - Ending. Der Gewinner und die drei Besten werden verkündet. Diese Phase dauert etwa ein Sechzigstel von
maxGameDuration, begrenzt auf 5 bis 60 Sekunden. - Cleanup. Inventare, Spielmodus und Leben werden wiederhergestellt, die Ergebnisse in die Artifacts geschrieben,
onGameEndwird ausgelöst, und die Spieler kehren zuendTeleportzurück.
Ausgeschiedene Spieler werden zu Zuschauern und zu spectatorSpawn bewegt, wenn allowSpectate aktiviert und ein Zuschauer-Spawn gesetzt ist.
Spielmodi
Das Feld gameType der Arena akzeptiert die 26 Werte unten. Drei Modi haben eigenen Code. Die 23 anderen sind regelbasiert: Sie teilen sich eine Engine, die von einem Ausscheidungsmodus und einer Siegbedingung gesteuert wird. Ein regelbasierter Modus liefert dir die Regeln, die Lobby, Runden und die Punktewertung. Inhalte, die zum Namen des Spiels gehören (eine Flagge, Mob-Wellen, ein steigender Lavaboden, TNT-Blöcke, Dispenser), werden nicht generiert: Du baust sie in der Welt und verdrahtest sie mit Kits, Regionen und Triggern.
| Modus | Kategorie | Standard-Spieler | Ausscheiden | Siegbedingung |
|---|---|---|---|---|
| Sumo | PvP / Kampf | 2-8 | Herunterfallen | Letzter Überlebender |
| Gladiator | PvP / Kampf | 2-12 | Getötet | Letzter Überlebender, Power-ups alle 20 s |
| Duels | PvP / Kampf | 2 | Getötet | Letzter Überlebender |
| KOTH | PvP / Kampf | 2-16 | Zeitablauf | Zuerst Punkte erreichen, Power-ups |
| Paintball | PvP / Kampf | 2-16 | Getötet | Meiste Punkte |
| One in the Chamber | PvP / Kampf | 2-12 | Getötet | Meiste Punkte |
| Parkour | Parkour / Bewegung | 1 | Eigener Code | Den Endpunkt erreichen |
| Block Party | Parkour / Bewegung | 2-16 | Boden verschwunden | Letzter Überlebender, bis zu 5 Runden |
| TNT Run | Parkour / Bewegung | 2-16 | Herunterfallen | Letzter Überlebender |
| Floor is Lava | Parkour / Bewegung | 2-16 | Herunterfallen | Letzter Überlebender, bis zu 3 Runden |
| Falling Blocks | PvE / Survival | 1-16 | Herunterfallen | 120 s überleben |
| Wave Survival | PvE / Survival | 1-8 | Getötet | 180 s überleben, Power-ups |
| Zombie Apocalypse | PvE / Survival | 1-8 | Getötet | 300 s überleben, Power-ups |
| Dodge the Arrows | PvE / Survival | 1-16 | Getötet | Letzter Überlebender |
| Defend the Core | PvE / Survival | 1-8 | Getötet | Letztes überlebendes Team, 240 s |
| Capture the Flag | Strategie | 4-16 | Getötet | Zuerst Punkte erreichen, 300 s |
| Infection | Strategie | 2-16 | Markiert | Letzter Überlebender |
| Spleef | Strategie | 2-16 | Boden verschwunden | Letzter Überlebender, bis zu 5 Runden |
| Sheep Hunt | Strategie | 4-16 | Markiert | Meiste Markierungen, 180 s |
| TPP (Tag) | Party / Spaß | 2-16 | Markiert | Letzter Überlebender |
| Freeze Tag | Party / Spaß | 2-16 | Markiert | Letzter Überlebender |
| Hot Potato | Party / Spaß | 2-16 | Zeitablauf | Letzter Überlebender, 60 s |
| Dé à Coudre | Party / Spaß | 2-16 | Eigener Code | Letzter Spieler oder letztes Team am Leben |
| Musical Chairs | Party / Spaß | 2-16 | Zeitablauf | Letzter Überlebender, bis zu 10 Runden |
| Archery | Reflex / Arcade | 1-16 | Eigener Code | Zuerst die Zielanzahl erreichen oder beste Punktzahl im Zeitlimit |
| Quake | Reflex / Arcade | 2-16 | Getötet | Meiste Punkte |
Das Standardminimum wird nur verwendet, wenn minPlayers der Arena nicht über null liegt. Das Maximum stammt immer aus maxPlayers der Arena.
Wie die regelbasierten Modi entscheiden
- Getötet: Ein einziger Treffer eines anderen Spielers scheidet das Opfer aus, egal wie hoch der Schaden ist, und gibt dem Angreifer einen Punkt. Schützen mit Projektilen zählen.
- Markiert: Ein einziger Treffer eines anderen Spielers scheidet das Opfer aus und gibt dem Fänger einen Punkt. Teamkameraden sind geschützt, wenn Friendly Fire aus ist.
- Herunterfallen: Ein Spieler scheidet aus, wenn er zehn Blöcke unter
gameSpawnfällt. - Boden verschwunden: Ein Spieler scheidet aus, wenn der Block unter ihm Luft ist.
- Zeitablauf: Kein Timer scheidet von sich aus einen Spieler aus. Runden mit einer Dauer enden einfach, wenn die Zeit abgelaufen ist, und die Punktestände oder Überlebenden entscheiden über den Gewinner.
- Power-ups: Ist
powerUpEnabledaktiviert, fällt allepowerUpIntervalSekunden (mindestens 5) ein zufälliges Power-up-Item. Die acht Typen sind Speed, Jump, Invisibility, Heal, Shield, Explosive Snowball, Double Jump und Super Strength. - Runden: Mit aktiviertem
useRoundswerden ausgeschiedene Spieler wiederbelebt und alle für jede Runde beigameSpawnneu platziert, bis zumaxRounds. Die Erweiterung baut zwischen den Runden keine Blöcke wieder auf: Stelle einen zerstörten Boden selbst wieder her.onRoundStartwird in jeder Runde ausgelöst.
Parkour
Parkour ist ein Einzelspieler-Modus mit eigenem Konfigurations-Entry. Eine Parkour Arena verweist auf eine Minigame Arena vom Typ PARKOUR und listet ihre Startpunkte, Checkpoints und Endpunkte auf. Ein Spieler startet den Lauf, indem er auf einem Startpunkt steht, muss die Checkpoints in aufsteigender order passieren und erreicht dann einen Endpunkt.
failActionlegt fest, was ein Fehlschlag bewirkt:STARTteleportiert zurück zum Start,LAST_CHECKPOINTzum letzten Checkpoint,QUITbricht den Lauf ab.timerTypeistNONE,GLOBAL(eine festetimein Sekunden) oderCHECKPOINT(timepluscheckpointBonusSekunden bei jedem Checkpoint). Das Ablaufen der Zeit ist ein Fehlschlag.- Ein Lauf schlägt außerdem fehl, wenn der Spieler die Welt wechselt, mehr als 5 Blöcke unter den Start fällt oder mehr als 10 Blöcke vom letzten Checkpoint entfernt ist.
- Beim Abschluss wird die Zeit für Rekorde eingereicht: persönliche Bestzeit, Arena-Rangliste und die Trigger
onPersonalBestundonWorldRecordan der Arena. Die Arena endet dann, weil niemand mehr läuft.
Dé à Coudre
Eine Dé à Coudre Arena fügt eine Beckenregion, einen Sprungort und einen Spawn hinzu. mode ist SINGLE (Spieler springen nacheinander), CONCURRENT (alle springen gleichzeitig) oder TEAM. Spieler starten ohne Ersatzleben: Ein verfehlter Sprung scheidet den Spieler aus, und ein perfekter Sprung (Landung zwischen vier bereits benutzten Blöcken) bringt ein Leben ein. Die Platzhalter lives, turn und queue zeigen den Zustand.
Archery
Eine Archery Arena listet Zielpositionen und Schießzonen auf. mode ist MAX_TARGET (zuerst targetsToWin Treffer) oder TIME_ATTACK (beste Punktzahl innerhalb von timeLimitSeconds). Die Erweiterung platziert den targetBlock, ersetzt ihn bei einem Treffer durch hitBlock und gibt bowItem und arrowItem.
Menüs
Die Menüs sind Truhenmenüs mit 54 Slots, die von der GUI-Erweiterung gerendert werden. Sie bleiben leer, bis du einen Action-Entry hinzufügst, der sie öffnet.
| Menü | Geöffnet durch | Inhalt |
|---|---|---|
| Spielbrowser | Open the minigame browser | Eine Reihe der sechs Kategorien, dann die Spiele der gewählten Kategorie. Ein Spiel ist nur verfügbar, wenn eine Arena dieses Typs existiert. |
| Arenaauswahl | Open arena selection oder ein Klick im Browser | Die Arenen eines Spieltyps mit ihrem Status (frei, wartend, voll, im Spiel) und Spielerzahlen. Ein Klick tritt bei. |
| Lobby | Open the lobby menu oder automatisch nach dem Beitritt über die Menüs | Die Arena-Beschreibung, Spielerliste mit Bereitschaftsstatus und Team, die Buttons Ready, Team, Start the game und Leave sowie deine eigenen Buttons. |
| Teamauswahl | Der Button Team | Ein Team wählen oder zufällig eines zugewiesen bekommen. |
| Statistik | Open statistics | Siege, Niederlagen, gespielte Spiele und eine Top 10, pro Arena oder arenaübergreifend. Benötigt winStatArtifact an den Arenen. |
| Ergebnisse | Open the results screen | Gewinner, Dauer, Spielerzahl und Siegerpodest. Verdrahte die Aktion mit dem Trigger onGameEnd der Arena. |
Der Button Start the game wird nur Spielern mit der Berechtigung minigame.start angezeigt. Ein Lobby Menu-Entry passt den Titel an, blendet Teile des Menüs aus und fügt Buttons mit einem slot von 0 bis 53 und einer showCondition hinzu.
Persistenz und Rekorde
Artifacts werden beim Start geladen und asynchron geschrieben, sodass das Speichern nie einen Spiel-Tick blockiert. Gespeicherte Daten werden pro Arena und pro Spieler geführt.
- Wins statistics speichert Siege, Niederlagen und gespielte Spiele, beim Cleanup für jeden Spieler des Spiels gesichert.
- Scores statistics addiert beim Cleanup den Punktestand jedes Spielers, wenn er über null liegt.
- Minigame state wird beim Cleanup mit der letzten Phase, der Spielerzahl und dem Gewinner geschrieben.
- Best time und Top times speichern persönliche Bestzeiten und die Rangliste;
topTimesLimitlegt fest, wie viele Zeiten behalten werden. Derzeit erzeugt nur Parkour Zeiten.
Reset records löscht die Rekorde einer Arena für den auslösenden Spieler (PLAYER) oder für alle (ARENA).
Quest-Integration
Das Objective Complete minigames zählt abgeschlossene Zeitläufe. Lass arena leer, um jede Arena zu zählen, oder setze es, um eine zu zählen. Es speichert seinen Fortschritt in einem von dir bereitgestellten Fact und kann onComplete auslösen. Der Fact Minigame completions zählt Abschlüsse getrennt für jede Arena, in der sich der Spieler befindet, sodass ein Fact ein ganzes Netzwerk aus Arenen bedienen kann. Beide reagieren derzeit nur auf Parkour-Abschlüsse.
Berechtigungen
| Berechtigung | Gewährt |
|---|---|
minigame.start | Zeigt den Button Start the game im Lobby-Menü an und erlaubt ihn. |
Es gibt keine Befehle: Alles wird über Entries und Menüs gesteuert.
Platzhalter
Spiel-Platzhalter gibt es in zwei Formen. In Nachrichten und Scoreboard-Zeilen einer Arena kannst du %name%-Tokens verwenden. Anderswo auf dem Server veröffentlicht die BTC-MiniPlaceholders-Bridge dieselben Werte als <minigame_name> für einen Spieler, der in einem Spiel ist.
| Platzhalter | Gibt zurück |
|---|---|
arena und arena_id | Den Arena-Namen und die Entry-ID. |
game_id | Die ID des laufenden Spiels. |
phase | Den Namen der aktuellen Phase. |
players und alive | Spieler im Spiel und noch lebende Spieler. |
max_players | Das Spielerlimit der Arena. |
winner | Den Namen des Gewinners oder „Personne“, solange es keinen gibt. |
score | Die Punktzahl des Spielers. |
alive_status | alive oder eliminated. |
rank | Den Rang des Spielers nach Punktzahl oder -. |
lives, turn und queue | Leben, aktueller Springer und Sprungreihenfolge, nur für Dé à Coudre. In anderen Modi -. |
%player% (nur Nachrichten) | Den Spielernamen, in Nachrichten zu Beitritt, Verlassen und Ausscheiden. |
Entries
24 Einträge, aus dem Quellcode der Erweiterung generiert.
Aktionen9
- Minigame ForcestartForcer le démarrage d'un mini-jeu
- Minigame JoinRejoindre un mini-jeu
- Minigame LeaveQuitter un mini-jeu
- Minigame Open ArenasOuvrir la sélection d'arène
- Minigame Open BrowserOuvrir le navigateur de mini-jeux
- Minigame Open LobbyOuvrir le menu du lobby
- Minigame Open ResultsOuvrir les résultats de la partie
- Minigame Open StatsOuvrir les statistiques de mini-jeux
- Minigame Reset RecordsRéinitialiser les records d'une arène
Ziele1
- Minigame Completion ObjectiveTerminer des mini-jeux
Fakten1
- Minigame Completion FactCompte les complétions d'un joueur, par arène
Artefakte5
- Minigame Best Time ArtifactStocke le meilleur temps personnel de chaque joueur par arène
- Minigame ScoresStatistiques de scores
- Minigame StateÉtat d'un mini-jeu
- Minigame Top Times ArtifactStocke le classement des meilleurs temps d'une arène
- Minigame WinsStatistiques de victoires
Manifeste5
- Archery ArenaArène de tir à l'arc
- Deacoudre ArenaDé à Coudre Arena
- Minigame ArenaArène de mini-jeu
- Minigame Lobby MenuMenu du lobby
- Parkour ArenaArène de Parkour
Definitionen3
- Parkour CheckpointCheckpoint du parkour
- Parkour End PointPoint d'arrivée du parkour
- Parkour Start PointPoint de départ du parkour
Fehlerbehebung
Menüs bewirken nichts oder sind leer. Die Menüs benötigen die GUI-Erweiterung und einen Action-Entry, der sie öffnet. Prüfe, ob eine Arena mit dem richtigen gameType existiert: Der Browser markiert einen Spieltyp als nicht verfügbar, wenn keine Arena ihn verwendet.
Das Spiel bleibt ewig in der Lobby. Der Countdown beginnt erst, wenn mindestens minPlayers Spieler auf Ready geklickt haben, nicht schon, wenn sie anwesend sind. Senke minPlayers oder verwende Force start a minigame, um den Countdown zu starten.
„Vous êtes déjà dans une partie“. Ein Spieler kann sich nur in einem Spiel befinden. Verwende zuerst Leave a minigame. Das Verlassen, Trennen und Beenden eines Spiels gibt den Spieler jeweils frei.
In KILL- oder TAG-Modi scheidet nie jemand aus. Teste im Überlebensmodus mit einem Spieler, der Schaden nehmen kann: Im Kreativmodus sind Spieler unverwundbar. Ausscheidungen in diesen Modi entstehen durch Schaden eines anderen Spielers, einschließlich Pfeilen und Schneebällen.
Statistiken, Kills oder das State-Artifact bleiben leer. Eine Arena schreibt nur in die Artifacts, auf die sie verweist: Setze winStatArtifact, scoreArtifact und stateArtifact und gib jedem Artifact eine artifactId. Kills und Tode werden vom aktuellen Code nicht erfasst und zeigen 0. Bestzeiten und Top-Zeiten werden nur von Parkour geschrieben.
Ein Parkour-Lauf schlägt ständig fehl. Jeder Checkpoint muss innerhalb von 10 Blöcken vom vorherigen liegen, und der Lauf schlägt 5 Blöcke unter dem Startpunkt fehl. Checkpoints müssen in aufsteigender order erreicht werden, und der Endpunkt zählt erst nach dem letzten Checkpoint. Bei radius auf 0 muss der Spieler genau auf dem Block stehen.
Ein Spieler kann den Lobby-Bereich nicht verlassen. Während des Wartens (Phasen Lobby und Countdown) hindert lobbyRadius (Standard 10 Blöcke um lobbySpawn) die Spieler daran, sich zu entfernen; es teleportiert nicht, und ein Spieler, der bereits außerhalb steht, darf immer zurückgehen. Setze 0 für keine Begrenzung.
Ein Spieler wird ohne erkennbaren Grund eliminiert. region ist die Spielzone der regelbasierten Modi: Verlässt ein Spieler sie während einer Partie, wird er eliminiert (die Region wird in Archery, Parkour und Dé à Coudre, die eigene Phasen haben, nicht erzwungen). In den Modi, in denen der Boden verschwindet (Spleef, Block Party), listet floorMaterial die Bukkit-Materialnamen auf, die als Boden zählen, durch Kommas getrennt: Ein Spieler wird eliminiert, sobald der Block unter seinen Füßen keiner davon ist. Leer bedeutet, dass jeder Block außer Luft ein Boden ist; unbekannte Namen werden ignoriert und mit einer Warnung in der Konsole gemeldet. Böden werden nicht aus floorMaterial generiert; du baust sie selbst.
Die Siegesnachricht ist nicht die erwartete. winMessage wird am Ende der Partie angekündigt, wobei %winner% durch den Gewinner ersetzt wird.
Ein Spieler kann der Arena nicht beitreten. Wenn jede offene Lobby einer Arena maxPlayers Spieler enthält, ist die Arena voll und der Beitritt wird abgelehnt: Es wird keine zweite Partie parallel geöffnet. Die Aktion Join a minigame sendet dann ihre fullMessage.