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úblico | dev.aeros.pulseprison.api |
| Versión de la API | 3 (getApiVersion()) |
| Java | 17 |
| Servidor | Paper 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)
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
<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
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
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:
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
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.apies público: no cambia de forma sin subirgetApiVersion(). - 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
- Servicios: todo lo que se puede leer y cambiar.
- Eventos: reaccionar a lo que pasa.
- Extender PulsePrison: acciones, monedas, encantamientos, efectos y estadísticas propias.
- Crear un addon: un addon completo de ejemplo y buenas prácticas.