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 schematicgetSchematicClipboard()- Retourne l'objet Clipboard de WorldEditgetSchematicOffset()- Retourne le Vector offset pour le placementgetLocation()- 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 BukkitgetWorldFolder()- Retourne le dossier File du mondegetSpawnLocations()- 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, retourneList<Block>spawnBarrels()- Fait apparaitre des tonneaux aux emplacements marques, retourneList<Block>spawnInaccessibleExitLocations()- Fait apparaitre les schematics d'ascenseur superieur, retourneList<Location>spawnAccessibleExitLocations()- Fait apparaitre les schematics d'ascenseur inferieur, retourneList<Location>spawnOtherEntities()- Fait apparaitre des entites personnalisees depuis les pools de spawnspawnInstancedEntities(MatchInstance)- Fait apparaitre des entites de boss instanciees, retourneList<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 programmationUnprotect(CustomBossEntity)- Supprimer la protection de region quand un boss est tue