Saltar al contenido principal

MiniGame

Framework de minijuegos: 26 modos de juego, arenas, menús de lobby, parkour, récords e integración con misiones.

Privadasv0.1.0Combate y mobs
RequiereTypeWriter0.9.0-beta-177 (BTC build)GUIQuestRegionMiniPlaceholdersopcional

Creada para la red BornToCraft. Esta extensión está documentada como referencia y no se distribuye.

Descripción general​

MiniGame es un único framework que ejecuta muchos tipos de minijuegos a partir de entradas de TypeWriter. Describes una arena en el panel web: el modo de juego, los puntos de aparición del lobby y de la partida, los límites de jugadores, los equipos, el kit, las rondas y los mensajes. Los jugadores se unen entonces mediante entradas de acción y menús. La extensión gestiona el lobby, la comprobación de jugadores listos, la cuenta atrás, la partida en sí, el podio y la limpieza.

Cada partida recorre la misma secuencia de fases: Lobby, Countdown (cuenta atrás), Playing (en juego), Ending (final), Cleanup (limpieza). Cada partida en curso posee un contexto que almacena sus jugadores, equipos, puntuaciones y estado, de modo que las rondas, los equipos y los scoreboards se comportan igual en todos los modos. Los inventarios se guardan antes de la partida y se restauran después. Los cambios sobre los jugadores usan una planificación segura por región, por lo que la extensión funciona en Paper y en Folia.

Los resultados se guardan en artefactos (victorias, puntuaciones, mejores tiempos, clasificaciones) y se exponen al resto de tu servidor mediante objetivos de misión, hechos, disparadores y placeholders. El parkour, que antes era una extensión independiente, es ahora uno de los modos de juego. Esta extensión se documenta a modo de referencia y se ejecuta en la versión BTC de TypeWriter.

Características​

  • 26 modos de juego: PvP, parkour y movimiento, supervivencia, estrategia, modos de fiesta y de arcade, todos seleccionados con el campo gameType de una arena.
  • Motor de fases: lobby, cuenta atrás, partida, final y limpieza, con comprobación de jugadores listos, mínimo de jugadores, entrada tardía y espectadores.
  • Equipos: NONE, SOLO, RED_BLUE o equipos personalizados con tus propios nombres, elegidos desde el menú del lobby o equilibrados automáticamente.
  • Rondas y potenciadores: rondas opcionales que reviven a los jugadores entre rondas y caídas de potenciadores temporizadas para los modos basados en reglas.
  • Parkour: puntos de inicio, checkpoints ordenados y puntos finales con partículas, acciones de fallo, temporizadores y récords personales y de arena.
  • Arenas dedicadas: entradas de configuración adicionales para parkour, Dé à Coudre y tiro con arco.
  • Menús: navegador de juegos, selección de arena, lobby, selección de equipo, estadísticas y menús de resultados.
  • Persistencia: victorias, derrotas, puntuaciones, mejores tiempos y tiempos máximos almacenados en artefactos y guardados de forma asíncrona.
  • Integración con misiones: un objetivo y un hecho de finalización, además de disparadores para el inicio de la partida, el final, la entrada, la eliminación, el inicio de ronda y los récords.
  • Scoreboard y mensajes: líneas de scoreboard configurables y mensajes de entrada, salida, eliminación y victoria con placeholders de la partida.

Instalación​

  1. Ejecuta la versión BTC de TypeWriter (BTC Core, Paper o Folia).
  2. Instala las extensiones de las que depende MiniGame: la extensión GUI de BTC (todos los menús la usan), Quest y Region.
  3. Coloca el JAR de MiniGame en plugins/Typewriter/extensions/ y reinicia el servidor.
  4. Instala MiniPlaceholders si quieres los placeholders <minigame_...> fuera del scoreboard. Se publican a través del puente MiniPlaceholders de BTC, no de PlaceholderAPI.
  5. Construye las arenas en el mundo, crea una región de protección allí donde una entrada la pida (por ejemplo, la piscina de una arena de Dé à Coudre) y configura después las entradas en el panel web.

Primeros pasos​

