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-ObjektgetSpawnLocations()- Liste der Spawnpunkt-StandortegetChestLocations()- Liste der TruhenstandortegetBarrelLocations()- Liste der FassstandortegetExitLocations()- Liste der AusgangspunktstandortespawnChests()- Truhen manuell an markierten Standorten spawnenspawnBarrels()- 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ückgetSchematicClipboard()- Gibt das WorldEdit Clipboard-Objekt zurückgetSchematicOffset()- Gibt den Vektor-Offset für die Platzierung zurückgetLocation()- 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ückgetWorldFolder()- Gibt den File-Ordner der Welt zurückgetSpawnLocations()- Gibt alle markierten Spawn-Standorte zurückgetChestLocations()- Gibt alle Truhen-Spawn-Standorte zurückgetBarrelLocations()- Gibt alle Fass-Spawn-Standorte zurückgetExitLocations()- Gibt alle Ausgangspunktstandorte zurückspawnChests()- Spawnt Truhen an markierten Standorten, gibt List of Block zurückspawnBarrels()- Spawnt Fässer an markierten Standorten, gibt List of Block zurückspawnInaccessibleExitLocations()- Spawnt obere Aufzug-SchematicsspawnAccessibleExitLocations()- Spawnt untere Aufzug-SchematicsspawnOtherEntities()- 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 erstellenUnprotect(CustomBossEntity)- Regionsschutz entfernen, wenn ein Boss getötet wird