Zum Hauptinhalt springen

Entwickler-API

Voraussetzungen

BetterStructures erfordert:

  • Java 17 oder höher
  • Spigot/Paper Server
  • WorldEdit Plugin (7.3.0+)

Optionale Abhängigkeiten:

  • WorldGuard (7.0.7+) - Für Regionsschutzfunktionen
  • EliteMobs - Für Elite-Mob-Spawn-Integration
  • MythicMobs - Für Mythic-Mob-Integration

Ö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.1.2</version>
<scope>provided</scope>
</dependency>

Hinweis: Besuche https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures um verfügbare Versionen zu sehen. Neueste stabile Version: 2.1.2

Gradle

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

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

Hinweis: Besuche https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures um verfügbare Versionen zu sehen. Neueste stabile Version: 2.1.2

Events

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

Paketimporte

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 Bauwerk platziert werden soll. Stellt Daten darüber bereit, welches Bauwerk wo platziert wird, unter anderem durch das FitAnything-Objekt.

Versuche nicht, das zu platzierende Bauwerk zu modifizieren! Du kannst kleinere Dinge ändern, aber das gesamte Bauwerk zu ändern wird wahrscheinlich zu einem schlecht passenden Bauwerk führen.

Dieses Event ist abbrechbar.

ChestFillEvent

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

Du kannst die Beute mit den Inventar-Methoden addItem() oder removeItem() auf dem Snapshot-Inventar des Containers über getContainer().getSnapshotInventory() modifizieren.

Du kannst auch getTreasureConfigFilename() aufrufen, um zu identifizieren, welche Beutetabellen-Konfiguration zum Fü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 Spawnpunkte, Truhenstandorte und Ausgangspunkte.

Dieses Event ist NICHT abbrechbar.

Du kannst auf Weltdaten über die getModularWorld()-Methode zugreifen, die Folgendes bereitstellt:

  • getWorld() - Das Bukkit World-Objekt
  • getSpawnLocations() - Liste der Spawnpunkt-Standorte
  • getChestLocations() - Liste der Truhenstandorte
  • getBarrelLocations() - Liste der Fassstandorte
  • getExitLocations() - Liste der Ausgangspunktstandorte
  • spawnChests() - Truhen manuell an markierten Standorten spawnen
  • spawnBarrels() - Fässer manuell an markierten Standorten spawnen

Beispiel-Event-Listener

public class MyBetterStructuresListener implements Listener {

@EventHandler
public void onBuildPlace(BuildPlaceEvent event) {
FitAnything build = event.getFitAnything();
Location location = build.getLocation();
// Benutzerdefinierte Logik hier
// event.setCancelled(true); // Um die Platzierung zu verhindern
}

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

@EventHandler
public void onWorldGenFinish(WorldGenerationFinishEvent event) {
ModularWorld world = event.getModularWorld();
// Auf generierte Weltdaten zugreifen
List<Location> spawns = world.getSpawnLocations();
}
}

Wichtige Klassen

FitAnything

Die FitAnything-Klasse ist die Klasse, die instanziiert wird, wenn ein Bauwerk eingefügt wird, und sie verwaltet jeden Aspekt des Einfügens, einschließlich dem Füllen von Truhen und dem Spawnen von Mobs.

Verfügbare Getter-Methoden:

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

Diese Methoden sind nützlich beim Erstellen benutzerdefinierter Regionsschutze oder bei der Analyse von Bauwerkplatzierungen.

ModularWorld

Die ModularWorld-Klasse repräsentiert eine generierte modulare Welt und wird durch das WorldGenerationFinishEvent bereitgestellt. Sie enthält alle Standortdaten und 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-Standorte zurück
  • getChestLocations() - Gibt alle Truhen-Spawn-Standorte zurück
  • getBarrelLocations() - Gibt alle Fass-Spawn-Standorte zurück
  • getExitLocations() - Gibt alle Ausgangspunktstandorte zurück
  • spawnChests() - Spawnt Truhen an markierten Standorten, gibt List of Block zurück
  • spawnBarrels() - Spawnt Fässer an markierten Standorten, gibt List of Block zurück
  • spawnInaccessibleExitLocations() - Spawnt obere Aufzug-Schematics
  • spawnAccessibleExitLocations() - Spawnt untere Aufzug-Schematics
  • spawnOtherEntities() - Spawnt benutzerdefinierte Entitäten aus Spawn-Pools

WorldGuard

Die WorldGuard-Klasse verwaltet die WorldGuard-Regionsschutze. Die Dienstprogramm-Methode public static ProtectedRegion generateProtectedRegion(FitAnything fitAnything, String regionName) wird Entwicklern bereitgestellt, um einfach ein benutzerdefiniertes Regionsschutz-Schema auf BetterStructures aufzusetzen.

Weitere nützliche Methoden:

  • checkArea(Location, Player) - Prüft, ob ein Standort in einer BetterStructures-geschützten Region liegt (gibt true zurück, wenn geschützt, sendet eine Warnmeldung an den Spieler)
  • Protect(...) - Geschützte Regionen programmatisch erstellen
  • Unprotect(CustomBossEntity) - Regionsschutz entfernen, wenn ein Boss getötet wird