API para Desenvolvedores
Requisitos
BetterStructures requer:
- Java 21 ou superior
- Servidor Spigot/Paper
- Plugin WorldEdit (dependência obrigatória)
Dependências opcionais:
- WorldGuard - Para funcionalidades de proteção de regiões (requer EliteMobs também instalado para integração completa)
- EliteMobs - Para integração de spawn de elite mobs
- MythicMobs - Para integração de mythic mobs
- Terralith, Iris, Terra, TerraformGenerator - Para compatibilidade com biomas personalizados
Repositório 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.3.0</version>
<scope>provided</scope>
</dependency>
Nota: Visite https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures para ver as versões disponíveis. Última estável: 2.3.0
Gradle
repositories {
maven {
name = "magmaguyRepoReleases"
url = uri("https://repo.magmaguy.com/releases")
}
}
dependencies {
implementation 'com.magmaguy:BetterStructures:2.3.0'
}
Nota: Visite https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures para ver as versões disponíveis. Última estável: 2.3.0
Eventos
Nota: Os eventos estão em com.magmaguy.betterstructures.api
Importações de Pacotes
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
Chamado quando uma construção está prestes a ser colocada. Expõe dados sobre qual construção será colocada e onde, entre outras coisas, através do objeto FitAnything.
Não tente modificar a construção sendo colocada! Você pode modificar coisas menores, mas alterar toda a construção provavelmente resultará em uma construção com encaixe inadequado.
Este evento é cancelável.
ChestFillEvent
Chamado quando um baú é preenchido. Usa o inventário de snapshot do recipiente para armazenar com segurança os dados a serem aplicados.
Você pode modificar o saque usando os métodos addItem() ou removeItem() do Inventory no inventário de snapshot do recipiente obtido via getContainer().getSnapshotInventory().
Você também pode chamar getTreasureConfigFilename() para identificar qual configuração de tabela de saque foi usada para preencher este baú.
Este evento é cancelável.
WorldGenerationFinishEvent
Chamado quando a geração de mundo termina. Fornece acesso ao objeto ModularWorld contendo todos os dados sobre o mundo gerado, incluindo pontos de spawn, localizações de baús e pontos de saída.
Este evento NÃO é cancelável.
Você pode acessar os dados do mundo através do método getModularWorld(). Veja a seção ModularWorld abaixo para todos os métodos disponíveis.
Exemplo de Listener de Eventos
public class MyBetterStructuresListener implements Listener {
@EventHandler
public void onBuildPlace(BuildPlaceEvent event) {
FitAnything build = event.getFitAnything();
Location location = build.getLocation();
// Lógica personalizada aqui
// event.setCancelled(true); // Para prevenir a colocação
}
@EventHandler
public void onChestFill(ChestFillEvent event) {
Container container = event.getContainer();
Inventory inv = container.getSnapshotInventory();
// Modificar inventário aqui
inv.addItem(new ItemStack(Material.DIAMOND, 1));
}
@EventHandler
public void onWorldGenFinish(WorldGenerationFinishEvent event) {
ModularWorld world = event.getModularWorld();
// Acessar dados do mundo gerado
List<Location> spawns = world.getSpawnLocations();
}
}
Classes principais
FitAnything
A classe FitAnything é instanciada quando uma construção é colada e lida com todos os aspectos da colagem, incluindo preenchimento de baús e spawn de mobs.
Métodos getter disponíveis:
getSchematicContainer()- Retorna o container do schematicgetSchematicClipboard()- Retorna o objeto Clipboard do WorldEditgetSchematicOffset()- Retorna o deslocamento Vector para colocaçãogetLocation()- Retorna o Location da colocação
Estes métodos são úteis para criar proteções de região personalizadas ou analisar colocações de construção.
ModularWorld
A classe ModularWorld representa um mundo modular gerado e é fornecida através do WorldGenerationFinishEvent. Contém todos os dados de localização e métodos para spawnar entidades e recipientes no mundo gerado.
Métodos principais:
getWorld()- Retorna a instância World do BukkitgetWorldFolder()- Retorna a pasta File do mundogetSpawnLocations()- Retorna todas as localizações de spawn marcadas (List<Location>)getChestLocations()- Retorna todas as localizações de spawn de baús (List<Location>)getBarrelLocations()- Retorna todas as localizações de spawn de barris (List<Location>)getExitLocations()- Retorna todas as localizações de pontos de saída (List<ExitLocation>)spawnChests()- Spawna baús nas localizações marcadas, retornaList<Block>spawnBarrels()- Spawna barris nas localizações marcadas, retornaList<Block>spawnInaccessibleExitLocations()- Spawna schematics de elevador superior, retornaList<Location>spawnAccessibleExitLocations()- Spawna schematics de elevador inferior, retornaList<Location>spawnOtherEntities()- Spawna entidades personalizadas dos pools de spawnspawnInstancedEntities(MatchInstance)- Spawna entidades de chefe instanciadas, retornaList<InstancedBossEntity>
WorldGuard
A classe WorldGuard lida com as proteções de região do WorldGuard. O método utilitário public static ProtectedRegion generateProtectedRegion(FitAnything fitAnything, String regionName) é disponibilizado para desenvolvedores facilmente integrarem um esquema de proteção de região personalizado sobre o BetterStructures.
Outros métodos úteis:
checkArea(Location, Player)- Verifica se uma localização está em uma região protegida pelo BetterStructures (retorna true se protegida, envia uma mensagem de aviso ao jogador)Protect(...)- Cria regiões protegidas programaticamenteUnprotect(CustomBossEntity)- Remove a proteção de região quando um chefe é derrotado