Saltar al contenido principal

API para desarrolladores

Requisitos

BetterStructures requiere:

  • Java 17 o superior
  • Servidor Spigot/Paper
  • Plugin WorldEdit (7.3.0+)

Dependencias opcionales:

  • WorldGuard (7.0.7+) - Para funciones de protección de regiones
  • EliteMobs - Para integración de spawn de elite mobs
  • MythicMobs - Para integración de mythic mobs

Repositorio público

Maven

<repositories>
<repository>
<id>magmaguy-repo-releases</id>
<name>MagmaGuy's Repository</name>
<url>https://repo.magmaguy.com/releases</url>
</repository>
</repositories>

<dependency>
<groupId>com.magmaguy</groupId>
<artifactId>BetterStructures</artifactId>
<version>2.1.2</version>
<scope>provided</scope>
</dependency>

Nota: Visita https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures para ver las versiones disponibles. Última estable: 2.1.2

Gradle

repositories {
maven {
name = "magmaguyRepoReleases"
url = uri("https://repo.magmaguy.com/releases")
}
}

dependencies {
implementation 'com.magmaguy:BetterStructures:2.1.2'
}

Nota: Visita https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures para ver las versiones disponibles. Última estable: 2.1.2

Eventos

Nota: Los eventos están en com.magmaguy.betterstructures.api

Importaciones de paquetes

import com.magmaguy.betterstructures.api.BuildPlaceEvent;
import com.magmaguy.betterstructures.api.ChestFillEvent;
import com.magmaguy.betterstructures.api.WorldGenerationFinishEvent;
import com.magmaguy.betterstructures.buildingfitter.FitAnything;
import com.magmaguy.betterstructures.modules.ModularWorld;
import com.magmaguy.betterstructures.thirdparty.WorldGuard;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

BuildPlaceEvent

Se llama cuando una construcción está a punto de ser colocada. Expone datos sobre qué construcción se va a colocar y dónde, entre otras cosas, a través del objeto FitAnything.

¡No intentes modificar la construcción que se está colocando! Puedes modificar cosas menores, pero cambiar toda la construcción probablemente resultará en una construcción con un ajuste pobre.

Este evento es cancelable.

ChestFillEvent

Se llama cuando un cofre es llenado. Usa el inventario snapshot del contenedor para almacenar de forma segura los datos a aplicar.

Puedes modificar el botín usando los métodos de Inventario addItem() o removeItem() en el inventario snapshot del contenedor obtenido vía getContainer().getSnapshotInventory().

También puedes llamar a getTreasureConfigFilename() para identificar qué configuración de tabla de botín fue usada para llenar este cofre.

Este evento es cancelable.

WorldGenerationFinishEvent

Se llama cuando la generación del mundo termina. Proporciona acceso al objeto ModularWorld que contiene todos los datos sobre el mundo generado incluyendo puntos de spawn, ubicaciones de cofres y puntos de salida.

Este evento NO es cancelable.

Puedes acceder a los datos del mundo a través del método getModularWorld(), que proporciona:

  • getWorld() - El objeto World de Bukkit
  • getSpawnLocations() - Lista de ubicaciones de puntos de spawn
  • getChestLocations() - Lista de ubicaciones de cofres
  • getBarrelLocations() - Lista de ubicaciones de barriles
  • getExitLocations() - Lista de ubicaciones de puntos de salida
  • spawnChests() - Generar cofres manualmente en ubicaciones marcadas
  • spawnBarrels() - Generar barriles manualmente en ubicaciones marcadas

Ejemplo de Event Listener

public class MyBetterStructuresListener implements Listener {

@EventHandler
public void onBuildPlace(BuildPlaceEvent event) {
FitAnything build = event.getFitAnything();
Location location = build.getLocation();
// Lógica personalizada aquí
// event.setCancelled(true); // Para prevenir la colocación
}

@EventHandler
public void onChestFill(ChestFillEvent event) {
Container container = event.getContainer();
Inventory inv = container.getSnapshotInventory();
// Modificar inventario aquí
inv.addItem(new ItemStack(Material.DIAMOND, 1));
}

@EventHandler
public void onWorldGenFinish(WorldGenerationFinishEvent event) {
ModularWorld world = event.getModularWorld();
// Acceder a datos del mundo generado
List<Location> spawns = world.getSpawnLocations();
}
}

Clases clave

FitAnything

La clase FitAnything es la clase que se instancia cuando una construcción se pega y maneja cada aspecto del pegado, incluyendo llenar cofres y generar mobs.

Métodos getter disponibles:

  • getSchematicContainer() - Devuelve el contenedor del schematic
  • getSchematicClipboard() - Devuelve el objeto Clipboard de WorldEdit
  • getSchematicOffset() - Devuelve el offset Vector para la colocación
  • getLocation() - Devuelve la ubicación de colocación

Estos métodos son útiles al crear protecciones de región personalizadas o analizar colocaciones de construcciones.

ModularWorld

La clase ModularWorld representa un mundo modular generado y se proporciona a través del WorldGenerationFinishEvent. Contiene todos los datos de ubicación y métodos para generar entidades y contenedores en el mundo generado.

Métodos clave:

  • getWorld() - Devuelve la instancia World de Bukkit
  • getWorldFolder() - Devuelve la carpeta File del mundo
  • getSpawnLocations() - Devuelve todas las ubicaciones de spawn marcadas
  • getChestLocations() - Devuelve todas las ubicaciones de spawn de cofres
  • getBarrelLocations() - Devuelve todas las ubicaciones de spawn de barriles
  • getExitLocations() - Devuelve todas las ubicaciones de puntos de salida
  • spawnChests() - Genera cofres en ubicaciones marcadas, devuelve List of Block
  • spawnBarrels() - Genera barriles en ubicaciones marcadas, devuelve List of Block
  • spawnInaccessibleExitLocations() - Genera schematics de ascensor superior
  • spawnAccessibleExitLocations() - Genera schematics de ascensor inferior
  • spawnOtherEntities() - Genera entidades personalizadas de pools de spawn

WorldGuard

La clase WorldGuard maneja las protecciones de región de WorldGuard. El método utilitario public static ProtectedRegion generateProtectedRegion(FitAnything fitAnything, String regionName) está disponible para que los desarrolladores puedan fácilmente conectar un esquema de protección de región personalizado sobre BetterStructures.

Otros métodos útiles:

  • checkArea(Location, Player) - Verifica si una ubicación está en una región protegida por BetterStructures (devuelve true si está protegida, envía un mensaje de advertencia al jugador)
  • Protect(...) - Crear regiones protegidas programáticamente
  • Unprotect(CustomBossEntity) - Eliminar protección de región cuando un jefe es eliminado