Saltearse al contenido

API para Desarrolladores y Eventos Bukkit

CraftingEngine proporciona un módulo de API pública independiente (craftingengine-api) que permite a otros plugins iniciar procesos, registrar acciones y condiciones personalizadas, reaccionar a eventos del ciclo de vida y consultar estaciones activas.


1. Coordenadas de Maven y Gradle

Añade la dependencia de la API a tu archivo de construcción:

Gradle (Kotlin DSL - build.gradle.kts)

repositories {
maven("https://repo.codemc.io/repository/maven-releases/")
}
dependencies {
compileOnly("dev.darkblade.craftingengine:craftingengine-api:2.8.0")
}

Maven (pom.xml)

<dependency>
<groupId>dev.darkblade.craftingengine</groupId>
<artifactId>craftingengine-api</artifactId>
<version>2.8.0</version>
<scope>provided</scope>
</dependency>

2. Acceso al Servicio Central

Obtén la instancia de CraftingEngineAPI mediante el ServicesManager de Bukkit:

import dev.darkblade.craftingengine.api.CraftingEngineAPI;
import org.bukkit.Bukkit;
public class MiPluginIntegration {
private CraftingEngineAPI api;
public void onEnable() {
this.api = Bukkit.getServicesManager().load(CraftingEngineAPI.class);
if (this.api == null) {
getLogger().warning("CraftingEngine no encontrado.");
}
}
}

3. Eventos del Ciclo de Vida de Bukkit

CraftingEngine emite eventos sincrónicos y asíncronos en los momentos clave del crafteo:

Clase del Evento¿Cancelable?Momento del Disparo
ProcessPreStartEventSíSe emite antes de retirar los ingredientes. Permite bloquear el inicio del crafteo.
ProcessStartedEventNoSe dispara tras consumir los materiales y comenzar la primera etapa.
StageTransitionEventNoSe dispara cuando un proceso pasa de una etapa a la siguiente.
ProcessCompletedEventNoSe emite al completar con éxito todas las etapas y otorgar las recompensas.
ProcessFailedEventNoSe dispara cuando un proceso se interrumpe, abandona o falla.

Ejemplo: Listener de Eventos

import dev.darkblade.craftingengine.api.event.ProcessPreStartEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class MiListener implements Listener {
@EventHandler
public void onProcessPreStart(ProcessPreStartEvent event) {
if (event.getRecipeId().equals("infernal_blade") && !event.getPlayer().hasPermission("miplugin.maestro")) {
event.setCancelled(true);
event.setCancelReason("¡No posees el conocimiento para forjar la Hoja Infernal!");
}
}
}

4. Registro de Acciones y Condiciones Propias

Puedes extender la lógica de los blueprints registrando funciones Java en el RegistryManager:

api.getRegistryManager().registerAction("custom_teleport", (context, args) -> {
Player player = context.getPlayer();
Location target = parseLocation(args);
player.teleport(target);
});

Siguientes Pasos