Saltar para o conteúdo principal

CannonRTP (WorldCannon)

O CannonRTP é um plugin de teletransporte aleatório com vários canhões para servidores Minecraft. "WorldCannon" é o nome antigo, ainda usado nesta secção da wiki. O plugin regista-se no Bukkit como CannonRTP, é distribuído como CannonRTP.jar e é esse o nome apresentado a jogadores e administradores.

Nomes importantes:

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

Funcionalidades​

O CannonRTP permite vários canhões com destinos de aterragem aleatórios. Cada configuração de canhão pode ser colocada numa ou em várias posições do mundo. Cada posição deteta jogadores que entram no seu raio de ativação.

Cada canhão pode:

  • ser colocado várias vezes com /wc create e /wc place, usando a mesma configuração para todas as posições
  • detetar jogadores num raio de ativação próprio, predefinido como 1.75 blocos
  • pré-carregar e manter uma fila de destinos seguros num mundo configurado, incluindo destinos noutro mundo
  • rejeitar terreno inseguro, espaços bloqueados, áreas protegidas e posições fora da fronteira do mundo
  • exigir opcionalmente uma permissão adicional própria
  • lançar jogadores numa sequência cinematográfica de cinco fases
  • apresentar um canhão 3D animado do FreeMinecraftModels, escolhido por customModel ou por uma lista global de prioridades; sem FMM, usa partículas em órbita que mudam de cor
  • mostrar uma etiqueta de estado flutuante, virada para o observador, com os estados Pronto, A carregar, A repor ou Esgotado; um canhão desativado não cria etiqueta nem modelo e só aparece como Desativado em /wc list e /wc status

Início rápido​

  1. Coloque CannonRTP.jar em plugins/ e inicie o servidor.
  2. Execute /wc initialize no jogo e depois /wc setup para descarregar os pacotes de modelos dos canhões. As transferências exigem uma conta Nightbreak associada, e os modelos precisam do FreeMinecraftModels. Sem modelos, os canhões usam elementos visuais de partículas.
  3. Fique onde o canhão deve estar e execute /wc create spawn. O novo canhão leva os jogadores para o mundo em que se encontra.
  4. Opcional: execute /wc target spawn <world> para levar os jogadores para outro mundo carregado, ou /wc center spawn para pesquisar à volta da sua posição atual.
  5. Confirme que a área de pesquisa existe como terreno gerado (por predefinição, entre 500 e 5000 blocos do centro da pesquisa) e execute /wc status. O canhão lança jogadores assim que tiver pelo menos um destino verificado.

Sequência de lançamento​

Antes de usar um canhão, gere ou explore a área de pesquisa configurada no mundo de destino. O CannonRTP carrega chunks existentes sem gerar terreno. Uma área inexplorada pode, por isso, não fornecer destinos.

A sequência usa 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. Verifica a permissão opcional requiredPermission do canhão.
  3. Verifica o tempo de espera entre lançamentos do jogador, runtime.launchCooldownSeconds, predefinido como 30 segundos. Esta restrição abrange todos os canhões e não consome um destino da fila.
  4. Confirma que existe pelo menos um destino de aterragem pré-carregado na fila. Canhões desativados ou em mundos ou chunks descarregados são excluídos do ciclo de ticks e nunca chegam a esta verificação.
  5. Retira um destino seguro da fila desse canhão.
  6. Emite CannonRTPLaunchEvent, que pode ser cancelado. Se um listener o cancelar, o destino regressa à fila e não começa o tempo de espera.
  7. Fase de pesquisa, com 42 ticks por predefinição em launchWarmupTicks: o jogador recebe Levitação, o canhão executa a animação fire se tiver um modelo personalizado ativo e as coordenadas de pré-visualização mudam rapidamente no título e subtítulo. Com um modelo ativo, o jogador também recebe Invisibilidade para não interferir visualmente com a animação.
  8. Fase de disparo, com 45 ticks por predefinição em verticalBoostTicks: Levitação e Invisibilidade são removidas, toca o som de descolagem, surge uma explosão de chamas, fumo e partículas de explosão, e verticalBoostVelocity é aplicada a cada tick. As coordenadas reais do destino são reveladas.
  9. Fase de teletransporte, com um único tick: o destino da fila é novamente validado quanto à coluna de terreno, integrações de proteção e listeners da API. Se continuar válido, o jogador é teleportado exatamente 50 blocos acima dele e recebe Queda lenta. A altura de chegada não é limitada artificialmente. O validador já garante que o bloco de chegada fica abaixo da altura máxima do mundo. Se o destino deixar de ser válido, o lançamento é cancelado e o jogador é recuperado.
  10. Fase de descida: o jogador desce lentamente com um rasto de fumo, LARGE_SMOKE e CAMPFIRE_SIGNAL_SMOKE.
  11. Fase de aterragem: começa quando o jogador está no chão e a sua velocidade vertical é inferior a 0.08 blocos por tick. O CannonRTP remove o seu próprio efeito de Queda lenta, apresenta um impacto com onda de nuvens, anel de chamas e transição de poeira, e emite CannonRTPLandingEvent. Se a descida ultrapassar a duração máxima de slowFallingSeconds x 20 ticks, o CannonRTP recupera o jogador e não emite o evento de aterragem.

