Aller au contenu principal

API développeur

Prérequis

BetterStructures nécessite :

  • Java 21 ou supérieur
  • Serveur Spigot/Paper
  • Plugin WorldEdit (dépendance obligatoire)

Dépendances optionnelles :

  • WorldGuard - Pour les fonctionnalités de protection de régions (nécessite également l'installation d'EliteMobs pour une intégration complète)
  • EliteMobs - Pour l'intégration de l'apparition de monstres d'élite
  • MythicMobs - Pour l'intégration des monstres mythiques
  • Terralith, Iris, Terra, TerraformGenerator - Pour la compatibilité avec les biomes personnalisés

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

Note : Consultez https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures pour voir les versions disponibles. Dernière version stable : 2.5.0

Gradle

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

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

Note : Consultez https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures pour voir les versions disponibles. Dernière version stable : 2.5.0

Événements

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

Imports de packages

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 construction est sur le point d'être placée. Expose, entre autres, les données relatives à la construction qui va être placée et à son emplacement, via l'objet FitAnything.

N'essayez pas de modifier la construction en cours de placement ! Vous pouvez modifier des éléments mineurs, mais changer toute la construction entraînera probablement un mauvais ajustement.

Cet événement est annulable.

ChestFillEvent

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

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

Vous pouvez également appeler getTreasureConfigFilename() pour identifier quelle configuration de table de butin a été utilisée pour remplir ce coffre.

Cet événement est annulable.

WorldGenerationFinishEvent

Appelé lorsque la génération du monde est terminée. Donne accès à l'objet ModularWorld qui contient toutes les données du 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(). Consultez la section ModularWorld ci-dessous pour toutes les méthodes disponibles.

Exemple d'écouteur d'événements

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 instanciée lorsqu'une construction est collée ; elle gère tous les aspects du collage, y compris le remplissage des coffres et l'apparition des monstres.

Méthodes d'accès (getters) disponibles :

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

Ces méthodes sont utiles lors de la création de protections de régions personnalisées ou de l'analyse des placements de constructions.

ModularWorld

La classe ModularWorld représente un monde modulaire généré et est fournie via le WorldGenerationFinishEvent. Elle contient toutes les données d'emplacement et les méthodes permettant de faire apparaître des entités et des 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 (List<Location>)
  • getChestLocations() - Retourne tous les emplacements d'apparition de coffres (List<Location>)
  • getBarrelLocations() - Retourne tous les emplacements d'apparition de tonneaux (List<Location>)
  • getExitLocations() - Retourne tous les emplacements des points de sortie (List<ExitLocation>)
  • spawnChests() - Fait apparaître des coffres aux emplacements marqués, retourne List<Block>
  • spawnBarrels() - Fait apparaître des tonneaux aux emplacements marqués, retourne List<Block>
  • spawnInaccessibleExitLocations() - Fait apparaître les schematics d'ascenseur supérieurs, retourne List<Location>
  • spawnAccessibleExitLocations() - Fait apparaître les schematics d'ascenseur inférieurs, retourne List<Location>
  • spawnOtherEntities() - Fait apparaître les entités personnalisées depuis les pools d'apparition
  • spawnInstancedEntities(MatchInstance) - Fait apparaître les entités boss instanciées, retourne List<InstancedBossEntity>

WorldGuard

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

Autres méthodes utiles :

  • checkArea(Location, Player) - Vérifie si un emplacement se trouve dans une région protégée par BetterStructures (retourne true si elle est protégée, envoie un message d'avertissement au joueur)
  • Protect(...) - Crée des régions protégées par programmation
  • Unprotect(CustomBossEntity) - Supprime la protection de région lorsqu'un boss est tué