Este recorrido configura una arena de Spleef con estadísticas persistentes.

  1. En el panel web de TypeWriter, abre una página de manifiesto y añade un artefacto Wins statistics. Dale un artifactId, por ejemplo spleef_wins.
  2. En la misma página, añade una entrada Minigame Arena. Establece gameType en SPLEEF y después lobbySpawn, gameSpawn, spectatorSpawn y endTeleport con el selector de posición.
  3. Establece minPlayers y maxPlayers, autoStartCountdown (segundos antes de que empiece la partida) y maxGameDuration (segundos).
  4. Activa useRounds y establece maxRounds si quieres varias rondas (los jugadores reviven y se recolocan en gameSpawn en cada ronda). Añade objetos a kitItems y deja giveKit activado.
  5. Enlaza winStatArtifact con el artefacto del paso 1.
  6. Abre una página de secuencia. Añade una acción Open the minigame browser y actívala desde un diálogo de NPC, un objeto o un comando. O usa Join a minigame con arena establecido en tu arena para colocar al jugador directamente en el lobby.
  7. Publica, entra en la arena, haz clic en Ready (Listo) en el menú del lobby y espera a la cuenta atrás. Cuando termina la partida, se anuncia al ganador y se guardan las estadísticas.
Empezar con un solo jugador

El lobby solo inicia la cuenta atrás cuando al menos minPlayers jugadores han hecho clic en Ready. Establece minPlayers en 1 mientras pruebas a solas.

Cómo funciona​

  1. Lobby. Los jugadores esperan en lobbySpawn. La cuenta atrás empieza cuando el número de jugadores marcados como listos alcanza minPlayers, tras unos segundos. Solo es posible entrar tarde una vez pasado el lobby cuando allowLateJoin está activado.
  2. Cuenta atrás. Dura autoStartCountdown segundos con mensajes en el chat. Si los jugadores se van y el recuento baja del mínimo, la partida vuelve al lobby.
  3. En juego. Los jugadores son teletransportados a gameSpawn, se guarda su inventario y se entrega el kit. La fase termina como muy tarde tras maxGameDuration segundos. Se dispara onGameStart.
  4. Final. Se anuncian el ganador y los tres primeros. Esta fase dura aproximadamente una sexagésima parte de maxGameDuration, acotada entre 5 y 60 segundos.
  5. Limpieza. Se restauran los inventarios, el modo de juego y la salud, se escriben los resultados en los artefactos, se dispara onGameEnd y los jugadores vuelven a endTeleport.

Los jugadores eliminados se convierten en espectadores y se mueven a spectatorSpawn cuando allowSpectate está activado y hay un punto de aparición de espectadores definido.

Modos de juego​

El campo gameType de la arena acepta los 26 valores siguientes. Tres modos tienen su propio código. Los otros 23 están basados en reglas: comparten un único motor guiado por un modo de eliminación y una condición de victoria. Un modo basado en reglas te da las reglas, el lobby, las rondas y la puntuación. El contenido específico del nombre del juego (una bandera, oleadas de mobs, un suelo de lava que sube, bloques de TNT, dispensadores) no se genera: lo construyes en el mundo y lo conectas con kits, regiones y disparadores.

