Como usar o NMS no Bukkit
Embora o Minecraft aceite vários plug-ins (que você pode usar para alterar sua experiência de jogo), alguns elementos do jogo são protegidos contra a manipulação de plug-ins. Net.Minecraft.Server (NMS) é um desses pacotes protegidos, pois contém código de servidor vital para o jogo. Este código vem diretamente dos desenvolvedores do Minecraft, Mojang, e não deve ser acessível aos jogadores.
Com o Bukkit, os jogadores podem criar uma camada de abstração em torno do código NMS. Isso permite que eles desenvolvam plug-ins que interagem com o código do servidor sem fazer alterações diretas na base de código essencial para o jogo. Pense nisso como uma janela que permite que você veja o código que deseja usar em seu plug-in, mas também atua como uma barreira que o impede de alterar o código diretamente.
Vamos explorar como usar o Bukkit com o NMS do Minecraft.
Antes de começar – o que você precisa saber sobre o Bukkit
Bukkit é uma API que permite criar e usar plug-ins que alteram a forma como você experimenta o aspecto multijogador do Minecraft. Pelo menos, foi. A última versão do Bukkit foi lançada em 2016 e, desde então, foi descontinuada para dar lugar a uma API diferente, chamada Spigot. Embora funcione de forma semelhante ao Bukkit, oferece melhor desempenho do servidor.
Portanto, usar o Bukkit para seus plug-ins exige que você jogue uma versão desatualizada do Minecraft e aceite o fato de que o Bukkit não é tão bom quanto sua API substituta. Supondo que você esteja feliz em aceitar esses sacrifícios, aqui estão as únicas coisas que você precisa:
- Java Development Kit (JDK) 7 ou superior, com a maioria recomendando o JDK 8.
Com isso, você está pronto para criar alguns plugins.
Como criar plug-ins Bukkit para Minecraft
Antes de começar a usar o Bukkit para acessar o NMS do Minecraft, você precisa adicionar a API como uma dependência, definir uma classe principal que permita ao Bukkit interagir com o plug-in que você criou e fornecer ao Bukkit as informações necessárias para carregar seu plug-in no jogo. Cada etapa requer codificação, com os exemplos a seguir vindos do Tutorial RIP .
Etapa 1 – Adicionar o Bukkit como uma dependência
No passado, você poderia adicionar o Bukkit como uma dependência no Minecraft baixando o arquivo Bukkit.jar do Bukkit Repository e adicionando-o ao classpath do seu projeto. Essa opção não está mais disponível porque o Repositório não está mais acessível.
Felizmente, há um método alternativo que faz uso do arquivo pom.xml do seu jogo. Abra o arquivo e adicione as seguintes linhas:
<repositories>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
<!--Bukkit API-->
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>{VERSION}</version>
<scope>provided</scope>
</dependency>
</dependencies>
Passo 2 – Crie a classe principal do seu plugin
Seu plug-in precisa ser capaz de criar uma única instância de sua classe principal, que é usada para estender “JavaPlugin” para que reconheça e permita que você use o plug-in quando estiver no jogo. Pense nessa classe principal como a porta pela qual o Bukkit pode entrar para carregar e manipular o plug-in. A maioria dá à classe principal do plug-in o mesmo nome do próprio plug-in, facilitando a referência à classe principal ao codificar.
O seguinte código de exemplo do Tutorial RIP oferece um exemplo de uma classe principal para um plug-in chamado “MyPlugin:”
package com.example.myplugin; //{$TopLevelDomain}.{$Domain}.{$PluginName};
import org.bukkit.plugin.java.JavaPlugin;
public final class MyPlugin extends JavaPlugin {
@Override
public void onEnable() {
//Called when the plugin is enabled
getLogger().info("onEnable has been invoked!");
}
@Override
public void onDisable() {
//Called when the plugin is disabled
getLogger().info("onDisable has been invoked!");
}
}
Acessando seu plugin de outra classe
Você pode querer acessar seu plug-in por meio de uma classe diferente da classe principal criada para ele, o que pode ser útil para acessar vários plug-ins em um único jogo do Minecraft.
Para fazer isso, você precisa primeiro armazenar uma instância da classe principal que você criou usando o Bukkit para que outras classes possam acessá-la. Novamente, o código de exemplo a seguir vem do Tutorial RIP e usa o nome de classe “MyPlugin”:
public class MyPlugin extends JavaPlugin {
private static MyPlugin instance; //Effectively final variable containing your plugin's instance
public MyPlugin(){
if(MyPlugin.instance! = null) { //Unnecessary check but ensures your plugin is only initialized once.
throw new Error("Plugin already initialized!");
}
MyPlugin.instance = this; //A plugin's constructor should only be called once
}
public static MyPlugin getInstance(){ //Get's your plugin's instance
return instance;
}
//your other code...
}
Depois de instalar a instância, você pode acessar sua classe principal (criada via Bukkit) usando o comando “getInstance()”. Aqui está um exemplo disso usando a classe principal “MyPlugin” do Tutorial RIP:
public class MyOtherClass {
public void doSomethingWithMainClass(){
MyPlugin.getInstance().getLogger().info("We just used MyPlugin");
}
}
Passo 3 – Crie seu arquivo plugin.yml
Um arquivo plugin.yml contém informações vitais sobre seu plugin, o que significa que serve como arquivo de configuração básica do plugin. Sem esse arquivo, o Bukkit não terá as informações de que precisa para carregar o plug-in no Minecraft, o que pode fazer com que o plug-in não seja carregado e o jogo provavelmente trave.
Este arquivo deve conter os seguintes detalhes:
- Nome – Este é o nome que você deu ao seu plugin (ou seja, “MyPlugin” do Tutorial RIP) e ele será exibido nas mensagens de log e na sua lista de plugins.
- Versão – Use este campo para denotar o histórico da versão do plug-in, começando com 1.0.0 e subindo à medida que você altera ou edita o plug-in.
- Main – Contém o nome da classe principal do plugin, que estende “JavaPlugin”, permitindo que o Bukkit entre no plugin. No exemplo do Tutorial RIP, esse nome seria “package com.example.myplugin,” que você pode ver no código da classe principal acima.
- Descrição – Uma descrição básica do que seu plugin faz.
- Autor – Você pode ter um único autor ou vários autores, sendo o último indicado entre colchetes e vírgulas da seguinte forma – [Autor1, Autor2, Autor3].
- Contribuidores – Você usará esta seção para anotar qualquer pessoa que contribuiu para o seu plugin, com a formatação sendo a mesma da seção “Autores”.
- Site – Se você tem um site para plugar ou deseja vincular as pessoas à página do plug-in ou ao repositório GitHub, insira a URL aqui.
- API-Version – Digite a versão da API do Bukkit que você usa aqui. Se você não inserir uma versão da API, o Minecraft assumirá que está carregando um plug-in herdado. O plug-in ainda pode funcionar, embora você veja um aviso sobre ser uma versão herdada impressa em seu console após o carregamento.
Veja a seguir um exemplo de arquivo plugin.yml com base nas convenções de nomenclatura usadas no código do Tutorial RIP usado neste artigo:
name: MyPlugin
version: 1.0.0
main: package com.example.myplugin
description: A test plugin for Minecraft
author: RIP Tutorial
website: https://riptutorial.com/bukkit
api-version: 1.17
O Bukkit é adequado para acessar e usar o NMS?
Com isso, você criou uma dependência do Bukkit, construiu uma classe principal para servir como porta do Bukkit para o plug-in e tem um arquivo plugin.yml que o Bukkit pode usar para ver o que o plug-in faz. No entanto, você pode não querer fazer isso, pois o Bukkit está tão desatualizado que você precisará executar uma versão muito antiga do Minecraft para usá-lo com eficácia. A maioria já mudou para o Sprigot, que reflete a maior parte do que o Bukkit fez, oferecendo melhor desempenho.
Se você ainda deseja usar o Bukkit para acessar plug-ins, por que o escolheu antes das APIs mais modernas? Que tipos de plug-ins você usa para aprimorar sua experiência no Minecraft? Conte-nos tudo sobre isso na seção de comentários abaixo.
Deixe um comentário