Docs

Primeros pasos con la API

PulsePrison expone una API para que otros plugins lean y cambien datos, escuchen eventos y agreguen contenido propio: acciones, monedas, encantamientos y efectos. Con ella se construyen addons sin tocar el core.

Paquete públicodev.aeros.pulseprison.api
Versión de la API3 (getApiVersion())
Java17
ServidorPaper 1.20.4+

1. Agregar la dependencia

La API viene dentro del jar del plugin. Copiá PulsePrison-2.0.0.jar a una carpeta libs/ de tu proyecto y compilá contra él sin incluirlo en tu jar.

Gradle (Kotlin DSL)

kotlin
repositories {
    mavenCentral()
    maven("https://repo.papermc.io/repository/maven-public/")
}

dependencies {
    compileOnly("io.papermc.paper:paper-api:1.20.4-R0.1-SNAPSHOT")
    compileOnly(files("libs/PulsePrison-2.0.0.jar"))
}

java {
    toolchain.languageVersion.set(JavaLanguageVersion.of(17))
}

Maven

xml
<dependency>
    <groupId>dev.aeros</groupId>
    <artifactId>pulseprison</artifactId>
    <version>2.0.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/libs/PulsePrison-2.0.0.jar</systemPath>
</dependency>

2. Declarar PulsePrison en plugin.yml

yaml
name: MyPrisonAddon
version: 1.0.0
main: com.example.addon.MyPrisonAddon
api-version: '1.20'
depend: [PulsePrison]

depend hace que tu plugin cargue después de PulsePrison. Usá softdepend si tu plugin también funciona sin él.

3. Obtener la API

java
import dev.aeros.pulseprison.api.PulsePrisonAPI;
import dev.aeros.pulseprison.api.PulsePrisonProvider;
import org.bukkit.plugin.java.JavaPlugin;

public final class MyPrisonAddon extends JavaPlugin {

    private PulsePrisonAPI prison;

    @Override
    public void onEnable() {
        if (!PulsePrisonProvider.isAvailable()) {
            getLogger().severe("PulsePrison is not available");
            getServer().getPluginManager().disablePlugin(this);
            return;
        }
        prison = PulsePrisonProvider.get();
        if (prison.getApiVersion() < 3) {
            getLogger().severe("This addon needs PulsePrison API 3 or newer");
            getServer().getPluginManager().disablePlugin(this);
            return;
        }
        getLogger().info("Hooked into PulsePrison " + prison.getVersion());
    }
}

PulsePrison también se registra en el ServicesManager de Bukkit con la clase PulsePrisonAPI.

4. Revisar módulos

Los servicios devuelven valores neutros cuando su módulo está apagado: listas vacías, 0 o multiplicador 1.0. Para decidir qué ofrecer:

java
if (prison.isModuleEnabled("private-mines")) {
    getServer().getPluginManager().registerEvents(new MineListener(prison), this);
}

Ids: staff-commands, essentials-commands, clans, seasons, pickaxe-system, rankup-system, multipliers, market, skill-tree, rebirth, pets, robots, private-mines, cells, placeables, autominers, afk-blocks, attributes, boosters, milestones, masteries, pickaxe-skins, crystals, armors, abilities.

5. Primer uso

java
UUID id = player.getUniqueId();

String rank = prison.progression().getRank(id);
int pickaxeLevel = prison.pickaxe().getLevel(id);

if (prison.currencies().take(id, "tokens", 5000)) {
    prison.levels().addExperience(player, "mining", 250);
    player.sendMessage("Paid " + prison.currencies().format("tokens", 5000));
}

Estabilidad

  • Todo lo que está en dev.aeros.pulseprison.api es público: no cambia de forma sin subir getApiVersion().
  • El resto del plugin (managers, menús, modelos) es interno y puede cambiar entre versiones. Algunas clases internas se usan para extender el core; están marcadas como avanzado en Extender PulsePrison.
  • Llamá a la API desde el hilo principal salvo que el método diga lo contrario.

Siguiente

Getting started with the API | PulsePrison Core Docs