ModoCategoríaJugadores por defectoEliminaciónCondición de victoria
SumoPvP / Combate2-8CaídaÚltimo con vida
GladiatorPvP / Combate2-12MuerteÚltimo con vida, potenciadores cada 20 s
DuelsPvP / Combate2MuerteÚltimo con vida
KOTHPvP / Combate2-16Tiempo agotadoPrimero en puntuar, potenciadores
PaintballPvP / Combate2-16MuerteMayor puntuación
One in the ChamberPvP / Combate2-12MuerteMayor puntuación
ParkourParkour / Movimiento1Código dedicadoLlegar al punto final
Block PartyParkour / Movimiento2-16Suelo desaparecidoÚltimo con vida, hasta 5 rondas
TNT RunParkour / Movimiento2-16CaídaÚltimo con vida
Floor is LavaParkour / Movimiento2-16CaídaÚltimo con vida, hasta 3 rondas
Falling BlocksPvE / Supervivencia1-16CaídaSobrevivir 120 s
Wave SurvivalPvE / Supervivencia1-8MuerteSobrevivir 180 s, potenciadores
Zombie ApocalypsePvE / Supervivencia1-8MuerteSobrevivir 300 s, potenciadores
Dodge the ArrowsPvE / Supervivencia1-16MuerteÚltimo con vida
Defend the CorePvE / Supervivencia1-8MuerteÚltimo equipo con vida, 240 s
Capture the FlagEstrategia4-16MuertePrimero en puntuar, 300 s
InfectionEstrategia2-16MarcadoÚltimo con vida
SpleefEstrategia2-16Suelo desaparecidoÚltimo con vida, hasta 5 rondas
Sheep HuntEstrategia4-16MarcadoMás marcas, 180 s
TPP (Tag)Fiesta / Diversión2-16MarcadoÚltimo con vida
Freeze TagFiesta / Diversión2-16MarcadoÚltimo con vida
Hot PotatoFiesta / Diversión2-16Tiempo agotadoÚltimo con vida, 60 s
Dé à CoudreFiesta / Diversión2-16Código dedicadoÚltimo jugador o equipo con vida
Musical ChairsFiesta / Diversión2-16Tiempo agotadoÚltimo con vida, hasta 10 rondas
ArcheryReflejos / Arcade1-16Código dedicadoPrimero en alcanzar el número de objetivos, o mejor puntuación dentro del límite de tiempo
QuakeReflejos / Arcade2-16MuerteMayor puntuación

El mínimo por defecto solo se usa cuando el minPlayers de la arena no es superior a cero. El máximo procede siempre del maxPlayers de la arena.

Cómo deciden los modos basados en reglas​

  • Muerte (Killed): un solo golpe de otro jugador elimina a la víctima, sea cual sea el daño, y da un punto al atacante. Cuentan los tiradores de proyectiles.
  • Marcado (Tagged): un solo golpe de otro jugador elimina a la víctima y da un punto a quien la marcó. Los compañeros de equipo están protegidos cuando el fuego amigo está desactivado.
  • Caída (Falling): un jugador queda eliminado por debajo de diez bloques bajo gameSpawn.
  • Suelo desaparecido (Floor gone): un jugador queda eliminado cuando el bloque bajo sus pies es aire.
  • Tiempo agotado (Timeout): ningún temporizador elimina a un jugador por sí solo. Las rondas con duración simplemente terminan cuando se acaba el tiempo, y las puntuaciones o los supervivientes deciden al ganador.
  • Potenciadores: cuando powerUpEnabled está activado, cae un objeto potenciador aleatorio cada powerUpInterval segundos (al menos 5). Los ocho tipos son Speed, Jump, Invisibility, Heal, Shield, Explosive Snowball, Double Jump y Super Strength.
  • Rondas: con useRounds activado, los jugadores eliminados reviven y todos se recolocan en gameSpawn en cada ronda, hasta maxRounds. La extensión no reconstruye los bloques entre rondas: restaura tú mismo un suelo roto. onRoundStart se dispara en cada ronda.

Parkour​

El parkour es un modo en solitario con su propia entrada de configuración. Un Parkour Arena se enlaza con una Minigame Arena de tipo PARKOUR y enumera sus puntos de inicio, sus checkpoints y sus puntos finales. Un jugador inicia el recorrido situándose en un punto de inicio, debe pasar por los checkpoints en orden order creciente y llegar después a un punto final.

  • failAction decide qué hace un fallo: START teletransporta al inicio, LAST_CHECKPOINT al último checkpoint y QUIT abandona el recorrido.
  • timerType es NONE, GLOBAL (un time fijo en segundos) o CHECKPOINT (time más checkpointBonus segundos en cada checkpoint). Quedarse sin tiempo es un fallo.
  • Un recorrido también falla cuando el jugador cambia de mundo, cae más de 5 bloques por debajo del inicio o se aleja más de 10 bloques del último checkpoint.
  • Al completarlo, el tiempo se envía para los récords: mejor marca personal, clasificación de la arena y los disparadores onPersonalBest y onWorldRecord de la arena. La arena termina entonces porque ya no queda nadie corriendo.

