Aller au contenu principal

API pour développeurs

Exigences

BetterStructures nécessite:

  • Java 17 ou plus
  • Serveur Spigot/Paper
  • Plugin WorldEdit (7.3.0+)

Dépendances optionnelles:

  • WorldGuard (7.0.7+) - Pour les fonctionnalités de protection des régions
  • EliteMobs - Pour l'intégration de l'apparition de mobs élites
  • MythicMobs - Pour l'intégration de mobs mythiques

Dépôt public

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>

Remarque: Visitez https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures pour voir les versions disponibles. Dernière version stable: 2.0.4

Gradle

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

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

Remarque: Visitez https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures pour voir les versions disponibles. Dernière version stable: 2.0.4

Événements

Remarque: Les événements se trouvent dans com.magmaguy.betterstructures.api

Imports de paquets

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

Appelé lorsqu'une structure est sur le point d'être placée. Expose les données sur quelle structure va être placée et où, entre autres, via l'objet FitAnything.

N'essayez pas de modifier la structure en cours de placement! Vous pouvez modifier des éléments mineurs, mais changer toute la structure entraînera probablement une structure mal positionnée.

Cet événement est annulable.

ChestFillEvent

Appelé lorsqu'un coffre est rempli. Utilise l'instantané d'inventaire du conteneur pour stocker en toute sécurité les données à appliquer.

Vous pouvez modifier le butin en utilisant les méthodes d'inventaire addItem() ou removeItem() sur l'inventaire snapshot du conteneur obtenu via getContainer().getSnapshotInventory().

Cet événement est annulable.

WorldGenerationFinishEvent

Appelé lorsque la génération du monde est terminée. Fournit un accès à l'objet ModularWorld contenant toutes les données sur le monde généré, y compris les points d'apparition, les emplacements des coffres et les points de sortie.

Cet événement n'est PAS annulable.

Vous pouvez accéder aux données du monde via la méthode getModularWorld(), qui fournit:

  • getWorld() - L'objet World de Bukkit
  • getSpawnLocations() - Liste des emplacements des points d'apparition
  • getChestLocations() - Liste des emplacements des coffres
  • getBarrelLocations() - Liste des emplacements des tonneaux
  • getExitLocations() - Liste des emplacements des points de sortie
  • spawnChests() - Apparition manuelle de coffres aux emplacements marqués
  • spawnBarrels() - Apparition manuelle de tonneaux aux emplacements marqués

Exemple d'écouteur d'événement

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();
}
}

Classes clés

FitAnything

La classe FitAnything est la classe qui est instanciée lorsqu'une structure est collée et gère tous les aspects du collage, y compris le remplissage des coffres et l'apparition des mobs.

Méthodes d'accès disponibles:

  • getSchematicContainer() - Retourne le conteneur schématique
  • getSchematicClipboard() - Retourne l'objet Clipboard de WorldEdit
  • getSchematicOffset() - Retourne le décalage Vector pour le placement
  • getLocation() - Retourne l'emplacement du placement

Ces méthodes sont utiles pour créer des protections de régions personnalisées ou analyser les placements de structures.

ModularWorld

La classe ModularWorld représente un monde modulaire généré et est fournie via WorldGenerationFinishEvent. Elle contient toutes les données de localisation et les méthodes d'apparition d'entités et de conteneurs dans le monde généré.

Méthodes clés:

  • getWorld() - Retourne l'instance Bukkit World
  • getWorldFolder() - Retourne le dossier File du monde
  • getSpawnLocations() - Retourne tous les emplacements d'apparition marqués
  • getChestLocations() - Retourne tous les emplacements d'apparition des coffres
  • getBarrelLocations() - Retourne tous les emplacements d'apparition des tonneaux
  • getExitLocations() - Retourne tous les emplacements des points de sortie
  • spawnChests() - Apparition de coffres aux emplacements marqués, retourne List of Block
  • spawnBarrels() - Apparition de tonneaux aux emplacements marqués, retourne List of Block
  • spawnInaccessibleExitLocations() - Apparition des schémas d'ascenseurs supérieurs
  • spawnAccessibleExitLocations() - Apparition des schémas d'ascenseurs inférieurs
  • spawnOtherEntities() - Apparition d'entités personnalisées à partir de pools d'apparition

WorldGuard

La classe WorldGuard gère les protections régionales de WorldGuard. La méthode utilitaire public static ProtectedRegion generateProtectedRegion(FitAnything fitAnything, String regionName) est mise à disposition des développeurs pour intégrer facilement un schéma de protection de régions personnalisé sur BetterStructures.

Autres méthodes utiles:

  • checkArea(Location, Player) - Vérifier si un joueur peut construire à un emplacement
  • Protect(...) - Créer des régions protégées par programmation
  • Unprotect(CustomBossEntity) - Supprimer la protection régionale