Regras de segurança da aterragem​

Antes de aceitar uma posição na fila de pré-carregamento, o código verifica, por esta ordem:

  • se o mundo de destino está carregado; caso contrário, o canhão suspende o pré-carregamento e informa Target world <name> is not loaded.
  • se o centro de pesquisa pode ser resolvido: usa searchCenter, ou a posição do canhão se estiver no mundo de destino, ou o ponto de spawn desse mundo
  • se a posição candidata fica dentro da fronteira do mundo
  • se o chunk está carregado, carregando-o a pedido sem gerar terreno
  • se existe um bloco mais alto que não seja ar na coluna candidata
  • se o bloco de superfície imediatamente abaixo da aterragem é sólido e não líquido
  • se esse bloco não consta dos materiais de solo inseguros e não é o teto de bedrock do Nether
  • se a aterragem fica na altura mínima do mundo ou acima dela, e se o bloco de chegada 51 blocos acima permanece abaixo da altura máxima
  • se todos os blocos da coluna de descida de 52 blocos, desde a aterragem até ao bloco da cabeça na chegada, são ar ou atravessáveis
  • se nenhum bloco dessa coluna consta dos materiais inseguros para o corpo
  • se todas as integrações de proteção ativas permitem a posição
  • se nenhum listener de CannonRTPLocationValidationEvent rejeita a posição

No Nether, o CannonRTP rejeita o teto de bedrock e procura para baixo um chão de caverna exposto com uma coluna de descida completamente segura. Assim, permite destinos no Nether sem largar o jogador acima do teto ou dentro de terreno sólido.

As tentativas de pesquisa têm um limite global de uma por tick, 20 por segundo, distribuídas alternadamente entre os canhões ativos. Cada canhão tem o seu próprio contador de tentativas, searchTimeoutAttempts, predefinido como 100 e com mínimo de 10.

Estados dos canhões​

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

Estado apresentadoEstado internoSignificado
Desativado--O canhão está explicitamente desativado na configuração
A carregarSEARCHING, com fila vaziaAinda está a preparar o primeiro conjunto de destinos seguros
A reporSEARCHING, com fila não vaziaJá tem destinos, mas continua a repor os que foram consumidos
ProntoREADYTem destinos pré-carregados suficientes, pelo menos chargedLocationsPerCannon, para apresentar este estado
EsgotadoEXHAUSTEDEsgotou searchTimeoutAttempts sem completar a reserva

O estado interno de pesquisa só pode ser READY, SEARCHING ou EXHAUSTED. A desativação é verificada primeiro. A carregar e A repor são duas apresentações de SEARCHING. Ready tem prioridade sobre Exhausted: um canhão com a reserva necessária continua a aparecer como pronto mesmo que a última janela de pesquisa tenha esgotado o tempo.

Um canhão também aparece como Esgotado, sem analisar nenhum terreno, quando a integração de um plugin de proteção ativo não conseguiu carregar e failOpenOnProtectionErrors é false. Consulte Integrações de proteção.

Não existe um estado separado de configuração inválida. Se o mundo de destino ficar indisponível, os destinos desse mundo são descartados e a pesquisa regressa a SEARCHING. Uma fila vazia apresenta A carregar, e $reason em /wc status mostra Target world <name> is not loaded.. A pesquisa retoma quando o mundo de destino é carregado. A chave statusLabels.invalid existe em messages.yml, mas não é apresentada.

