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.7.0")}Maven (pom.xml)
<dependency> <groupId>dev.darkblade.craftingengine</groupId> <artifactId>craftingengine-api</artifactId> <version>2.7.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 |
|---|---|---|
ProcessPreStartEvent | Sí | Se emite antes de retirar los ingredientes. Permite bloquear el inicio del crafteo. |
ProcessStartedEvent | No | Se dispara tras consumir los materiales y comenzar la primera etapa. |
StageTransitionEvent | No | Se dispara cuando un proceso pasa de una etapa a la siguiente. |
ProcessCompletedEvent | No | Se emite al completar con éxito todas las etapas y otorgar las recompensas. |
ProcessFailedEvent | No | Se 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
- Blueprints de Procesos - Conoce la sintaxis YAML para invocar tus acciones personalizadas.
- Diagnóstico y Grabador de Vuelo - Inspecciona la traza de eventos en runtime.