Zum Hauptinhalt springen

Developer API

Anforderungen

BetterStructures erfordert:

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

Optionale Abhängigkeiten:

  • WorldGuard (7.0.7+) - Für Regionsschutz-Funktionen
  • 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.0.4</version>
<scope>provided</scope>
</dependency>

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

Gradle

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

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

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

Events

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

Package-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 Gebäude platziert werden soll. Stellt Daten über welches Gebäude platziert wird und wo, unter anderem durch das FitAnything-Objekt, bereit.

Versuchen Sie nicht, das Gebäude zu ändern, das platziert wird! Sie können kleinere Dinge ändern, aber das ganze Gebäude zu ändern wird wahrscheinlich zu einem Gebäude mit schlechter Passung führen.

Dies kann abgebrochen werden.

ChestFillEvent

Wird aufgerufen, wenn eine Kiste gefüllt wird. Verwendet die Container-Snapshot-Inventarverwaltung, um die Daten sicher zu speichern, die angewendet werden sollen.

Sie können das Loot mit den Inventory-Methoden addItem() oder removeItem() auf dem Snapshot-Inventar des Containers ändern, das Sie über getContainer().getSnapshotInventory() erhalten.

Dies kann abgebrochen werden.

WorldGenerationFinishEvent

Wird aufgerufen, wenn die Weltgenerierung beendet ist. Bietet Zugriff auf das ModularWorld-Objekt, das alle Daten über die generierte Welt einschließlich Spawnpunkte, Kistenplatzierungen und Ausstiegspunkte enthält.

Dieses Event kann NICHT abgebrochen werden.

Sie können auf Weltdaten über die Methode getModularWorld() zugreifen, die Folgendes bereitstellt:

  • getWorld() - Das Bukkit World Objekt
  • getSpawnLocations() - Liste der Spawnpunkt-Positionen
  • getChestLocations() - Liste der Kistenplatzierungen
  • getBarrelLocations() - Liste der Fasspositionen
  • getExitLocations() - Liste der Ausstiegspunkt-Positionen
  • spawnChests() - Kisten manuell an markierten Positionen spawnen
  • spawnBarrels() - Fässer manuell an markierten Positionen 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 Platzierung zu verhindern
}

@EventHandler
public void onChestFill(ChestFillEvent event) {
Container container = event.getContainer();
Inventory inv = container.getSnapshotInventory();
// Inventar hier ändern
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 Gebäude eingefügt wird, und verwaltet jeden Aspekt des Einfügens, einschließlich des Füllens von Kisten und des Spawnens von Mobs.

Verfügbare Getter-Methoden:

  • getSchematicContainer() - Gibt den schematischen Container zurück
  • getSchematicClipboard() - Gibt das WorldEdit Clipboard-Objekt zurück
  • getSchematicOffset() - Gibt den Vektor-Versatz für die Platzierung zurück
  • getLocation() - Gibt die Platzierungs-Position zurück

Diese Methoden sind nützlich beim Erstellen von benutzerdefinierten Regionsschutzmaßnahmen oder beim Analysieren von Gebäudeplatzierungen.

ModularWorld

Die ModularWorld-Klasse stellt eine generierte modulare Welt dar und wird über das WorldGenerationFinishEvent bereitgestellt. Sie enthält alle Positionsdaten und Methoden zum Spawnen von Entitäten und Behältern in der generierten Welt.

Wichtige Methoden:

  • getWorld() - Gibt die Bukkit World-Instanz zurück
  • getWorldFolder() - Gibt den Ordner der Welt zurück
  • getSpawnLocations() - Gibt alle markierten Spawnpositionen zurück
  • getChestLocations() - Gibt alle Kisten-Spawnpositionen zurück
  • getBarrelLocations() - Gibt alle Fass-Spawnpositionen zurück
  • getExitLocations() - Gibt alle Ausstiegspunkt-Positionen zurück
  • spawnChests() - Spawnt Kisten an markierten Positionen, gibt Liste von Block zurück
  • spawnBarrels() - Spawnt Fässer an markierten Positionen, gibt Liste von Block zurück
  • spawnInaccessibleExitLocations() - Spawnt obere Aufzugsschemas
  • spawnAccessibleExitLocations() - Spawnt untere Aufzugsschemas
  • spawnOtherEntities() - Spawnt benutzerdefinierte Entitäten aus Spawn-Pools

WorldGuard

Die WorldGuard-Klasse verwaltet die WorldGuard-Regionsschutzmaßnahmen. Die Utility-Methode public static ProtectedRegion generateProtectedRegion(FitAnything fitAnything, String regionName) wird für Entwickler bereitgestellt, um einfach ein benutzerdefiniertes Regionsschutzschema auf BetterStructures zu integrieren.

Weitere nützliche Methoden:

  • checkArea(Location, Player) - Überprüfen Sie, ob ein Spieler an einer Position bauen kann
  • Protect(...) - Erstellen Sie geschützte Regionen programmatisch
  • Unprotect(CustomBossEntity) - Entfernen Sie Regionsschutz