API del Desarrollador
Requisitos
BetterStructures requiere:
- Java 17 o superior
- Servidor Spigot/Paper
- Plugin WorldEdit (7.3.0+)
Dependencias opcionales:
- WorldGuard (7.0.7+) - Para características de protección de regiones
- EliteMobs - Para integración de generación de élite mobs
- MythicMobs - Para integración de mobs míticos
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.0.4</version>
<scope>provided</scope>
</dependency>
Nota: Visita https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures para ver las versiones disponibles. Última estable: 2.0.4
Gradle
repositories {
maven {
name = "magmaguyRepoReleases"
url = uri("https://repo.magmaguy.com/releases")
}
}
dependencies {
implementation 'com.magmaguy:BetterStructures:2.0.4'
}
Nota: Visita https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures para ver las versiones disponibles. Última estable: 2.0.4
Eventos
Nota: Los eventos están en com.magmaguy.betterstructures.api
Importaciones de Paquete
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 va a ser colocada 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 deficiente.
Esto es cancelable.
ChestFillEvent
Se llama cuando se llena un cofre. Usa la instantánea del inventario del contenedor para almacenar de forma segura los datos que se aplicarán.
Puedes modificar el botín usando los métodos del Inventario addItem() o removeItem() en la instantánea del inventario del contenedor obtenida a través de getContainer().getSnapshotInventory().
Esto es cancelable.
WorldGenerationFinishEvent
Se llama cuando termina la generación del mundo. Proporciona acceso al objeto ModularWorld que contiene todos los datos sobre el mundo generado, incluidos los puntos de desove, las ubicaciones de los cofres y los 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 Mundo de BukkitgetSpawnLocations()- Lista de ubicaciones del punto de desovegetChestLocations()- Lista de ubicaciones de cofresgetBarrelLocations()- Lista de ubicaciones de barrilesgetExitLocations()- Lista de ubicaciones del punto de salidaspawnChests()- Desova manualmente cofres en ubicaciones marcadasspawnBarrels()- Desova manualmente barriles en ubicaciones marcadas
Escucha de Eventos Ejemplo
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 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 maneja cada aspecto del pegado, incluyendo el llenado de cofres y el desove de mobs.
Métodos getter disponibles:
getSchematicContainer()- Devuelve el contenedor esquemáticogetSchematicClipboard()- Devuelve el objeto Portapapeles de WorldEditgetSchematicOffset()- Devuelve el desplazamiento del 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 construcción.
ModularWorld
La clase ModularWorld representa un mundo modular generado y se proporciona a través de WorldGenerationFinishEvent. Contiene todos los datos de ubicación y métodos para desova de entidades y contenedores en el mundo generado.
Métodos clave:
getWorld()- Devuelve la instancia de Mundo de BukkitgetWorldFolder()- Devuelve la carpeta del Archivo del mundogetSpawnLocations()- Devuelve todas las ubicaciones de desove marcadasgetChestLocations()- Devuelve todas las ubicaciones de desove de cofresgetBarrelLocations()- Devuelve todas las ubicaciones de desove de barrilesgetExitLocations()- Devuelve todas las ubicaciones del punto de salidaspawnChests()- Desova cofres en ubicaciones marcadas, devuelve Lista de BlockspawnBarrels()- Desova barriles en ubicaciones marcadas, devuelve Lista de BlockspawnInaccessibleExitLocations()- Desova esquemáticos de ascensores superioresspawnAccessibleExitLocations()- Desova esquemáticos de ascensores inferioresspawnOtherEntities()- Desova entidades personalizadas de grupos de desove
WorldGuard
La clase WorldGuard maneja las protecciones de región de WorldGuard. El método de utilidad public static ProtectedRegion generateProtectedRegion(FitAnything fitAnything, String regionName) se pone a disposición de los desarrolladores para enganchar fácilmente un esquema de protección de región personalizado en BetterStructures.
Otros métodos útiles:
checkArea(Location, Player)- Verifica si un jugador puede construir en una ubicaciónProtect(...)- Crear regiones protegidas programáticamenteUnprotect(CustomBossEntity)- Eliminar protección de región