Saltar al contenido principal

API para desarrolladores

Requisitos

BetterStructures requiere:

  • Java 21 o superior
  • Servidor Spigot/Paper
  • Plugin WorldEdit (dependencia obligatoria)

Dependencias opcionales:

  • WorldGuard - Para funciones de protección de regiones (requiere que EliteMobs también esté instalado para una integración completa)
  • EliteMobs - Para la integración de aparición de mobs élite
  • MythicMobs - Para la integración con mobs míticos
  • Terralith, Iris, Terra, TerraformGenerator - Para compatibilidad con biomas personalizados

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.5.0</version>
<scope>provided</scope>
</dependency>

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

Gradle

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

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

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

Eventos

Nota: Los eventos se encuentran 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 la construcción completa probablemente resultará en una construcción con un mal ajuste.

Este evento es cancelable.

ChestFillEvent

Se llama cuando se llena un cofre. Utiliza el inventario snapshot del contenedor para almacenar de forma segura los datos que se aplicarán.

Puedes modificar el botín usando los métodos addItem() o removeItem() de Inventory sobre el inventario snapshot del contenedor obtenido mediante getContainer().getSnapshotInventory().

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

Este evento es cancelable.

WorldGenerationFinishEvent

Se llama cuando finaliza la generación del mundo. Proporciona acceso al objeto ModularWorld que contiene todos los datos sobre el mundo generado, incluyendo puntos de aparición, 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(). Consulta la sección ModularWorld más abajo para ver todos los métodos disponibles.

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 impedir la colocación
}

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

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

Clases clave

FitAnything

La clase FitAnything es la clase que se instancia cuando se pega una construcción y gestiona todos los aspectos del pegado, incluyendo el llenado de cofres y la aparición de mobs.

Métodos getter disponibles:

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

Estos métodos son útiles al crear protecciones de región personalizadas o al 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 aparición marcadas (List<Location>)
  • getChestLocations() - Devuelve todas las ubicaciones de aparición de cofres (List<Location>)
  • getBarrelLocations() - Devuelve todas las ubicaciones de aparición de barriles (List<Location>)
  • getExitLocations() - Devuelve todas las ubicaciones de puntos de salida (List<ExitLocation>)
  • spawnChests() - Genera cofres en las ubicaciones marcadas, devuelve List<Block>
  • spawnBarrels() - Genera barriles en las ubicaciones marcadas, devuelve List<Block>
  • spawnInaccessibleExitLocations() - Genera schematics de ascensor superior, devuelve List<Location>
  • spawnAccessibleExitLocations() - Genera schematics de ascensor inferior, devuelve List<Location>
  • spawnOtherEntities() - Genera entidades personalizadas desde los pools de aparición
  • spawnInstancedEntities(MatchInstance) - Genera entidades de jefes instanciados, devuelve List<InstancedBossEntity>

WorldGuard

La clase WorldGuard gestiona 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 integrar fácilmente un esquema de protección de regiones personalizado sobre BetterStructures.

Otros métodos útiles:

  • checkArea(Location, Player) - Comprueba 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(...) - Crea regiones protegidas programáticamente
  • Unprotect(CustomBossEntity) - Elimina la protección de la región cuando se mata a un jefe