Aller au contenu principal

MiniGame

Framework de mini-jeux : 26 modes de jeu, arènes, menus de lobby, parkour, records et intégration des quêtes.

Privéesv0.1.0Combat et mobs
NécessiteTypeWriter0.9.0-beta-177 (BTC build)GUIQuestRegionMiniPlaceholdersfacultatif

Conçue pour le réseau BornToCraft. Cette extension est documentée à titre de référence et n'est pas distribuée.

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 gameType d'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_BLUE ou é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​

  1. Utilisez la version BTC de TypeWriter (BTC Core, Paper ou Folia).
  2. Installez les extensions dont dépend MiniGame : l'extension BTC GUI (tous les menus l'utilisent), Quest et Region.
  3. Placez le JAR de MiniGame dans plugins/Typewriter/extensions/ et redémarrez le serveur.
  4. 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.
  5. 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.

  1. Dans le panneau web de TypeWriter, ouvrez une page manifest et ajoutez un artifact Wins statistics. Donnez-lui un artifactId, par exemple spleef_wins.
  2. Sur la même page, ajoutez une entrée Minigame Arena. Définissez gameType sur SPLEEF, puis lobbySpawn, gameSpawn, spectatorSpawn et endTeleport avec le sélecteur de position.
  3. Définissez minPlayers et maxPlayers, autoStartCountdown (secondes avant le début de la partie) et maxGameDuration (secondes).
  4. Activez useRounds et définissez maxRounds si vous voulez plusieurs manches (les joueurs sont ressuscités et replacés à gameSpawn à chaque manche). Ajoutez des objets à kitItems et gardez giveKit activé.
  5. Liez winStatArtifact à l'artifact de l'étape 1.
  6. 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 arena défini sur votre arène pour placer directement le joueur dans le lobby.
  7. 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.
Démarrer avec un seul joueur

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​

  1. Lobby. Les joueurs attendent à lobbySpawn. Le compte à rebours démarre lorsque le nombre de joueurs marqués prêts atteint minPlayers, après quelques secondes. L'arrivée tardive n'est possible après le lobby que lorsque allowLateJoin est activé.
  2. Countdown. Dure autoStartCountdown secondes avec des messages dans le chat. Si des joueurs partent et que leur nombre tombe sous le minimum, la partie retourne au lobby.
  3. 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ès maxGameDuration secondes. onGameStart se déclenche.
  4. 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.
  5. Cleanup. Les inventaires, le mode de jeu et la santé sont restaurés, les résultats sont écrits dans les artifacts, onGameEnd se 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.

ModeCatégorieJoueurs par défautÉliminationCondition de victoire
SumoPvP / Combat2-8ChuteDernier en vie
GladiatorPvP / Combat2-12TuéDernier en vie, power-ups toutes les 20 s
DuelsPvP / Combat2TuéDernier en vie
KOTHPvP / Combat2-16Délai écouléPremier à marquer, power-ups
PaintballPvP / Combat2-16TuéMeilleur score
One in the ChamberPvP / Combat2-12TuéMeilleur score
ParkourParkour / Mouvement1Code dédiéAtteindre le point d'arrivée
Block PartyParkour / Mouvement2-16Sol disparuDernier en vie, jusqu'à 5 manches
TNT RunParkour / Mouvement2-16ChuteDernier en vie
Floor is LavaParkour / Mouvement2-16ChuteDernier en vie, jusqu'à 3 manches
Falling BlocksPvE / Survie1-16ChuteSurvivre 120 s
Wave SurvivalPvE / Survie1-8TuéSurvivre 180 s, power-ups
Zombie ApocalypsePvE / Survie1-8TuéSurvivre 300 s, power-ups
Dodge the ArrowsPvE / Survie1-16TuéDernier en vie
Defend the CorePvE / Survie1-8TuéDernière équipe en vie, 240 s
Capture the FlagStratégie4-16TuéPremier à marquer, 300 s
InfectionStratégie2-16Touché (tag)Dernier en vie
SpleefStratégie2-16Sol disparuDernier en vie, jusqu'à 5 manches
Sheep HuntStratégie4-16Touché (tag)Le plus de touches, 180 s
TPP (Tag)Party / Fun2-16Touché (tag)Dernier en vie
Freeze TagParty / Fun2-16Touché (tag)Dernier en vie
Hot PotatoParty / Fun2-16Délai écouléDernier en vie, 60 s
Dé à CoudreParty / Fun2-16Code dédiéDernier joueur ou dernière équipe en vie
Musical ChairsParty / Fun2-16Délai écouléDernier en vie, jusqu'à 10 manches
ArcheryRéflexes / Arcade1-16Code dédiéPremier à atteindre le nombre de cibles, ou meilleur score dans la limite de temps
QuakeRéflexes / Arcade2-16Tué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 powerUpEnabled est activé, un objet power-up aléatoire tombe toutes les powerUpInterval secondes (au moins 5). Les huit types sont Speed, Jump, Invisibility, Heal, Shield, Explosive Snowball, Double Jump et Super Strength.
  • Manches : avec useRounds activé, 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é. onRoundStart se 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.

  • failAction décide de ce que fait un échec : START téléporte au départ, LAST_CHECKPOINT au dernier checkpoint, QUIT abandonne la course.
  • timerType vaut NONE, GLOBAL (un time fixe en secondes) ou CHECKPOINT (time plus checkpointBonus secondes à 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 onPersonalBest et onWorldRecord de 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.

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.

MenuOuvert parContenu
Navigateur de jeuxOpen the minigame browserUne 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èneOpen arena selection ou un clic dans le navigateurLes 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.
LobbyOpen the lobby menu, ou automatiquement après avoir rejoint depuis les menusLa 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'équipeLe bouton TeamChoisir une équipe ou s'en voir attribuer une au hasard.
StatistiquesOpen statisticsVictoires, 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ésultatsOpen the results screenVainqueur, 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 ; topTimesLimit dé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​

PermissionAutorise
minigame.startAffiche 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.

PlaceholderRenvoie
arena et arena_idLe nom de l'arène et l'identifiant de l'entrée.
game_idL'identifiant de la partie en cours.
phaseLe nom de la phase actuelle.
players et aliveLes joueurs dans la partie et les joueurs encore en vie.
max_playersLa limite de joueurs de l'arène.
winnerLe nom du vainqueur, ou « Personne » tant qu'il n'y en a pas.
scoreLe score du joueur.
alive_statusalive ou eliminated.
rankLe rang du joueur selon le score, ou -.
lives, turn et queueVies, 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
Objectifs1
Faits1
Artefacts5
Manifestes5
Définitions3

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.

Extensions associées​