Um canhão pode lançar jogadores assim que tiver pelo menos um destino na fila. chargedLocationsPerCannon afeta apenas a apresentação do estado READY.

Requisitos de execução​

  • Minecraft: plugin.yml declara api-version: 1.21.4; o código atual é compilado contra a API Spigot 26.3-R0.1-SNAPSHOT.
  • Java: 21.
  • Servidor recomendado: Paper ou um fork compatível atual.
  • MagmaCore: 2.2.0 ou superior, como biblioteca partilhada incorporada no plugin por shading.
  • Dependência opcional: FreeMinecraftModels, para modelos 3D animados de canhões.
  • Métricas: o CannonRTP envia estatísticas de utilização anónimas para o bStats (identificador de plugin 34460). Para as desativar, defina enabled: false em plugins/bStats/config.yml, o que se aplica a todos os plugins do servidor que usam o bStats.

Recuperação e continuidade​

O CannonRTP mantém os elementos visuais e as filas consistentes durante os eventos do ciclo de vida dos mundos e chunks:

  • quando o chunk do canhão é descarregado, a etiqueta e o modelo desaparecem; reaparecem quando o chunk volta a carregar
  • quando o mundo do canhão é descarregado, o canhão fica suspenso e retoma se o mundo voltar a carregar
  • quando o FreeMinecraftModels é ativado, desativado ou termina um recarregamento de conteúdo numa versão com o respetivo evento de conclusão, os modelos antigos dos canhões são descartados e recriados a partir do registo atual de modelos; as instâncias de modelos removidas também são detetadas diretamente em versões antigas do FMM sem esse evento
  • antes do teletransporte para a descida, o destino volta a ser verificado quanto ao terreno, integrações de proteção e listeners da API; se deixar de ser seguro, o jogador é recuperado em vez de usar coordenadas desatualizadas
  • a limpeza do lançamento remove apenas os efeitos de Levitação, Invisibilidade e Queda lenta ainda pertencentes ao CannonRTP, restaurando os efeitos anteriores que substituiu temporariamente sem apagar alterações mais recentes de outro plugin
  • se o mundo de destino for descarregado e o lançamento não puder continuar, o jogador é recuperado para o assento do canhão ou para o spawn de outro mundo carregado; se não houver um mundo seguro para recuperação, mantém a Queda lenta
  • /wc reload, uma atualização do plugin sem reinício e todos os comandos que editam canhões (create, place, remove, delete, target, center) reconstroem todos os canhões: os lançamentos ativos são cancelados e o jogador é recuperado para o assento do canhão, os destinos em fila são descartados e pesquisados novamente, e os tempos de espera entre lançamentos são repostos
  • se um jogador se desligar a meio de um lançamento, o lançamento termina e o CannonRTP remove os efeitos que aplicou; o jogador não é teletransportado

Resolução de problemas​

  • Um canhão fica em A carregar ou passa a Esgotado. Execute /wc status e leia o motivo. As causas comuns são um mundo de destino descarregado, uma área de pesquisa que nunca foi gerada, superfícies que falham as regras de segurança da aterragem (a água é por predefinição um material inseguro, pelo que o oceano aberto nunca é aceite) e terrenos reclamados ou regiões que cobrem a área. /wc probe testa as verificações de proteção no local onde se encontra. Uma integração de proteção ativa que não conseguiu carregar impede todos os canhões de pesquisar; consulte Integrações de proteção.
  • Os jogadores entram num canhão e nada acontece. Verifique cannonrtp.use, o requiredPermission do canhão, se o canhão está ativado e o tempo de espera entre lançamentos (runtime.launchCooldownSeconds, 30 segundos por predefinição).
  • Antes de eliminar um canhão ou de mover um destino ativo, faça uma cópia de segurança do respetivo ficheiro em plugins/CannonRTP/cannons/.

Ao pedir ajuda, inclua o resultado de /wc status, as versões do CannonRTP e do servidor, o ficheiro de configuração do canhão afetado e o registo completo do servidor. O /logify envia o registo e devolve uma ligação.

Comece aqui​