MiniGame
Présentation
MiniGame est un framework unique qui exécute de nombreux types de mini-jeux à partir d'entrées TypeWriter. Vous décrivez une arène dans le panneau web : le mode de jeu, les points d'apparition du lobby et de la partie, les limites de joueurs, les équipes, le kit, les manches et les messages. Les joueurs la rejoignent ensuite via des entrées d'action et des menus. L'extension gère le lobby, la vérification de disponibilité (ready), le compte à rebours, la partie elle-même, le podium et le nettoyage.
Chaque partie traverse la même séquence de phases : Lobby, Countdown, Playing, Ending, Cleanup. Chaque partie en cours possède un contexte qui stocke ses joueurs, ses équipes, ses scores et son état, de sorte que les manches, les équipes et les scoreboards se comportent de la même façon dans tous les modes. Les inventaires sont sauvegardés avant la partie et restaurés ensuite. Les modifications sur les joueurs utilisent une planification sûre par région, l'extension fonctionne donc sur Paper et Folia.
Les résultats sont conservés dans des artifacts (victoires, scores, meilleurs temps, classements) et sont exposés au reste de votre serveur via des objectifs de quête, des facts, des triggers et des placeholders. Le parkour, qui était auparavant une extension distincte, est désormais l'un des modes de jeu. Cette extension est documentée à titre de référence et fonctionne sur la version BTC de TypeWriter.
Fonctionnalités
- 26 modes de jeu — PvP, parkour et mouvement, survie, stratégie, modes party et arcade, tous sélectionnés avec le champ
gameTyped'une arène. - Moteur de phases — lobby, compte à rebours, partie, fin et nettoyage, avec vérification de disponibilité, minimum de joueurs, arrivée tardive et spectateurs.
- Équipes —
NONE,SOLO,RED_BLUEou équipes personnalisées avec vos propres noms, choisies depuis le menu du lobby ou équilibrées automatiquement. - Manches et power-ups — manches facultatives qui ressuscitent les joueurs entre les manches, et largages de power-ups chronométrés pour les modes à règles.
- Parkour — points de départ, checkpoints ordonnés et points d'arrivée avec particules, actions d'échec, chronomètres et records personnels et d'arène.
- Arènes dédiées — entrées de configuration supplémentaires pour le parkour, Dé à Coudre et le tir à l'arc.
- Menus — navigateur de jeux, sélection d'arène, lobby, sélection d'équipe, statistiques et résultats.
- Persistance — victoires, défaites, scores, meilleurs temps et meilleurs temps du classement stockés dans des artifacts, sauvegardés de façon asynchrone.
- Intégration aux quêtes — un objectif et un fact d'achèvement, ainsi que des triggers pour le début de partie, la fin, l'arrivée, l'élimination, le début de manche et les records.
- Scoreboard et messages — lignes de scoreboard configurables et messages d'arrivée, de départ, d'élimination et de victoire avec des placeholders de partie.
Installation
- Utilisez la version BTC de TypeWriter (BTC Core, Paper ou Folia).
- Installez les extensions dont dépend MiniGame : l'extension BTC GUI (tous les menus l'utilisent), Quest et Region.
- Placez le JAR de MiniGame dans
plugins/Typewriter/extensions/et redémarrez le serveur. - Installez MiniPlaceholders si vous voulez les placeholders
<minigame_...>en dehors du scoreboard. Ils sont publiés via le pont MiniPlaceholders de BTC, et non via PlaceholderAPI. - Construisez les arènes dans le monde, créez une région de protection là où une entrée en demande une (par exemple le bassin d'une arène Dé à Coudre), puis configurez les entrées dans le panneau web.
Premiers pas
Ce pas-à-pas met en place une arène de Spleef avec des statistiques persistantes.
- Dans le panneau web de TypeWriter, ouvrez une page manifest et ajoutez un artifact Wins statistics. Donnez-lui un
artifactId, par exemplespleef_wins. - Sur la même page, ajoutez une entrée Minigame Arena. Définissez
gameTypesurSPLEEF, puislobbySpawn,gameSpawn,spectatorSpawnetendTeleportavec le sélecteur de position. - Définissez
minPlayersetmaxPlayers,autoStartCountdown(secondes avant le début de la partie) etmaxGameDuration(secondes). - Activez
useRoundset définissezmaxRoundssi vous voulez plusieurs manches (les joueurs sont ressuscités et replacés àgameSpawnà chaque manche). Ajoutez des objets àkitItemset gardezgiveKitactivé. - Liez
winStatArtifactà l'artifact de l'étape 1. - Ouvrez une page de séquence. Ajoutez une action Open the minigame browser, et déclenchez-la depuis un dialogue de PNJ, un objet ou une commande. Ou utilisez Join a minigame avec
arenadéfini sur votre arène pour placer directement le joueur dans le lobby. - Publiez, rejoignez l'arène, cliquez sur Ready dans le menu du lobby et attendez le compte à rebours. À la fin de la partie, le vainqueur est annoncé et les statistiques sont sauvegardées.
Le lobby ne lance le compte à rebours que lorsqu'au moins minPlayers joueurs ont cliqué sur Ready. Définissez minPlayers sur 1 pendant que vous testez seul.
Fonctionnement
- Lobby. Les joueurs attendent à
lobbySpawn. Le compte à rebours démarre lorsque le nombre de joueurs marqués prêts atteintminPlayers, après quelques secondes. L'arrivée tardive n'est possible après le lobby que lorsqueallowLateJoinest activé. - Countdown. Dure
autoStartCountdownsecondes avec des messages dans le chat. Si des joueurs partent et que leur nombre tombe sous le minimum, la partie retourne au lobby. - Playing. Les joueurs sont téléportés à
gameSpawn, leur inventaire est sauvegardé et le kit est donné. La phase se termine au plus tard aprèsmaxGameDurationsecondes.onGameStartse déclenche. - Ending. Le vainqueur et les trois premiers sont annoncés. Cette phase dure environ un soixantième de
maxGameDuration, bornée entre 5 et 60 secondes. - Cleanup. Les inventaires, le mode de jeu et la santé sont restaurés, les résultats sont écrits dans les artifacts,
onGameEndse déclenche, et les joueurs retournent àendTeleport.
Les joueurs éliminés deviennent spectateurs et sont déplacés à spectatorSpawn lorsque allowSpectate est activé et qu'un point d'apparition de spectateur est défini.
Modes de jeu
Le champ gameType de l'arène accepte les 26 valeurs ci-dessous. Trois modes ont leur propre code. Les 23 autres sont à règles : ils partagent un moteur unique piloté par un mode d'élimination et une condition de victoire. Un mode à règles vous donne les règles, le lobby, les manches et le score. Le contenu propre au nom du jeu (un drapeau, des vagues de mobs, un sol de lave qui monte, des blocs de TNT, des distributeurs) n'est pas généré : vous le construisez dans le monde et le reliez avec des kits, des régions et des triggers.
| Mode | Catégorie | Joueurs par défaut | Élimination | Condition de victoire |
|---|---|---|---|---|
| Sumo | PvP / Combat | 2-8 | Chute | Dernier en vie |
| Gladiator | PvP / Combat | 2-12 | Tué | Dernier en vie, power-ups toutes les 20 s |
| Duels | PvP / Combat | 2 | Tué | Dernier en vie |
| KOTH | PvP / Combat | 2-16 | Délai écoulé | Premier à marquer, power-ups |
| Paintball | PvP / Combat | 2-16 | Tué | Meilleur score |
| One in the Chamber | PvP / Combat | 2-12 | Tué | Meilleur score |
| Parkour | Parkour / Mouvement | 1 | Code dédié | Atteindre le point d'arrivée |
| Block Party | Parkour / Mouvement | 2-16 | Sol disparu | Dernier en vie, jusqu'à 5 manches |
| TNT Run | Parkour / Mouvement | 2-16 | Chute | Dernier en vie |
| Floor is Lava | Parkour / Mouvement | 2-16 | Chute | Dernier en vie, jusqu'à 3 manches |
| Falling Blocks | PvE / Survie | 1-16 | Chute | Survivre 120 s |
| Wave Survival | PvE / Survie | 1-8 | Tué | Survivre 180 s, power-ups |
| Zombie Apocalypse | PvE / Survie | 1-8 | Tué | Survivre 300 s, power-ups |
| Dodge the Arrows | PvE / Survie | 1-16 | Tué | Dernier en vie |
| Defend the Core | PvE / Survie | 1-8 | Tué | Dernière équipe en vie, 240 s |
| Capture the Flag | Stratégie | 4-16 | Tué | Premier à marquer, 300 s |
| Infection | Stratégie | 2-16 | Touché (tag) | Dernier en vie |
| Spleef | Stratégie | 2-16 | Sol disparu | Dernier en vie, jusqu'à 5 manches |
| Sheep Hunt | Stratégie | 4-16 | Touché (tag) | Le plus de touches, 180 s |
| TPP (Tag) | Party / Fun | 2-16 | Touché (tag) | Dernier en vie |
| Freeze Tag | Party / Fun | 2-16 | Touché (tag) | Dernier en vie |
| Hot Potato | Party / Fun | 2-16 | Délai écoulé | Dernier en vie, 60 s |
| Dé à Coudre | Party / Fun | 2-16 | Code dédié | Dernier joueur ou dernière équipe en vie |
| Musical Chairs | Party / Fun | 2-16 | Délai écoulé | Dernier en vie, jusqu'à 10 manches |
| Archery | Réflexes / Arcade | 1-16 | Code dédié | Premier à atteindre le nombre de cibles, ou meilleur score dans la limite de temps |
| Quake | Réflexes / Arcade | 2-16 | Tué | Meilleur score |
Le minimum par défaut n'est utilisé que lorsque le minPlayers de l'arène n'est pas supérieur à zéro. Le maximum provient toujours du maxPlayers de l'arène.
Comment les modes à règles décident
- Tué : un seul coup d'un autre joueur élimine la victime, quels que soient les dégâts, et rapporte un point à l'attaquant. Les tireurs de projectiles comptent.
- Touché (tag) : un seul coup d'un autre joueur élimine la victime et rapporte un point à celui qui a touché. Les coéquipiers sont protégés lorsque les tirs amis sont désactivés.
- Chute : un joueur est éliminé à plus de dix blocs sous
gameSpawn. - Sol disparu : un joueur est éliminé lorsque le bloc situé en dessous est de l'air.
- Délai écoulé : aucun chronomètre n'élimine un joueur à lui seul. Les manches avec une durée se terminent simplement lorsque le temps est écoulé, et ce sont les scores ou les survivants qui décident du vainqueur.
- Power-ups : lorsque
powerUpEnabledest activé, un objet power-up aléatoire tombe toutes lespowerUpIntervalsecondes (au moins 5). Les huit types sont Speed, Jump, Invisibility, Heal, Shield, Explosive Snowball, Double Jump et Super Strength. - Manches : avec
useRoundsactivé, les joueurs éliminés sont ressuscités et tout le monde est replacé àgameSpawnà chaque manche, jusqu'àmaxRounds. L'extension ne reconstruit pas les blocs entre les manches : restaurez vous-même un sol cassé.onRoundStartse déclenche à chaque manche.
Parkour
Le parkour est un mode solo avec sa propre entrée de configuration. Une Parkour Arena est liée à une Minigame Arena de type PARKOUR et liste ses points de départ, ses checkpoints et ses points d'arrivée. Un joueur lance la course en se tenant sur un point de départ, doit franchir les checkpoints par order croissant, puis atteint un point d'arrivée.
failActiondécide de ce que fait un échec :STARTtéléporte au départ,LAST_CHECKPOINTau dernier checkpoint,QUITabandonne la course.timerTypevautNONE,GLOBAL(untimefixe en secondes) ouCHECKPOINT(timepluscheckpointBonussecondes à chaque checkpoint). Manquer de temps est un échec.- Une course échoue aussi lorsque le joueur change de monde, descend de plus de 5 blocs sous le départ, ou se trouve à plus de 10 blocs du dernier checkpoint.
- À l'arrivée, le temps est soumis aux records : record personnel, classement de l'arène, et triggers
onPersonalBestetonWorldRecordde l'arène. L'arène se termine alors, car plus personne n'est en course.
Dé à Coudre
Une Dé à Coudre Arena ajoute une région de bassin, un point de saut et un point d'apparition. mode vaut SINGLE (les joueurs sautent à tour de rôle), CONCURRENT (tout le monde saute en même temps) ou TEAM. Les joueurs commencent sans vie de réserve : un saut raté élimine le joueur, et un saut parfait (atterrir entre quatre blocs déjà utilisés) rapporte une vie. Les placeholders lives, turn et queue affichent l'état.
Archery
Une Archery Arena liste des positions de cibles et des zones de tir. mode vaut MAX_TARGET (premier à targetsToWin touches) ou TIME_ATTACK (meilleur score dans timeLimitSeconds). L'extension place le targetBlock, le remplace par hitBlock lorsqu'il est touché, et donne le bowItem et le arrowItem.
Menus
Les menus sont des menus de coffre de 54 emplacements rendus par l'extension GUI. Ils restent vides tant que vous n'ajoutez pas une entrée d'action qui les ouvre.
| Menu | Ouvert par | Contenu |
|---|---|---|
| Navigateur de jeux | Open the minigame browser | Une ligne des six catégories, puis les jeux de la catégorie sélectionnée. Un jeu n'est disponible que s'il existe une arène de ce type. |
| Sélection d'arène | Open arena selection ou un clic dans le navigateur | Les arènes d'un type de jeu avec leur statut (libre, en attente, pleine, en jeu) et leur nombre de joueurs. Un clic rejoint l'arène. |
| Lobby | Open the lobby menu, ou automatiquement après avoir rejoint depuis les menus | La description de l'arène, la liste des joueurs avec leur état de disponibilité et leur équipe, les boutons Ready, Team, Start the game et Leave, ainsi que vos boutons personnalisés. |
| Sélection d'équipe | Le bouton Team | Choisir une équipe ou s'en voir attribuer une au hasard. |
| Statistiques | Open statistics | Victoires, défaites, parties jouées et un top 10, par arène ou toutes arènes confondues. Nécessite winStatArtifact sur les arènes. |
| Résultats | Open the results screen | Vainqueur, durée, nombre de joueurs et podium. Reliez l'action au trigger onGameEnd de l'arène. |
Le bouton Start the game n'est affiché qu'aux joueurs possédant la permission minigame.start. Une entrée Lobby Menu personnalise le titre, masque des parties du menu et ajoute des boutons avec un slot de 0 à 53 et une showCondition.
Persistance et records
Les artifacts sont chargés au démarrage et écrits de façon asynchrone ; la sauvegarde ne bloque donc jamais un tick de jeu. Les données stockées sont conservées par arène et par joueur.
- Wins statistics stocke les victoires, les défaites et les parties jouées, sauvegardées lors du nettoyage pour chaque joueur de la partie.
- Scores statistics ajoute le score de chaque joueur lors du nettoyage lorsqu'il est supérieur à zéro.
- Minigame state est écrit lors du nettoyage avec la phase finale, le nombre de joueurs et le vainqueur.
- Best time et Top times stockent les meilleurs temps personnels et le classement ;
topTimesLimitdéfinit combien de temps sont conservés. Aujourd'hui, seul le parkour produit des temps.
Reset records efface les records d'une arène pour le joueur à l'origine du déclenchement (PLAYER) ou pour tout le monde (ARENA).
Intégration aux quêtes
L'objectif Complete minigames compte les courses chronométrées terminées. Laissez arena vide pour compter toutes les arènes, ou renseignez-le pour en compter une seule. Il stocke sa progression dans un fact que vous fournissez et peut déclencher onComplete. Le fact Minigame completions compte les achèvements séparément pour chaque arène où se trouve le joueur, un seul fact peut donc servir tout un réseau d'arènes. Les deux ne réagissent actuellement qu'aux achèvements de parkour.
Permissions
| Permission | Autorise |
|---|---|
minigame.start | Affiche et autorise le bouton Start the game dans le menu du lobby. |
Il n'y a pas de commandes : tout est piloté par des entrées et des menus.
Placeholders
Les placeholders de partie sont disponibles sous deux formes. Dans les messages et les lignes de scoreboard d'une arène, vous pouvez utiliser des jetons %name%. Ailleurs sur le serveur, le pont MiniPlaceholders de BTC publie les mêmes valeurs sous la forme <minigame_name> pour un joueur qui est dans une partie.
| Placeholder | Renvoie |
|---|---|
arena et arena_id | Le nom de l'arène et l'identifiant de l'entrée. |
game_id | L'identifiant de la partie en cours. |
phase | Le nom de la phase actuelle. |
players et alive | Les joueurs dans la partie et les joueurs encore en vie. |
max_players | La limite de joueurs de l'arène. |
winner | Le nom du vainqueur, ou « Personne » tant qu'il n'y en a pas. |
score | Le score du joueur. |
alive_status | alive ou eliminated. |
rank | Le rang du joueur selon le score, ou -. |
lives, turn et queue | Vies, sauteur actuel et ordre de saut, pour Dé à Coudre uniquement. - dans les autres modes. |
%player% (messages uniquement) | Le nom du joueur, dans les messages d'arrivée, de départ et d'élimination. |
Entrées
24 entrées, générées depuis la source de l'extension.
Actions9
- 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
Objectifs1
- Minigame Completion ObjectiveTerminer des mini-jeux
Faits1
- Minigame Completion FactCompte les complétions d'un joueur, par arène
Artefacts5
- 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
Manifestes5
- 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
Définitions3
- Parkour CheckpointCheckpoint du parkour
- Parkour End PointPoint d'arrivée du parkour
- Parkour Start PointPoint de départ du parkour
Dépannage
Les menus ne font rien ou sont vides. Les menus ont besoin de l'extension GUI et d'une entrée d'action pour les ouvrir. Vérifiez qu'une arène du bon gameType existe : le navigateur marque un type de jeu comme indisponible lorsqu'aucune arène ne l'utilise.
La partie reste indéfiniment dans le lobby. Le compte à rebours ne démarre que lorsqu'au moins minPlayers joueurs ont cliqué sur Ready, et pas simplement lorsqu'ils sont présents. Diminuez minPlayers, ou utilisez Force start a minigame pour lancer le compte à rebours.
« Vous êtes déjà dans une partie ». Un joueur ne peut être que dans une seule partie. Utilisez d'abord Leave a minigame. Quitter, se déconnecter et terminer une partie libèrent tous le joueur.
Personne n'est jamais éliminé dans les modes KILL ou TAG. Testez en mode survie avec un joueur qui peut subir des dégâts : en mode créatif, les joueurs sont invulnérables. Les éliminations dans ces modes proviennent de dégâts infligés par un autre joueur, y compris les flèches et les boules de neige.
Les statistiques, les kills ou l'artifact d'état restent vides. Une arène n'écrit que dans les artifacts qu'elle référence : définissez winStatArtifact, scoreArtifact et stateArtifact et donnez un artifactId à chaque artifact. Les kills et les morts ne sont pas enregistrés par le code actuel et affichent 0. Les meilleurs temps et les temps du classement ne sont écrits que par le parkour.
Une course de parkour échoue sans cesse. Chaque checkpoint doit se trouver à moins de 10 blocs du précédent et la course échoue 5 blocs sous le point de départ. Les checkpoints doivent être atteints par order croissant, et le point d'arrivée ne compte qu'après le dernier checkpoint. Avec radius à 0, le joueur doit se tenir sur le bloc exact.
Un joueur ne peut pas quitter la zone du lobby. Pendant l'attente (phases Lobby et Countdown), lobbyRadius (par défaut 10 blocs autour de lobbySpawn) empêche les joueurs de s'éloigner ; il ne téléporte pas, et un joueur déjà à l'extérieur peut toujours revenir. Mettez 0 pour ne pas limiter.
Un joueur est éliminé sans raison apparente. region est la zone de jeu des modes à règles : la quitter pendant une partie élimine le joueur (la région n'est pas appliquée dans Archery, Parkour et Dé à Coudre, qui ont leurs propres phases). Dans les modes où le sol disparaît (Spleef, Block Party), floorMaterial liste les noms de matériaux Bukkit qui comptent comme sol, séparés par des virgules : un joueur est éliminé dès que le bloc sous ses pieds n'en fait pas partie. Vide signifie que tout bloc non vide est un sol, et les noms inconnus sont ignorés avec un avertissement dans la console. Les sols ne sont pas générés à partir de floorMaterial ; vous les construisez.
Le message de victoire n'est pas celui attendu. winMessage est annoncé à la fin de la partie, %winner% étant remplacé par le vainqueur.
Un joueur ne peut pas rejoindre l'arène. Quand chaque lobby ouvert d'une arène contient maxPlayers joueurs, l'arène est pleine et l'entrée est refusée : aucune seconde partie n'est ouverte en parallèle. L'action Join a minigame envoie alors son fullMessage.