Criando um plugin inútil de Minecraft... mas por um bom motivo!
Opa Bão?
Imagino que alguns de vocês já brincaram com a criação de plugins e mods de Minecraft hehe.
Bem, eu também, mas isso faz anos... então, eu decidi abrir um servidor local em paper mesmo e ver o que eu poderia fazer.
Atualmente estou usando Fedora como sistema operacional e explorando um pouco do podman.
Como eu queria que a criação de um plugin (que não faz nada) fosse relativamente simples, eu resolvi criar um contêiner onde eu possa brincar com bash enquanto produzo.
O começo foi literalmente isso, criar um contêiner no diretório.
sudo podman run --rm -it -v "/home/fabio/server/dev":/plugin:z -w /plugin maven:latest bash
A criação do projeto foi bem genérica também.
mvn archetype:generate -DgroupId=com.fabiosmuu.plugin -DartifactId=PluginDev -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Agora com o projeto maven criado, tive que ajustar as permissõe para o projeto, então optei por:
sudo chmod -R 777 "/home/fabio/server/dev"
A partir daqui que de fato se inicia a criação de um plugin!
Olhando na documentação do paper, pude ver que precisaria de uma pasta resources contendo o arquivo plugin.yml (isso ficaria literalmente em /src/main/resources)
Meu plugin.yml ficou assim
name: PluginDev
version: 1.0
main: com.fabiosmuu.plugin.App
api-version: 1.20
O projeto maven já vem com uma classe /src/main/java/App.java e foi ela que usei para o plugin, mas é obvio que quero mostrar quais as "mudanças" que fiz.
As mudanças na classe App, além de remover o comentário de Hello world, foi importar a JavaPlugin do bukkit e estendê-la na classe já que não estou usando IDE. E é claro, criar os métodos onEnable e onDisable .
Ficou assim a classe
package com.fabiosmuu.plugin;
import org.bukkit.plugin.java.JavaPlugin;
public class App extends JavaPlugin {
@Override
public void onEnable() {
getLogger().info("Plugin ativado!");
}
@Override
public void onDisable() {
getLogger().info("Plugin desativado!");
}
}
E falta somente uma parte que na minha opinião é a mais importante. A pom.xml.
O que eu fiz no meu pom.xml?
Bem, foi bem básico até, defini a codificação para UTF-8, puxei o repositório do paper no maven e tirei a dependência do junit colocando a do paper no lugar... e minha pom.xml ficou assim
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.fabiosmuu.plugin</groupId>
<artifactId>PluginDev</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>PluginDev</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<repositories>
<repository>
<id>papermc</id>
<url>https://repo.papermc.io/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.20.4-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Com o mínimo de esforço eu já estava pronto para rodar MEU PLUGIN QUE NÃO FAZ NADA! (ou quase 😅)
Faltava compilar, então eu simplesmente rodei dentro do contêiner o comandinho
mvn clean package
O que certamente deu erro, pois, eu não apaguei a pasta /src/test (já que não estou usando junit para testes automatizados), então apague, se for seguir o que fiz.
Agora com o projeto finalmente compilado, eu pude copiar para o servidor o plugin (que a propósito fica na pasta target) e ver no terminal [21:05:00 INFO]: [PluginDev] Plugin ativado!.
Conclusão
Eu sei... o plugin não faz nada além de dizer que foi ativado. Mas essa não era a ideia. A ideia era brincar com um processo que já conheço, mas por outro ângulo.
De todas as minhas experiências com Java e contêineres, resolvi juntar com a nostalgia de ter brincado com plugins de Minecraft anos atrás. Mas desta vez quis resgatar isso tudo, misturar com ferramentas que uso no dia a dia (como o Podman) e revisitar esse mundinho da forma mais minimalista possível — direto no terminal, sem IDE, sem atalhos visuais.
Foi um experimento rápido, divertido e nostálgico. Uma forma de sair do automático e usar o que já sei de um jeito diferente, com um projeto totalmente sem pressão, sem propósito definido, só pela diversão mesmo.
E ver no terminal um "[PluginDev] Plugin ativado!"
foi um baita “Hello World retrô”, confesso. 🧑💻