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 schematicgetSchematicClipboard()- Retourne l'objet Clipboard de WorldEditgetSchematicOffset()- Retourne le décalage Vector pour le placementgetLocation()- 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 WorldgetWorldFolder()- Retourne le dossier File du mondegetSpawnLocations()- 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, retourneList<Block>spawnBarrels()- Fait apparaître des tonneaux aux emplacements marqués, retourneList<Block>spawnInaccessibleExitLocations()- Fait apparaître les schematics d'ascenseur supérieurs, retourneList<Location>spawnAccessibleExitLocations()- Fait apparaître les schematics d'ascenseur inférieurs, retourneList<Location>spawnOtherEntities()- Fait apparaître les entités personnalisées depuis les pools d'apparitionspawnInstancedEntities(MatchInstance)- Fait apparaître les entités boss instanciées, retourneList<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 programmationUnprotect(CustomBossEntity)- Supprime la protection de région lorsqu'un boss est tué