Aller au contenu principal

API developpeur

Prerequis

BetterStructures necessite :

  • Java 21 ou superieur
  • Serveur Spigot/Paper
  • Plugin WorldEdit (dependance obligatoire)

Dependances optionnelles :

  • WorldGuard - Pour les fonctionnalites de protection de regions (necessite aussi EliteMobs pour l'integration complete)
  • EliteMobs - Pour l'integration de spawn d'elite mobs
  • MythicMobs - Pour l'integration de mythic mobs
  • Terralith, Iris, Terra, TerraformGenerator - Pour la compatibilite des biomes personnalises

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

Note : Visitez https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures pour voir les versions disponibles. Derniere version stable : 2.3.0

Gradle

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

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

Note : Visitez https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures pour voir les versions disponibles. Derniere version stable : 2.3.0

Evenements

Note : Les evenements sont 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

Appele quand une construction est sur le point d'etre placee. Expose des donnees sur quelle construction va etre placee et ou, entre autres, via l'objet FitAnything.

N'essayez pas de modifier la construction en cours de placement ! Vous pouvez modifier des choses mineures, mais changer toute la construction resultera probablement en une construction mal ajustee.

Cet evenement est annulable.

ChestFillEvent

Appele quand un coffre est rempli. Utilise l'inventaire snapshot du conteneur pour stocker en toute securite les donnees a appliquer.

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

Vous pouvez aussi appeler getTreasureConfigFilename() pour identifier quelle configuration de table de butin a ete utilisee pour remplir ce coffre.

Cet evenement est annulable.

WorldGenerationFinishEvent

Appele quand la generation du monde se termine. Fournit l'acces a l'objet ModularWorld contenant toutes les donnees sur le monde genere incluant les points de spawn, les emplacements de coffres et les points de sortie.

Cet evenement N'EST PAS annulable.

Vous pouvez acceder aux donnees du monde via la methode getModularWorld(). Consultez la section ModularWorld ci-dessous pour toutes les methodes disponibles.

Exemple d'Event Listener

public class MyBetterStructuresListener implements Listener {

@EventHandler
public void onBuildPlace(BuildPlaceEvent event) {
FitAnything build = event.getFitAnything();
Location location = build.getLocation();
// Logique personnalisee ici
// event.setCancelled(true); // Pour empecher le placement
}

@EventHandler
public void onChestFill(ChestFillEvent event) {
Container container = event.getContainer();
Inventory inv = container.getSnapshotInventory();
// Modifier l'inventaire ici
inv.addItem(new ItemStack(Material.DIAMOND, 1));
}

@EventHandler
public void onWorldGenFinish(WorldGenerationFinishEvent event) {
ModularWorld world = event.getModularWorld();
// Acceder aux donnees du monde genere
List<Location> spawns = world.getSpawnLocations();
}
}

Classes cles

FitAnything

La classe FitAnything est la classe instanciee quand une construction est collee et gere chaque aspect du collage, incluant le remplissage de coffres et le spawn de mobs.

Methodes getter disponibles :

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

Ces methodes sont utiles pour creer des protections de region personnalisees ou analyser les placements de constructions.

ModularWorld

La classe ModularWorld represente un monde modulaire genere et est fournie via le WorldGenerationFinishEvent. Elle contient toutes les donnees de localisation et les methodes pour faire apparaitre des entites et conteneurs dans le monde genere.

Methodes cles :

  • getWorld() - Retourne l'instance World de Bukkit
  • getWorldFolder() - Retourne le dossier File du monde
  • getSpawnLocations() - Retourne tous les emplacements de spawn marques (List<Location>)
  • getChestLocations() - Retourne tous les emplacements de spawn de coffres (List<Location>)
  • getBarrelLocations() - Retourne tous les emplacements de spawn de tonneaux (List<Location>)
  • getExitLocations() - Retourne tous les emplacements de points de sortie (List<ExitLocation>)
  • spawnChests() - Fait apparaitre des coffres aux emplacements marques, retourne List<Block>
  • spawnBarrels() - Fait apparaitre des tonneaux aux emplacements marques, retourne List<Block>
  • spawnInaccessibleExitLocations() - Fait apparaitre les schematics d'ascenseur superieur, retourne List<Location>
  • spawnAccessibleExitLocations() - Fait apparaitre les schematics d'ascenseur inferieur, retourne List<Location>
  • spawnOtherEntities() - Fait apparaitre des entites personnalisees depuis les pools de spawn
  • spawnInstancedEntities(MatchInstance) - Fait apparaitre des entites de boss instanciees, retourne List<InstancedBossEntity>

WorldGuard

La classe WorldGuard gere les protections de region WorldGuard. La methode utilitaire public static ProtectedRegion generateProtectedRegion(FitAnything fitAnything, String regionName) est disponible pour que les developpeurs puissent facilement connecter un schema de protection de region personnalise sur BetterStructures.

Autres methodes utiles :

  • checkArea(Location, Player) - Verifie si un emplacement est dans une region protegee par BetterStructures (retourne true si protege, envoie un message d'avertissement au joueur)
  • Protect(...) - Creer des regions protegees par programmation
  • Unprotect(CustomBossEntity) - Supprimer la protection de region quand un boss est tue