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) sempre virada para o jogador, acima do canhão

Fluxo de Lançamento

Gere ou explore a área de pesquisa configurada no mundo de destino antes de usar o canhão. CannonRTP carrega chunks existentes sem gerar terreno; um raio por explorar pode ficar sem destinos.

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 verifica o cooldown de lançamento por jogador (runtime.launchCooldownSeconds, padrão de 30 segundos). O bloqueio vale para todos os canhões e não consome um destino da fila.
  4. Ele confirma que o canhão tem pelo menos um local de pouso pré-carregado na fila. (Canhões desativados, canhões em um mundo descarregado e canhões em um chunk descarregado nunca chegam a este ponto -- eles são totalmente excluídos do laço de tick, então não podem ser acionados de forma alguma.)
  5. Ele consome um local de pouso seguro pré-carregado da fila desse canhão.
  6. Ele dispara CannonRTPLaunchEvent (cancelável). Se um listener cancelar o evento, o destino retorna para a fila e nenhum cooldown é iniciado.
  7. 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.
  8. 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.
  9. Fase Teleporting (um único tick): o destino da fila é revalidado (coluna de terreno, integrações de proteção, listeners da API). Se ele continuar válido, o jogador é teleportado exatamente 50 blocos acima dele e Slow Falling é aplicado. A altura do airdrop nunca é limitada -- o validador de pouso já garante que o bloco de chegada fique abaixo da altura máxima do mundo, e um destino que deixa de ser válido cancela o lançamento e recupera o jogador.
  10. Fase Dropping: o jogador desce lentamente com um rastro de fumaça (LARGE_SMOKE + CAMPFIRE_SIGNAL_SMOKE).
  11. Fase Landing: iniciada assim que o jogador toca o chão. O Slow Falling é removido, uma rajada de impacto é exibida (onda de choque de nuvem, anel de chamas, transição de poeira) e CannonRTPLandingEvent é disparado. Se a queda ultrapassar sua duração máxima (slowFallingSeconds x 20 ticks), o CannonRTP recupera o jogador e nenhum evento de pouso é emitido.

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 (enquanto não estiver, o canhão para de pré-carregar e reporta Target world <name> is not loaded.)
  • o centro de busca é resolvido -- o searchCenter configurado, ou então a própria localização do canhão quando ele está no mundo de destino, ou então o spawn do mundo de destino
  • 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
  • o bloco de superfície logo abaixo do ponto de pouso é sólido e não é líquido
  • esse bloco de superfície não está na lista configurada de materiais de solo inseguros, e não é o teto de bedrock do Nether
  • o ponto de pouso está na altura mínima do mundo ou acima dela, e o bloco de chegada 51 blocos acima dele permanece abaixo da altura máxima do mundo
  • todos os blocos da coluna de airdrop de 52 blocos (do ponto de pouso até o bloco da cabeça na chegada) são ar ou atravessáveis
  • nenhum bloco dessa coluna está 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

No Nether, o CannonRTP rejeita o teto de bedrock e busca para baixo um chão de caverna exposto cuja coluna de airdrop completa seja segura. Isso permite destinos no Nether sem soltar o jogador acima do teto ou dentro de terreno sólido.

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

O estado interno de busca é um de exatamente três valores (READY, SEARCHING, EXHAUSTED); Disabled é decidido antes de ele ser consultado, e Charging / Maintaining são as duas representações de SEARCHING. Ready prevalece sobre Exhausted -- um canhão que ainda mantém sua reserva carregada aparece como Ready mesmo que sua última janela de busca tenha expirado.

Não existe um estado separado de "configuração inválida". Quando o targetWorld de um canhão não pode ser resolvido, o canhão mantém a etiqueta do seu estado de busca atual e a coluna $reason de /wc status passa a ser Target world <name> is not loaded. (A chave de mensagem statusLabels.invalid existe em messages.yml, mas nada a renderiza na build atual.)

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

  • Minecraft: o plugin.yml declara api-version: 1.21.4; a árvore de código atual é compilada contra a API do Spigot 26.2-R0.1-SNAPSHOT
  • 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
  • antes do teletransporte do airdrop, o destino da fila é reverificado contra terreno, integrações de proteção e listeners da API; se ele se tornou inseguro, o lançamento recupera o jogador em vez de usar coordenadas desatualizadas
  • a limpeza do lançamento remove apenas os efeitos de Levitação, Invisibilidade e Slow Falling que ainda pertencem ao CannonRTP, e restaura qualquer efeito anterior que ele tenha substituído temporariamente, em vez de apagar o estado mais recente de outro plugin
  • se um lançamento não puder continuar porque o mundo de destino foi descarregado, o CannonRTP recupera o jogador para o assento do canhão ou para o spawn de outro mundo carregado, e mantém o Slow Falling quando não há mundo seguro de recuperação disponível

Comece Aqui