Pular para o conteúdo principal

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 schematic
  • getSchematicClipboard() - Retorna o objeto Clipboard do WorldEdit
  • getSchematicOffset() - Retorna o Vector de offset para colocação
  • getLocation() - 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 Bukkit
  • getWorldFolder() - Retorna a pasta File do mundo
  • getSpawnLocations() - 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, retorna List<Block>
  • spawnBarrels() - Spawna barris nas localizações marcadas, retorna List<Block>
  • spawnInaccessibleExitLocations() - Spawna os schematics dos elevadores superiores, retorna List<Location>
  • spawnAccessibleExitLocations() - Spawna os schematics dos elevadores inferiores, retorna List<Location>
  • spawnOtherEntities() - Spawna entidades customizadas a partir dos spawn pools
  • spawnInstancedEntities(MatchInstance) - Spawna entidades de boss instanciadas, retorna List<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 programaticamente
  • Unprotect(CustomBossEntity) - Remove a proteção de região quando um boss é morto