Saltar al contenido principal

CannonRTP (WorldCannon)

CannonRTP es un plugin de teletransporte aleatorio con múltiples cañones para servidores de Minecraft. «WorldCannon» es su nombre antiguo y el de esta sección de la wiki; en Bukkit se registra como CannonRTP, se distribuye como CannonRTP.jar y ese es el nombre que ven jugadores y administradores.

Nombres principales:

  • Plugin: CannonRTP
  • Comando principal: /cannonrtp
  • Alias: /crtp, /wc
  • Permisos: cannonrtp.admin, cannonrtp.use
  • Carpeta de configuración: plugins/CannonRTP/

Qué hace​

CannonRTP ofrece un sistema de aterrizaje aleatorio con varios cañones. Cada cañón configurado puede colocarse en una o varias ubicaciones del mundo, y cada colocación detecta a los jugadores que entran en su radio de activación.

Cada cañón puede:

  • Colocarse varias veces mediante /wc create y /wc place; una misma configuración controla todas sus colocaciones.
  • Detectar jugadores dentro de un radio de activación propio, de 1.75 bloques por defecto.
  • Precargar y mantener una cola de ubicaciones de aterrizaje seguras en un mundo de destino configurado, que puede ser distinto del mundo del cañón.
  • Rechazar terreno inseguro, espacios bloqueados, terrenos protegidos y ubicaciones fuera del borde del mundo.
  • Exigir opcionalmente un permiso adicional propio.
  • Lanzar jugadores mediante una secuencia cinematográfica de cinco fases.
  • Mostrar un cañón 3D animado de FreeMinecraftModels, mediante customModel de cada cañón o una lista global de prioridad. Si FMM no está instalado, usa partículas orbitales que cambian de color.
  • Mostrar una etiqueta flotante de estado orientada al observador sobre el cañón: Listo, Cargando, Reponiendo o Agotado. Un cañón deshabilitado no crea etiqueta ni modelo y solo aparece como Deshabilitado en /wc list y /wc status.

Inicio rápido​

  1. Coloca CannonRTP.jar en plugins/ e inicia el servidor.
  2. Ejecuta /wc initialize dentro del juego y después /wc setup para descargar los paquetes de modelos de cañón. Las descargas necesitan una cuenta de Nightbreak vinculada, y los modelos necesitan FreeMinecraftModels. Sin modelos, los cañones usan efectos visuales de partículas.
  3. Colócate donde deba estar el cañón y ejecuta /wc create spawn. El cañón nuevo deja a los jugadores en el mundo en el que se encuentra.
  4. Opcional: ejecuta /wc target spawn <world> para dejar a los jugadores en otro mundo cargado, o /wc center spawn para buscar alrededor de tu posición actual.
  5. Asegúrate de que el área de búsqueda exista como terreno generado (de 500 a 5000 bloques del centro de búsqueda por defecto) y ejecuta /wc status. El cañón lanza a los jugadores en cuanto tiene al menos un destino comprobado.

Secuencia de lanzamiento​

Antes de usar un cañón, genera o explora el área de búsqueda configurada en el mundo de destino. CannonRTP carga chunks existentes sin generar terreno, por lo que un radio de búsqueda sin explorar puede no ofrecer destinos.

