Criar um plugin de Minecraft sem programar
Num servidor de Minecraft, tudo o que vai além do jogo base passa por um plugin, e um plugin escreve-se em Java. É o muro contra o qual esbarra a maioria de quem gere um servidor: sabem exatamente o que querem, e o único caminho passa por uma linguagem, um projeto para compilar e uma API para aprender. Esta página explica o que se pode fazer sem isso, e sobretudo onde estão os limites.
O muro, e as três formas conhecidas de o contornar
Antes do NimBlock, quem não programa tem três opções, e cada uma tem um limite nítido que vale a pena conhecer antes de nos comprometermos com ela.
- Os blocos de comando. Vivem no mundo, num local preciso, e são acionados por redstone ou por um relógio. Não sabem reagir a um evento do servidor, e muito menos impedi-lo.
- Os datapacks. Mantêm-se dentro do quadro vanilla: funções, feitos, tabelas de despojos. Sem comando verdadeiro, sem interceção do chat, sem cancelamento de ações. Em troca, funcionam num servidor vanilla, sem Paper.
- Skript. Muito mais poderoso do que os dois anteriores, e mais poderoso do que o NimBlock. É uma verdadeira linguagem, logo uma sintaxe para aprender e erros para decifrar.
Estes três existem há muito tempo e não têm nada de ultrapassado. O que faltava era o patamar entre o bloco de comando e a linguagem.
Uma regra, numa frase
Toda a gramática do NimBlock cabe numa frase: quando isto acontece, se estas condições se verificarem, então faz aquilo. Um plugin é uma lista de regras, uma regra é um gatilho, algumas condições e algumas ações. Não há mais nada a aprender, e isso é deliberado: uma gramática que cabe numa frase também cabe na cabeça.
No editor, são blocos que encaixam uns nos outros: um bloco que não pode ir para um determinado sítio não encaixa lá. E o que o editor deixa passar, o validador apanha: uma spec é aceite ou recusada por inteiro, nunca a meio. Um plugin de proteção sem a sua regra de proteção não se notaria em jogo, e é exatamente esse tipo de falha que se quer evitar.
O que já é possível fazer
9 gatilhos, 8 condições, 14 ações. A lista exata, atualizada e com o detalhe de cada parâmetro, está na página de gramática: é gerada a partir do catálogo, por isso nunca mente. Em resumo, o que permitem:
- Reagir ao que acontece: uma entrada, uma saída, uma mensagem no chat, uma morte, um bloco partido ou colocado, um comando que inventas, ou simplesmente a cada N segundos.
- Filtrar por uma permissão, o estatuto de operador, o mundo, os pontos de vida, o conteúdo de um texto, uma comparação de números, ou uma probabilidade.
- Agir: mensagens, títulos grandes, sons, objetos, efeitos, curas, teletransportes, anúncios para todo o servidor, execução de um comando de consola, e cancelamento do evento que acabou de ocorrer. É esta última capacidade que transforma a lista em proteções reais.
O que isto não substitui
Uma página que promete tudo não serve ninguém. O que o NimBlock não faz:
- Sem novas mecânicas de jogo. Um novo tipo de bloco, uma entidade inédita, uma interface de inventário à medida: isso é Java, e vai continuar a ser.
- Sem variáveis nem ciclos. Uma regra reage, não calcula. Se a tua ideia exige guardar um estado complexo entre dois eventos, estás para lá desta gramática.
- Sem plugins de terceiros. O NimBlock executa as tuas specs, não carrega um .jar descarregado de outro lado.
- Um novo comando espera pelo próximo arranque. O resto aplica-se a quente, sem cortar o servidor, mas o Minecraft regista os seus comandos no arranque: isso é indicado no painel no momento em que acontece, em vez de ser descoberto em jogo.
Onde o plugin corre
Em lado nenhum há Java gerado e depois compilado. O servidor carrega um motor escrito uma vez para todos, e esse motor lê a tua spec. É isso que faz com que um plugin composto aqui não tenha dívida técnica: quando o Minecraft muda, é o motor que se adapta, uma vez, e não cada um dos plugins escritos com ele.
Num servidor NimBlock, a instalação demora um clique e o plugin chega sem cortar o jogo. O motor, esse, vai ser publicado nos catálogos de plugins, para que a mesma spec funcione num servidor que não está alojado aqui.
Perguntas frequentes
- É mesmo possível criar um plugin de Minecraft sem saber programar?
- Sim, com uma condição: compões regras dentro de uma gramática definida, não escreves um programa qualquer. Uma regra diz «quando isto acontece, se estas condições se verificarem, então faz aquilo». Quase tudo o que um servidor entre amigos pede cabe nesta forma: mensagens de boas-vindas, recompensas, proteções, anúncios, comandos personalizados. O que não cabe é o que exige inventar uma mecânica de jogo inteira, e aí já é preciso Java.
- Qual é a diferença em relação aos blocos de comando?
- Os blocos de comando vivem no mundo, num local preciso, e são acionados por redstone ou por um relógio. Um plugin é acionado por um evento do servidor: um jogador que entra, um bloco partido, uma mensagem no chat. O que os blocos de comando não conseguem fazer é reagir ao que acontece, e sobretudo impedir que aconteça. Uma regra do NimBlock pode cancelar o evento que acabou de ocorrer.
- E em relação a um datapack?
- Um datapack mantém-se dentro do quadro do jogo vanilla: funções, feitos, tabelas de despojos. Não pode adicionar um comando verdadeiro, nem intercetar o chat, nem cancelar uma ação. Um plugin Paper consegue, porque corre dentro do servidor, não nos dados do mundo. Em troca, um datapack funciona num servidor vanilla, e um plugin exige Paper ou Spigot.
- E em relação ao Skript?
- O Skript é o antecessor do género e é mais poderoso, sem comparação possível: é uma verdadeira linguagem, com variáveis, ciclos e uma enorme biblioteca de extensões. Mas também é uma linguagem, logo uma sintaxe para aprender, erros para decifrar, e um ficheiro que não diz onde falhou. O NimBlock faz muito menos, mas recusa uma regra inválida antes de a guardar e mostra-te o ponto exato do problema no bloco em causa. Se te sentes à vontade com o Skript, fica no Skript.
- O plugin é compilado em Java nalgum sítio?
- Não, e essa é a escolha central do produto. A tua spec continua a ser um ficheiro JSON, e o servidor carrega um motor escrito uma vez para todos, que a lê e a executa. Nada é gerado, nada é compilado. Consequência prática: uma nova versão do Minecraft paga-se uma vez nesse motor, não em cada um dos plugins escritos com ele.
- É possível levar o plugin para um servidor que não está alojado no NimBlock?
- Está previsto, e o motor que lê as specs vai ser publicado nos catálogos de plugins. Uma spec é um ficheiro JSON normal: o motor lê-o a partir da pasta de plugins do servidor. Ainda não está disponível no momento em que esta página é escrita.
Compõe a tua primeira regra, e vê-a a funcionar num servidor que já existe.
Gratuito durante a beta · um servidor de 1 GB por conta