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 schematicgetSchematicClipboard()- Devuelve el objeto Clipboard de WorldEditgetSchematicOffset()- Devuelve el desplazamiento Vector para la colocacióngetLocation()- 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 BukkitgetWorldFolder()- Devuelve la carpeta File del mundogetSpawnLocations()- 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, devuelveList<Block>spawnBarrels()- Genera barriles en las ubicaciones marcadas, devuelveList<Block>spawnInaccessibleExitLocations()- Genera schematics de ascensor superior, devuelveList<Location>spawnAccessibleExitLocations()- Genera schematics de ascensor inferior, devuelveList<Location>spawnOtherEntities()- Genera entidades personalizadas desde los pools de apariciónspawnInstancedEntities(MatchInstance)- Genera entidades de jefes instanciados, devuelveList<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áticamenteUnprotect(CustomBossEntity)- Elimina la protección de la región cuando se mata a un jefe