La secuencia usa una máquina de estados de cinco fases: SEARCHING -> FIRING -> TELEPORTING -> DROPPING -> LANDING. Cuando un jugador entra en el radio de un cañón apto para activarse:

  1. CannonRTP comprueba cannonrtp.use.
  2. Comprueba el requiredPermission opcional del cañón.
  3. Comprueba el tiempo de reutilización por jugador, runtime.launchCooldownSeconds, de 30 segundos por defecto. Se aplica a todos los cañones y no consume un destino de la cola.
  4. Comprueba que haya al menos una ubicación de aterrizaje precargada en la cola. Los cañones deshabilitados o situados en un mundo o chunk descargado nunca llegan a este punto: quedan excluidos del bucle de ticks y no pueden activarse.
  5. Consume una ubicación segura precargada de la cola de ese cañón.
  6. Emite CannonRTPLaunchEvent, que se puede cancelar. Si un listener lo cancela, el destino vuelve a la cola y no empieza el tiempo de reutilización.
  7. Búsqueda, 42 ticks por defecto, configurable mediante launchWarmupTicks: el jugador recibe Levitación, el cañón reproduce la animación fire si hay un modelo personalizado activo y el título y subtítulo muestran coordenadas aleatorias parpadeantes. Con un modelo activo, el jugador también recibe Invisibilidad para que la animación se vea correctamente.
  8. Disparo, 45 ticks por defecto mediante verticalBoostTicks: se eliminan Levitación e Invisibilidad, suena el despegue, aparece una ráfaga de llamas, humo y explosión, y se aplica verticalBoostVelocity en cada tick. Se revelan las coordenadas reales del destino.
  9. Teletransporte, un solo tick: se revalida el destino de la cola mediante la columna de terreno, las integraciones de protección y los listeners de la API. Si sigue siendo válido, el jugador se teletransporta exactamente 50 bloques por encima y recibe Caída lenta. La altura de llegada nunca se recorta: el validador ya garantiza que el bloque de llegada esté por debajo de la altura máxima del mundo. Si el destino deja de ser válido, se cancela el lanzamiento y se recupera al jugador.
  10. Caída: el jugador desciende con una estela de humo, LARGE_SMOKE + CAMPFIRE_SIGNAL_SMOKE.
  11. Aterrizaje: empieza cuando el jugador está en el suelo y su velocidad vertical es inferior a 0.08 bloques por tick. CannonRTP retira su propio efecto de Caída lenta, reproduce un efecto de impacto con onda de nubes, anillo de llamas y transición de polvo, y emite CannonRTPLandingEvent. Si la caída supera su duración máxima de slowFallingSeconds x 20 ticks, CannonRTP recupera al jugador y no emite el evento de aterrizaje.

Reglas de seguridad del aterrizaje​

Antes de aceptar una ubicación en la cola de precarga, el código actual comprueba, en este orden:

  • Que el mundo de destino esté cargado; mientras no lo esté, el cañón deja de precargar e informa Target world <name> is not loaded..
  • Que se resuelva el centro de búsqueda: primero searchCenter, después la ubicación del cañón si está en el mundo de destino y, en caso contrario, el punto de aparición de ese mundo.
  • Que el candidato esté dentro del borde del mundo.
  • Que su chunk esté cargado; se carga bajo demanda sin generar terreno.
  • Que exista un bloque superior que no sea aire en la columna candidata.
  • Que el bloque de superficie justo debajo del punto de aterrizaje sea sólido y no líquido.
  • Que esa superficie no esté en la lista de materiales de suelo inseguros ni sea el techo de roca madre del Nether.
  • Que el punto de aterrizaje esté a la altura mínima del mundo o por encima, y que el bloque de llegada 51 bloques más arriba quede por debajo de su altura máxima.
  • Que los 52 bloques de la columna de descenso, desde el punto de aterrizaje hasta el bloque de la cabeza en la llegada, sean aire o transitables.
  • Que ningún bloque de esa columna esté en la lista de materiales inseguros para el cuerpo.
  • Que todas las integraciones de protección habilitadas permitan la ubicación.
  • Que ningún listener de CannonRTPLocationValidationEvent rechace el candidato.

En el Nether, CannonRTP rechaza el techo de roca madre y busca hacia abajo un suelo de caverna expuesto cuya columna completa de descenso sea segura. Así admite destinos en el Nether sin dejar al jugador encima del techo ni hacerlo atravesar terreno sólido.

Los intentos de búsqueda tienen un límite global de uno por tick, 20 por segundo, repartidos de forma equitativa por turnos entre todos los cañones activos. Cada cañón tiene su propio contador límite, searchTimeoutAttempts, con valor predeterminado de 100 y mínimo de 10.

Estados del cañón​

Cada cañón tiene un estado interno visible mediante /wc status o /wc list:

Estado mostradoEstado internoSignificado
Deshabilitado--El cañón está deshabilitado explícitamente en su configuración
CargandoSEARCHING, cola vacíaSigue precargando su primer lote de ubicaciones seguras
ReponiendoSEARCHING, cola no vacíaTiene ubicaciones, pero sigue reponiendo los destinos consumidos
ListoREADYTiene suficientes ubicaciones precargadas, al menos chargedLocationsPerCannon, para lanzar jugadores
AgotadoEXHAUSTEDHa consumido searchTimeoutAttempts sin llenar la reserva

La búsqueda tiene exactamente tres estados internos: READY, SEARCHING y EXHAUSTED. Deshabilitado se determina antes de consultarlos, y Cargando y Reponiendo son las dos representaciones de SEARCHING. Listo tiene prioridad sobre Agotado: un cañón que conserve la reserva necesaria se muestra como listo aunque haya agotado el último periodo de búsqueda.

Un cañón también muestra Agotado sin muestrear terreno cuando la integración de un plugin de protección habilitado no ha podido cargarse y failOpenOnProtectionErrors es false. Consulta Integraciones de protección.

