Zum Hauptinhalt springen

Entwickler-API

Voraussetzungen

BetterStructures benötigt:

  • Java 21 oder höher
  • Spigot-/Paper-Server
  • WorldEdit-Plugin (harte Abhängigkeit)

Optionale Abhängigkeiten:

  • WorldGuard – Für Regionenschutz-Funktionen (erfordert zusätzlich EliteMobs für die vollständige Integration)
  • EliteMobs – Für die Integration des Spawnens von Elite-Mobs
  • MythicMobs – Für die MythicMobs-Integration
  • Terralith, Iris, Terra, TerraformGenerator – Für die Kompatibilität mit benutzerdefinierten Biomen

Öffentliches Repository

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>

Hinweis: Besuche https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures, um die verfügbaren Versionen zu sehen. Aktuelle stabile Version: 2.5.0

Gradle

repositories {
maven {
name = "magmaguyRepoReleases"
url = uri("https://repo.magmaguy.com/releases")
}
}

dependencies {
implementation 'com.magmaguy:BetterStructures:2.5.0'
}

Hinweis: Besuche https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures, um die verfügbaren Versionen zu sehen. Aktuelle stabile Version: 2.5.0

Events

Hinweis: Events befinden sich in com.magmaguy.betterstructures.api

Paket-Importe

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

Wird aufgerufen, wenn ein Build platziert werden soll. Stellt unter anderem über das FitAnything-Objekt Daten darüber bereit, welcher Build wo platziert wird.

Versuche nicht, den zu platzierenden Build zu verändern! Du kannst kleinere Anpassungen vornehmen, aber das Ändern des gesamten Builds führt vermutlich zu einem Build mit schlechter Passung.

Dieses Event ist abbrechbar.

ChestFillEvent

Wird aufgerufen, wenn eine Truhe befüllt wird. Verwendet das Snapshot-Inventar des Containers, um die anzuwendenden Daten sicher zu speichern.

Du kannst die Beute über die Inventory-Methoden addItem() oder removeItem() am Snapshot-Inventar des Containers verändern, das über getContainer().getSnapshotInventory() verfügbar ist.

Du kannst außerdem getTreasureConfigFilename() aufrufen, um zu ermitteln, welche Loot-Table-Konfiguration zum Befüllen dieser Truhe verwendet wurde.

Dieses Event ist abbrechbar.

WorldGenerationFinishEvent

Wird aufgerufen, wenn die Weltgenerierung abgeschlossen ist. Bietet Zugriff auf das ModularWorld-Objekt, das alle Daten über die generierte Welt enthält, einschließlich Spawnpunkten, Truhenstandorten und Ausgangspunkten.

Dieses Event ist NICHT abbrechbar.

Du kannst über die Methode getModularWorld() auf die Weltdaten zugreifen. Siehe den Abschnitt ModularWorld unten für alle verfügbaren Methoden.

Beispiel-Event-Listener

public class MyBetterStructuresListener implements Listener {

@EventHandler
public void onBuildPlace(BuildPlaceEvent event) {
FitAnything build = event.getFitAnything();
Location location = build.getLocation();
// Custom logic here
// event.setCancelled(true); // To prevent placement
}

@EventHandler
public void onChestFill(ChestFillEvent event) {
Container container = event.getContainer();
Inventory inv = container.getSnapshotInventory();
// Modify inventory here
inv.addItem(new ItemStack(Material.DIAMOND, 1));
}

@EventHandler
public void onWorldGenFinish(WorldGenerationFinishEvent event) {
ModularWorld world = event.getModularWorld();
// Access generated world data
List<Location> spawns = world.getSpawnLocations();
}
}

Wichtige Klassen

FitAnything

Die FitAnything-Klasse ist die Klasse, die instanziiert wird, wenn ein Build eingefügt wird, und sie verwaltet alle Aspekte des Einfügens, einschließlich des Befüllens von Truhen und des Spawnens von Mobs.

Verfügbare Getter-Methoden:

  • getSchematicContainer() – Gibt den Schematic-Container zurück
  • getSchematicClipboard() – Gibt das WorldEdit-Clipboard-Objekt zurück
  • getSchematicOffset() – Gibt den Vector-Offset für die Platzierung zurück
  • getLocation() – Gibt die Platzierungs-Location zurück

Diese Methoden sind nützlich, um benutzerdefinierte Regionenschutze zu erstellen oder Build-Platzierungen zu analysieren.

ModularWorld

Die ModularWorld-Klasse repräsentiert eine generierte modulare Welt und wird über das WorldGenerationFinishEvent bereitgestellt. Sie enthält alle Standortdaten sowie Methoden zum Spawnen von Entitäten und Containern in der generierten Welt.

Wichtige Methoden:

  • getWorld() – Gibt die Bukkit-World-Instanz zurück
  • getWorldFolder() – Gibt den File-Ordner der Welt zurück
  • getSpawnLocations() – Gibt alle markierten Spawn-Locations zurück (List<Location>)
  • getChestLocations() – Gibt alle Spawn-Locations für Truhen zurück (List<Location>)
  • getBarrelLocations() – Gibt alle Spawn-Locations für Fässer zurück (List<Location>)
  • getExitLocations() – Gibt alle Ausgangspunkt-Locations zurück (List<ExitLocation>)
  • spawnChests() – Spawnt Truhen an markierten Standorten, gibt List<Block> zurück
  • spawnBarrels() – Spawnt Fässer an markierten Standorten, gibt List<Block> zurück
  • spawnInaccessibleExitLocations() – Spawnt obere Aufzug-Schematics, gibt List<Location> zurück
  • spawnAccessibleExitLocations() – Spawnt untere Aufzug-Schematics, gibt List<Location> zurück
  • spawnOtherEntities() – Spawnt benutzerdefinierte Entitäten aus Spawn-Pools
  • spawnInstancedEntities(MatchInstance) – Spawnt instanzierte Boss-Entitäten, gibt List<InstancedBossEntity> zurück

WorldGuard

Die WorldGuard-Klasse verwaltet die WorldGuard-Regionenschutze. Die Hilfsmethode public static ProtectedRegion generateProtectedRegion(FitAnything fitAnything, String regionName) wird Entwicklern zur Verfügung gestellt, um auf einfache Weise ein benutzerdefiniertes Regionenschutzschema zusätzlich zu BetterStructures einzuhängen.

Weitere nützliche Methoden:

  • checkArea(Location, Player) – Prüft, ob sich ein Standort in einer von BetterStructures geschützten Region befindet (gibt true zurück, wenn geschützt, und sendet dem Spieler eine Warnmeldung)
  • Protect(...) – Erstellt programmatisch geschützte Regionen
  • Unprotect(CustomBossEntity) – Entfernt den Regionenschutz, wenn ein Boss getötet wird