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ückgetSchematicClipboard()– Gibt das WorldEdit-Clipboard-Objekt zurückgetSchematicOffset()– Gibt den Vector-Offset für die Platzierung zurückgetLocation()– 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ückgetWorldFolder()– Gibt den File-Ordner der Welt zurückgetSpawnLocations()– 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, gibtList<Block>zurückspawnBarrels()– Spawnt Fässer an markierten Standorten, gibtList<Block>zurückspawnInaccessibleExitLocations()– Spawnt obere Aufzug-Schematics, gibtList<Location>zurückspawnAccessibleExitLocations()– Spawnt untere Aufzug-Schematics, gibtList<Location>zurückspawnOtherEntities()– Spawnt benutzerdefinierte Entitäten aus Spawn-PoolsspawnInstancedEntities(MatchInstance)– Spawnt instanzierte Boss-Entitäten, gibtList<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 RegionenUnprotect(CustomBossEntity)– Entfernt den Regionenschutz, wenn ein Boss getötet wird