Pular para o conteúdo principal

CannonRTP (WorldCannon)

O CannonRTP é um plugin de teletransporte aleatório com múltiplos canhões para servidores de Minecraft. "WorldCannon" é um nome mais antigo / da seção da wiki; o plugin é registrado como CannonRTP no Bukkit, é distribuído como CannonRTP.jar, e é esse o nome que jogadores e administradores veem.

Detalhes importantes de nomenclatura:

  • Nome do plugin: CannonRTP
  • Comando raiz: /cannonrtp
  • Aliases: /crtp, /wc
  • Permissões: cannonrtp.admin, cannonrtp.use
  • Pasta de configuração: plugins/CannonRTP/

O Que Ele Faz

O CannonRTP é um sistema de pouso aleatório com múltiplos canhões, e não apenas um único lançador fixo. Cada canhão configurado pode ser posicionado em um ou vários locais do mundo, e cada posicionamento monitora os jogadores que entram no seu raio de ativação.

Cada canhão pode:

  • ser posicionado várias vezes via /wc create e /wc place -- uma única configuração de canhão controla todas as instâncias
  • monitorar a entrada de jogadores em um raio de ativação por canhão (padrão de 1.75 blocos)
  • pré-carregar e manter uma fila de locais de pouso seguros em um mundo de destino configurado (mira entre mundos é suportada)
  • rejeitar terrenos inseguros, espaços bloqueados, áreas protegidas e locais fora do limite do mundo
  • exigir opcionalmente uma permissão adicional por canhão
  • lançar jogadores através de uma sequência cinemática de cinco fases
  • exibir um canhão 3D animado do FreeMinecraftModels (customModel por canhão ou via lista de prioridade global); recorre a partículas em órbita com mudança de cor quando o FMM não está instalado
  • mostrar uma etiqueta flutuante de status (Ready / Charging / Maintaining / Exhausted / Disabled / Invalid) sempre virada para o jogador, acima do canhão

Fluxo de Lançamento

A sequência de lançamento é controlada por uma máquina de estados de cinco fases (SEARCHING -> FIRING -> TELEPORTING -> DROPPING -> LANDING). Quando um jogador entra no raio de ativação de um canhão elegível:

  1. O CannonRTP verifica cannonrtp.use.
  2. Ele verifica o requiredPermission opcional do canhão.
  3. Ele confirma que o canhão está ativado, possui configuração válida e tem pelo menos um local de pouso pré-carregado na fila.
  4. Ele consome um local de pouso seguro pré-carregado da fila desse canhão.
  5. Ele dispara CannonRTPLaunchEvent (cancelável). Se um listener cancelar o evento, o destino retorna para a fila e o canhão volta ao comportamento normal.
  6. Fase Searching (padrão de 42 ticks, configurável via launchWarmupTicks): o jogador recebe Levitação, o canhão executa sua animação fire caso um modelo customizado esteja ativo, e prévias de coordenadas aleatórias piscam no título/subtítulo. Enquanto um modelo está ativo, o jogador também recebe Invisibilidade para que a animação fique nítida.
  7. Fase Firing (padrão de 45 ticks via verticalBoostTicks): Levitação/Invisibilidade são removidas, o som de decolagem toca, uma rajada de fogo+fumaça+explosão é gerada, e verticalBoostVelocity é aplicada a cada tick. As coordenadas reais do destino são reveladas.
  8. Fase Teleporting (um único tick): o jogador é teleportado 50 blocos acima do destino (limitado à altura máxima do mundo) e Slow Falling é aplicado.
  9. Fase Dropping: o jogador desce lentamente com um rastro de fumaça (LARGE_SMOKE + CAMPFIRE_SIGNAL_SMOKE).
  10. Fase Landing: o Slow Falling é removido antes do tempo quando o jogador toca o chão (ou quando a duração máxima da queda expira) e uma rajada de impacto é exibida (onda de choque de nuvem, anel de chamas, transição de poeira). CannonRTPLandingEvent é disparado.

Regras de Segurança do Pouso

Antes de uma localização ser aceita na fila de pré-carregamento, o código atual verifica, nesta ordem:

  • o mundo de destino está carregado
  • o centro de busca é válido
  • o candidato está dentro do limite do mundo
  • o chunk do candidato está carregado (carregado sob demanda, sem gerar terreno)
  • existe um bloco mais alto que não é ar na coluna do candidato
  • os espaços dos pés e da cabeça acima desse bloco são atravessáveis
  • o bloco da superfície é sólido e não é líquido
  • o bloco da superfície não está na lista configurada de materiais de solo inseguros
  • os blocos dos pés e da cabeça não estão na lista configurada de materiais corporais inseguros
  • todas as integrações ativas com plugins de proteção permitem o local
  • nenhum listener de CannonRTPLocationValidationEvent veta o candidato

As tentativas de busca são globalmente limitadas a uma por tick (20/segundo), distribuídas de forma justa entre todos os canhões ativos via round-robin. Cada canhão tem seu próprio contador de timeout (searchTimeoutAttempts, padrão 100, mínimo 10).

Estados do Canhão

Cada canhão tem um estado interno visível via /wc status ou /wc list:

ExibiçãoEstado InternoSignificado
Disabled--O canhão está explicitamente desativado em sua configuração
ChargingSEARCHING (fila vazia)Ainda pré-carregando seu primeiro lote de locais seguros
MaintainingSEARCHING (fila não vazia)Possui alguns locais, mas ainda está reabastecendo as vagas consumidas
ReadyREADYPossui locais pré-carregados suficientes (>= chargedLocationsPerCannon) para lançar jogadores
ExhaustedEXHAUSTEDEsgotou searchTimeoutAttempts sem completar a reserva
InvalidINVALID_CONFIGURATIONErro de configuração (ex.: mundo de destino não carregado)

Um canhão lançará jogadores assim que tiver pelo menos um destino na fila. O limite chargedLocationsPerCannon afeta apenas a etiqueta visual READY.

Expectativas de Runtime

  • API do Minecraft: 1.21.4 (testado até 1.21.11)
  • Java: 21
  • Software de servidor recomendado: Paper ou um fork compatível atual
  • MagmaCore: 2.2.0 ou mais recente (biblioteca compartilhada, embutida no plugin via shade)
  • Dependência opcional: FreeMinecraftModels (para modelos 3D animados de canhão)

Resiliência

O CannonRTP mantém seus visuais e filas consistentes entre eventos de ciclo de vida de mundos e chunks:

  • quando o chunk de um canhão é descarregado, sua etiqueta e modelo são removidos; eles reaparecem quando o chunk é recarregado
  • quando o mundo de um canhão é descarregado, o canhão é suspenso; ele volta a operar se o mundo for carregado novamente
  • quando o FreeMinecraftModels é ativado ou desativado durante a sessão, o cache de modelos é invalidado e os visuais são atualizados no próximo tick

Comece Aqui