No hay un estado separado de configuración no válida. Si el mundo de destino deja de estar disponible, se descartan sus destinos y la búsqueda vuelve a SEARCHING. Una cola vacía muestra Cargando y la columna $reason de /wc status indica Target world <name> is not loaded.. La búsqueda se reanuda cuando se carga el mundo de destino. La clave statusLabels.invalid existe en messages.yml, pero no se muestra.

El cañón puede lanzar jugadores en cuanto tenga un destino en cola. El umbral chargedLocationsPerCannon solo afecta a la etiqueta visual READY.

Requisitos de ejecución​

  • Minecraft: plugin.yml declara api-version: 1.21.4; el código actual se compila contra la API de Spigot 26.3-R0.1-SNAPSHOT.
  • Java: 21.
  • Servidor recomendado: Paper o una variante actual compatible.
  • MagmaCore: 2.2.0 o posterior, biblioteca compartida incluida en el JAR del plugin.
  • Dependencia opcional: FreeMinecraftModels para los modelos 3D animados de cañones.
  • Métricas: CannonRTP envía estadísticas de uso anónimas a bStats (identificador de plugin 34460). Para no participar, establece enabled: false en plugins/bStats/config.yml, lo que afecta a todos los plugins del servidor que usan bStats.

Recuperación y ciclo de vida​

CannonRTP mantiene sus elementos visuales y colas coherentes durante los cambios de estado de mundos y chunks:

  • Al descargarse el chunk de un cañón, se eliminan su etiqueta y modelo; reaparecen al cargar el chunk.
  • Al descargarse el mundo del cañón, se suspende el cañón; se reactiva si el mundo vuelve a cargarse.
  • Cuando FreeMinecraftModels se habilita, se deshabilita o termina una recarga de contenido en una versión que emita el evento de recarga completada, se descartan los modelos antiguos de los cañones y se recrean desde el registro de modelos actual. Las instancias de modelos eliminadas también se detectan directamente en versiones antiguas de FMM sin ese evento.
  • Antes del teletransporte de descenso se vuelve a comprobar el destino con el terreno, las protecciones y los listeners de la API; si ya no es seguro, se recupera al jugador.
  • La limpieza del lanzamiento elimina únicamente los efectos de Levitación, Invisibilidad y Caída lenta que CannonRTP siga gestionando y restaura los efectos anteriores que haya sustituido temporalmente, sin borrar efectos más recientes de otro plugin.
  • Si el lanzamiento no puede continuar porque se descarga el mundo de destino, CannonRTP recupera al jugador en el asiento del cañón o en el punto de aparición de otro mundo cargado, y mantiene Caída lenta si no hay un mundo seguro al que devolverlo.
  • /wc reload, una actualización del plugin sin reinicio y todos los comandos de edición de cañones (create, place, remove, delete, target, center) reconstruyen todos los cañones: se cancelan los lanzamientos activos y se recupera a los jugadores en el asiento del cañón, se descartan los destinos en cola y se vuelven a buscar, y se restablecen los tiempos de reutilización de los lanzamientos.
  • Si un jugador se desconecta a mitad de un lanzamiento, este termina y CannonRTP elimina los efectos que aplicó; el jugador no se teletransporta.

Solución de problemas​

  • Un cañón se queda en Cargando o pasa a Agotado. Ejecuta /wc status y lee su motivo. Las causas habituales son un mundo de destino descargado, un área de búsqueda que nunca se generó, superficies que no cumplen las reglas de seguridad del aterrizaje (el agua es un material inseguro por defecto, así que el océano abierto nunca cumple los requisitos) y terrenos reclamados o regiones que cubren el área. /wc probe prueba las comprobaciones de protección donde estás. Una integración de protección habilitada que no pudo cargarse impide que todos los cañones busquen; consulta Integraciones de protección.
  • Los jugadores entran en un cañón y no pasa nada. Comprueba cannonrtp.use, el requiredPermission del cañón, si el cañón está habilitado y el tiempo de reutilización del lanzamiento (runtime.launchCooldownSeconds, 30 segundos por defecto).
  • Antes de eliminar un cañón o de mover un destino activo, haz una copia de seguridad de su archivo en plugins/CannonRTP/cannons/.

Cuando pidas ayuda, incluye la salida de /wc status, las versiones de CannonRTP y del servidor, el archivo de configuración del cañón afectado y el registro completo del servidor. /logify sube el registro y devuelve un enlace.

Empieza aquí​