CannonRTP (WorldCannon)
CannonRTP es un plugin de teletransporte aleatorio multi-cañón para servidores de Minecraft. "WorldCannon" es un nombre antiguo / de sección de la wiki; el plugin se registra como CannonRTP en Bukkit, se distribuye como CannonRTP.jar, y ese es el nombre que ven los jugadores y administradores.
Detalles importantes de nomenclatura:
- Nombre del plugin:
CannonRTP - Comando raíz:
/cannonrtp - Alias:
/crtp,/wc - Permisos:
cannonrtp.admin,cannonrtp.use - Carpeta de configuración:
plugins/CannonRTP/
Qué Hace
CannonRTP es un sistema de aterrizaje aleatorio multi-cañón en lugar de un único lanzador fijo. Cada cañón configurado puede colocarse en una o varias ubicaciones del mundo, y cada colocación vigila si los jugadores entran en su radio de activación.
Cada cañón puede:
- colocarse varias veces mediante
/wc createy/wc place-- una sola configuración de cañón controla todas sus colocaciones - detectar jugadores que entran en un radio de activación específico del cañón (por defecto 1.75 bloques)
- precargar y mantener una cola de ubicaciones de aterrizaje seguras en un mundo objetivo configurado (se admite el objetivo en otro mundo)
- rechazar terreno inseguro, espacios bloqueados, tierra protegida y ubicaciones fuera del borde del mundo
- opcionalmente requerir un permiso adicional por cañón
- lanzar jugadores a través de una secuencia cinemática de cinco fases
- mostrar un cañón 3D animado de FreeMinecraftModels (
customModelpor cañón o mediante una lista global de prioridad); recurre a partículas en órbita con cambio de color cuando FMM no está instalado - mostrar una etiqueta flotante de estado tipo billboard sobre el cañón (Listo / Cargando / Manteniendo / Agotado / Desactivado / Inválido)
Flujo de Lanzamiento
La secuencia de lanzamiento se rige por una máquina de estados de cinco fases (SEARCHING -> FIRING -> TELEPORTING -> DROPPING -> LANDING). Cuando un jugador camina hacia el radio de activación de un cañón elegible:
- CannonRTP verifica
cannonrtp.use. - Verifica el
requiredPermissionopcional del cañón. - Verifica que el cañón esté habilitado, tenga una configuración válida y tenga al menos una ubicación de aterrizaje precargada en la cola.
- Consume una ubicación de aterrizaje segura precargada de la cola de ese cañón.
- Dispara
CannonRTPLaunchEvent(cancelable). Si un listener lo cancela, el destino se devuelve a la cola y el cañón reanuda su comportamiento normal. - Fase de búsqueda (por defecto 42 ticks, configurable mediante
launchWarmupTicks): el jugador recibe Levitación, el cañón reproduce su animaciónfiresi hay un modelo personalizado activo y aparecen vistas previas de coordenadas aleatorias parpadeando en el título/subtítulo. Mientras un modelo está activo, el jugador también recibe Invisibilidad para que la animación se vea limpia. - Fase de disparo (por defecto 45 ticks mediante
verticalBoostTicks): se eliminan Levitación/Invisibilidad, se reproduce el sonido de despegue, aparece una ráfaga de llamas+humo+explosión y se aplicaverticalBoostVelocityen cada tick. Se revelan las verdaderas coordenadas del destino. - Fase de teletransporte (un solo tick): el jugador es teletransportado 50 bloques sobre el destino (limitado a la altura máxima del mundo) y se aplica Caída Lenta.
- Fase de caída: el jugador desciende dejando un rastro de humo (
LARGE_SMOKE+CAMPFIRE_SIGNAL_SMOKE). - Fase de aterrizaje: la Caída Lenta se elimina anticipadamente cuando el jugador toca el suelo (o cuando expira la duración máxima de caída) y se reproduce una ráfaga de impacto (onda de choque de nube, anillo de llamas, transición de polvo). Se dispara
CannonRTPLandingEvent.
Reglas de Seguridad de Aterrizaje
Antes de que una ubicación sea aceptada en la cola de precarga, el código actual verifica, en orden:
- el mundo objetivo está cargado
- el centro de búsqueda es válido
- el candidato está dentro del borde del mundo
- el chunk del candidato está cargado (se carga bajo demanda sin generar)
- existe un bloque más alto no-aire en la columna candidata
- los espacios de pies y cabeza sobre ese bloque son transitables
- el bloque de superficie es sólido y no líquido
- el bloque de superficie no está en la lista configurada de materiales de suelo inseguros
- los bloques de pies y cabeza no están en la lista configurada de materiales de cuerpo inseguros
- todas las integraciones de plugins de protección habilitadas permiten la ubicación
- ningún listener de
CannonRTPLocationValidationEventveta al candidato
Los intentos de búsqueda están globalmente limitados a uno por tick (20/seg), repartidos equitativamente entre todos los cañones activos mediante round-robin. Cada cañón tiene su propio contador de tiempo agotado (searchTimeoutAttempts, por defecto 100, mínimo 10).
Estados del Cañón
Cada cañón tiene un estado interno visible mediante /wc status o /wc list:
| Visualización | Estado Interno | Significado |
|---|---|---|
| Disabled | -- | El cañón está explícitamente desactivado en su configuración |
| Charging | SEARCHING (cola vacía) | Aún precargando su primer lote de ubicaciones seguras |
| Maintaining | SEARCHING (cola no vacía) | Tiene algunas ubicaciones pero aún está rellenando los espacios consumidos |
| Ready | READY | Tiene suficientes ubicaciones precargadas (>= chargedLocationsPerCannon) para lanzar jugadores |
| Exhausted | EXHAUSTED | Consumió todos los searchTimeoutAttempts sin completar la reserva |
| Invalid | INVALID_CONFIGURATION | Error de configuración (p. ej. el mundo objetivo no está cargado) |
Un cañón lanzará jugadores en cuanto tenga al menos un destino en cola. El umbral chargedLocationsPerCannon solo afecta la etiqueta visual READY.
Expectativas de Ejecución
- Minecraft API:
1.21.4(probado hasta1.21.11) - Java:
21 - Software de servidor recomendado: Paper o un fork compatible actual
- MagmaCore:
2.2.0o superior (biblioteca compartida, incrustada en el plugin) - Dependencia opcional: FreeMinecraftModels (para modelos 3D animados de cañón)
Resiliencia
CannonRTP mantiene sus visuales y colas consistentes a través de eventos de ciclo de vida de mundos y chunks:
- cuando el chunk de un cañón se descarga, su etiqueta y modelo se despawnean; vuelven a aparecer al recargarse el chunk
- cuando el mundo de un cañón se descarga, el cañón se suspende; se reactiva si el mundo se carga de nuevo
- cuando FreeMinecraftModels se activa o desactiva durante la sesión, la caché de modelos se invalida y los visuales se refrescan en el siguiente tick