Dé à Coudre​

Una Dé à Coudre Arena añade una región de piscina, una ubicación de salto y un punto de aparición. mode es SINGLE (los jugadores saltan por turnos), CONCURRENT (todos saltan a la vez) o TEAM. Los jugadores empiezan sin ninguna vida de reserva: un salto fallido elimina al jugador, y un salto perfecto (aterrizar entre cuatro bloques ya usados) otorga una vida. Los placeholders lives, turn y queue muestran el estado.

Archery​

Una Archery Arena enumera posiciones de objetivos y zonas de tiro. mode es MAX_TARGET (el primero en alcanzar targetsToWin impactos) o TIME_ATTACK (mejor puntuación dentro de timeLimitSeconds). La extensión coloca el targetBlock, lo sustituye por hitBlock cuando recibe un impacto y entrega el bowItem y el arrowItem.

Menús​

Los menús son menús de cofre de 54 ranuras renderizados por la extensión GUI. Permanecen vacíos hasta que añades una entrada de acción que los abra.

MenúSe abre conContenido
Navegador de juegosOpen the minigame browserUna fila con las seis categorías y después los juegos de la categoría seleccionada. Un juego solo está disponible cuando existe una arena de ese tipo.
Selección de arenaOpen arena selection o un clic en el navegadorLas arenas de un tipo de juego con su estado (libre, en espera, llena, en juego) y el número de jugadores. Al hacer clic se entra.
LobbyOpen the lobby menu, o automáticamente tras entrar desde los menúsLa descripción de la arena, la lista de jugadores con su estado de listo y su equipo, los botones Ready, Team, Start the game y Leave, además de tus botones personalizados.
Selección de equipoEl botón TeamElige un equipo o se te asigna uno al azar.
EstadísticasOpen statisticsVictorias, derrotas, partidas jugadas y un top 10, por arena o entre arenas. Necesita winStatArtifact en las arenas.
ResultadosOpen the results screenGanador, duración, número de jugadores y podio. Conecta la acción al disparador onGameEnd de la arena.

El botón Start the game solo se muestra a los jugadores con el permiso minigame.start. Una entrada Lobby Menu personaliza el título, oculta partes del menú y añade botones con un slot de 0 a 53 y una showCondition.

Persistencia y récords​

Los artefactos se cargan al arrancar y se escriben de forma asíncrona, por lo que guardar nunca bloquea un tick de la partida. Los datos almacenados se conservan por arena y por jugador.

  • Wins statistics almacena victorias, derrotas y partidas jugadas, y se guarda en la limpieza para cada jugador de la partida.
  • Scores statistics suma la puntuación de cada jugador en la limpieza cuando es superior a cero.
  • Minigame state se escribe en la limpieza con la fase final, el número de jugadores y el ganador.
  • Best time y Top times almacenan las mejores marcas personales y la clasificación; topTimesLimit establece cuántos tiempos se conservan. Hoy solo el parkour produce tiempos.

Reset records borra los récords de una arena para el jugador que la activa (PLAYER) o para todos (ARENA).

Integración con misiones​

El objetivo Complete minigames cuenta los recorridos cronometrados completados. Deja arena vacío para contar todas las arenas, o establécelo para contar una. Almacena su progreso en un hecho que proporcionas tú y puede disparar onComplete. El hecho Minigame completions cuenta las finalizaciones por separado para cada arena en la que está el jugador, por lo que un solo hecho puede servir a toda una red de arenas. Por ahora ambos reaccionan solo a las finalizaciones de parkour.

Permisos​

PermisoConcede
minigame.startMuestra y permite el botón Start the game en el menú del lobby.

No hay comandos: todo se gestiona mediante entradas y menús.

Placeholders​

Los placeholders de la partida están disponibles en dos formas. En los mensajes y en las líneas del scoreboard de una arena puedes usar tokens %name%. En el resto del servidor, el puente MiniPlaceholders de BTC publica los mismos valores como <minigame_name> para un jugador que está en una partida.

