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 BukkitgetSpawnLocations()- Lista de ubicaciones de puntos de spawngetChestLocations()- Lista de ubicaciones de cofresgetBarrelLocations()- Lista de ubicaciones de barrilesgetExitLocations()- Lista de ubicaciones de puntos de salidaspawnChests()- Generar cofres manualmente en ubicaciones marcadasspawnBarrels()- 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 schematicgetSchematicClipboard()- Devuelve el objeto Clipboard de WorldEditgetSchematicOffset()- Devuelve el offset Vector para la colocacióngetLocation()- 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 BukkitgetWorldFolder()- Devuelve la carpeta File del mundogetSpawnLocations()- Devuelve todas las ubicaciones de spawn marcadasgetChestLocations()- Devuelve todas las ubicaciones de spawn de cofresgetBarrelLocations()- Devuelve todas las ubicaciones de spawn de barrilesgetExitLocations()- Devuelve todas las ubicaciones de puntos de salidaspawnChests()- Genera cofres en ubicaciones marcadas, devuelve List of BlockspawnBarrels()- Genera barriles en ubicaciones marcadas, devuelve List of BlockspawnInaccessibleExitLocations()- Genera schematics de ascensor superiorspawnAccessibleExitLocations()- Genera schematics de ascensor inferiorspawnOtherEntities()- 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áticamenteUnprotect(CustomBossEntity)- Eliminar protección de región cuando un jefe es eliminado