API para Desenvolvedores
Requisitos
O BetterStructures requer:
- Java 21 ou superior
- Servidor Spigot/Paper
- Plugin WorldEdit (dependência obrigatória)
Dependências opcionais:
- WorldGuard - Para recursos de proteção de regiões (requer que o EliteMobs também esteja instalado para integração completa)
- EliteMobs - Para integração com spawn de elite mobs
- MythicMobs - Para integração com mythic mobs
- Terralith, Iris, Terra, TerraformGenerator - Para compatibilidade com biomas customizados
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.5.0</version>
<scope>provided</scope>
</dependency>
Nota: Acesse https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures para ver as versões disponíveis. Última versão estável: 2.5.0
Gradle
repositories {
maven {
name = "magmaguyRepoReleases"
url = uri("https://repo.magmaguy.com/releases")
}
}
dependencies {
implementation 'com.magmaguy:BetterStructures:2.5.0'
}
Nota: Acesse https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures para ver as versões disponíveis. Última versão estável: 2.5.0
Eventos
Nota: Os eventos estão em com.magmaguy.betterstructures.api
Imports do Pacote
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 build está prestes a ser colocada. Expõe dados sobre qual build será colocada e onde, entre outras informações, através do objeto FitAnything.
Não tente modificar a build que está sendo colocada! Você pode modificar pequenos detalhes, mas alterar a build inteira provavelmente resultará em uma build com encaixe ruim.
Este evento é cancelável.
ChestFillEvent
Chamado quando um baú é preenchido. Utiliza o inventário do snapshot do container para armazenar com segurança os dados a serem aplicados.
Você pode modificar o loot usando os métodos addItem() ou removeItem() do Inventory no inventário de snapshot do container, obtido via getContainer().getSnapshotInventory().
Você também pode chamar getTreasureConfigFilename() para identificar qual configuração de tabela de loot foi usada para preencher este baú.
Este evento é cancelável.
WorldGenerationFinishEvent
Chamado quando a geração do mundo é concluída. Fornece acesso ao objeto ModularWorld, que contém 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 Event Listener
public class MyBetterStructuresListener implements Listener {
@EventHandler
public void onBuildPlace(BuildPlaceEvent event) {
FitAnything build = event.getFitAnything();
Location location = build.getLocation();
// Lógica customizada aqui
// event.setCancelled(true); // Para impedir a colocação
}
@EventHandler
public void onChestFill(ChestFillEvent event) {
Container container = event.getContainer();
Inventory inv = container.getSnapshotInventory();
// Modifique o inventário aqui
inv.addItem(new ItemStack(Material.DIAMOND, 1));
}
@EventHandler
public void onWorldGenFinish(WorldGenerationFinishEvent event) {
ModularWorld world = event.getModularWorld();
// Acesse os dados do mundo gerado
List<Location> spawns = world.getSpawnLocations();
}
}
Classes Principais
FitAnything
A classe FitAnything é a classe que é instanciada quando uma build é colada e gerencia todos os aspectos da colagem, incluindo o preenchimento de baús e o spawn de mobs.
Métodos getter disponíveis:
getSchematicContainer()- Retorna o container do schematicgetSchematicClipboard()- Retorna o objeto Clipboard do WorldEditgetSchematicOffset()- Retorna o Vector de offset para colocaçãogetLocation()- Retorna a Location de colocação
Esses métodos são úteis ao criar proteções de região customizadas ou ao analisar colocações de builds.
ModularWorld
A classe ModularWorld representa um mundo modular gerado e é fornecida através do WorldGenerationFinishEvent. Ela contém todos os dados de localização e métodos para spawnar entidades e containers 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 os schematics dos elevadores superiores, retornaList<Location>spawnAccessibleExitLocations()- Spawna os schematics dos elevadores inferiores, retornaList<Location>spawnOtherEntities()- Spawna entidades customizadas a partir dos spawn poolsspawnInstancedEntities(MatchInstance)- Spawna entidades de boss instanciadas, retornaList<InstancedBossEntity>
WorldGuard
A classe WorldGuard gerencia as proteções de região do WorldGuard. O método utilitário public static ProtectedRegion generateProtectedRegion(FitAnything fitAnything, String regionName) é disponibilizado para que desenvolvedores possam integrar facilmente um esquema de proteção de região customizado 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 boss é morto