PlaceholderDevuelve
arena y arena_idEl nombre de la arena y el id de su entrada.
game_idEl id de la partida en curso.
phaseEl nombre de la fase actual.
players y aliveJugadores en la partida y jugadores que siguen con vida.
max_playersEl límite de jugadores de la arena.
winnerEl nombre del ganador, o "Personne" mientras no hay ninguno.
scoreLa puntuación del jugador.
alive_statusalive o eliminated.
rankLa posición del jugador por puntuación, o -.
lives, turn y queueVidas, saltador actual y orden de salto, solo para Dé à Coudre. - en los demás modos.
%player% (solo en mensajes)El nombre del jugador, en los mensajes de entrada, salida y eliminación.

Entradas​

24 entradas, generadas a partir del código fuente de la extensión.

Acciones9
Objetivos1
Hechos1
Artefactos5
Manifiestos5
Definiciones3

Resolución de problemas​

Los menús no hacen nada o están vacíos. Los menús necesitan la extensión GUI y una entrada de acción que los abra. Comprueba que existe una arena del gameType correcto: el navegador marca un tipo de juego como no disponible cuando ninguna arena lo usa.

La partida se queda en el lobby para siempre. La cuenta atrás solo empieza cuando al menos minPlayers jugadores han hecho clic en Ready, no simplemente cuando están presentes. Reduce minPlayers, o usa Force start a minigame para iniciar la cuenta atrás.

"Vous êtes déjà dans une partie". Un jugador solo puede estar en una partida. Usa antes Leave a minigame. Salir, desconectarse y terminar una partida liberan al jugador.

Nadie es eliminado nunca en los modos KILL o TAG. Prueba en modo supervivencia con un jugador que pueda recibir daño: en modo creativo los jugadores son invulnerables. Las eliminaciones en estos modos proceden del daño de otro jugador, incluidas las flechas y las bolas de nieve.

Las estadísticas, las muertes o el artefacto de estado siguen vacíos. Una arena solo escribe en los artefactos a los que hace referencia: establece winStatArtifact, scoreArtifact y stateArtifact y da un artifactId a cada artefacto. El código actual no registra las muertes ni los fallecimientos y muestran 0. Los mejores tiempos y los tiempos máximos solo los escribe el parkour.

Un recorrido de parkour falla continuamente. Cada checkpoint debe estar a 10 bloques como máximo del anterior y el recorrido falla 5 bloques por debajo del punto de inicio. Los checkpoints deben alcanzarse en orden order creciente, y el punto final solo cuenta después del último checkpoint. Con radius en 0, el jugador debe situarse en el bloque exacto.

Un jugador no puede salir de la zona del lobby. Mientras espera (fases Lobby y Countdown), lobbyRadius (por defecto 10 bloques alrededor de lobbySpawn) impide que los jugadores se alejen; no teletransporta, y un jugador que ya está fuera siempre puede volver. Ponlo a 0 para no limitar.

Un jugador es eliminado sin motivo aparente. region es la zona de juego de los modos basados en reglas: salir de ella durante una partida elimina al jugador (la región no se aplica en Archery, Parkour y Dé à Coudre, que tienen sus propias fases). En los modos en que el suelo desaparece (Spleef, Block Party), floorMaterial enumera los nombres de material de Bukkit que cuentan como suelo, separados por comas: un jugador es eliminado en cuanto el bloque bajo sus pies no es uno de ellos. Vacío significa que cualquier bloque que no sea aire es suelo, y los nombres desconocidos se ignoran con una advertencia en la consola. Los suelos no se generan a partir de floorMaterial; los construyes tú.

El mensaje de victoria no es el esperado. winMessage se anuncia al terminar la partida, con %winner% sustituido por el ganador.

Un jugador no puede unirse a la arena. Cuando cada lobby abierto de una arena contiene maxPlayers jugadores, la arena está llena y se rechaza la unión: no se abre una segunda partida en paralelo. La acción Join a minigame envía entonces su fullMessage.

Extensiones relacionadas​