Pular para o conteúdo principal

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 schematic
  • getSchematicClipboard() - Retorna o objeto Clipboard do WorldEdit
  • getSchematicOffset() - Retorna o deslocamento Vector para colocação
  • getLocation() - 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 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 schematics de elevador superior, retorna List<Location>
  • spawnAccessibleExitLocations() - Spawna schematics de elevador inferior, retorna List<Location>
  • spawnOtherEntities() - Spawna entidades personalizadas dos pools de spawn
  • spawnInstancedEntities(MatchInstance) - Spawna entidades de chefe instanciadas, retorna List<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 programaticamente
  • Unprotect(CustomBossEntity) - Remove a proteção de região quando um chefe é derrotado