Executando verificação de segurança...
1

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. 🧑‍💻

Carregando publicação patrocinada...
1

Cara, que massa esse experimento! 👏
Juntar nostalgia com ferramentas atuais como Podman e Maven no Fedora foi genial — é tipo um “Hello World” cheio de camadas técnicas e afetivas haha.
E esse lance de fazer tudo no terminal, sem IDE, deu um charme retrô que combina muito com a proposta.
Projetos assim, “inúteis por um bom motivo”, são os que mais nos ensinam e nos divertem! 😄