API для разработчиков
Требования
BetterStructures требует:
- Java 21 или выше
- Сервер Spigot/Paper
- Плагин WorldEdit (жёсткая зависимость)
Необязательные зависимости:
- WorldGuard — для функций защиты регионов (для полной интеграции также требуется установка EliteMobs)
- EliteMobs — для интеграции спавна элитных мобов
- MythicMobs — для интеграции с MythicMobs
- Terralith, Iris, Terra, TerraformGenerator — для совместимости с пользовательскими биомами
Публичный репозиторий
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>
Примечание: посетите https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures, чтобы увидеть доступные версии. Последняя стабильная: 2.5.0
Gradle
repositories {
maven {
name = "magmaguyRepoReleases"
url = uri("https://repo.magmaguy.com/releases")
}
}
dependencies {
implementation 'com.magmaguy:BetterStructures:2.5.0'
}
Примечание: посетите https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures, чтобы увидеть доступные версии. Последняя стабильная: 2.5.0
События
Примечание: события находятся в com.magmaguy.betterstructures.api
Импорты пакетов
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
Вызывается, когда постройка должна быть размещена. Предоставляет данные о том, какая постройка будет размещена и где, а также другую информацию через объект FitAnything.
Не пытайтесь изменять размещаемую постройку! Вы можете изменить мелкие детали, но замена всей постройки, скорее всего, приведёт к плохому соответствию.
Событие можно отменить.
ChestFillEvent
Вызывается, когда сундук заполняется. Использует снимок инвентаря контейнера для безопасного сохранения данных, которые будут применены.
Вы можете изменять добычу с помощью методов Inventory addItem() или removeItem(), применённых к снимку инвентаря контейнера, полученному через getContainer().getSnapshotInventory().
Также можно вызвать getTreasureConfigFilename(), чтобы определить, какая конфигурация таблицы добычи использовалась для заполнения этого сундука.
Событие можно отменить.
WorldGenerationFinishEvent
Вызывается по завершении генерации мира. Предоставляет доступ к объекту ModularWorld, содержащему все данные о сгенерированном мире, включая точки спавна, расположение сундуков и точки выхода.
Это событие НЕ может быть отменено.
Вы можете получить доступ к данным мира через метод getModularWorld(). См. раздел ModularWorld ниже для списка всех доступных методов.
Пример обработчика событий
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();
}
}
Ключевые классы
FitAnything
Класс FitAnything создаётся при вставке постройки и обрабатывает все аспекты вставки, включая заполнение сундуков и спавн мобов.
Доступные методы-геттеры:
getSchematicContainer()— возвращает контейнер схематикиgetSchematicClipboard()— возвращает объект Clipboard из WorldEditgetSchematicOffset()— возвращает вектор смещения для размещенияgetLocation()— возвращает Location размещения
Эти методы полезны при создании пользовательских защит регионов или анализе размещения построек.
ModularWorld
Класс ModularWorld представляет сгенерированный модульный мир и предоставляется через WorldGenerationFinishEvent. Он содержит все данные о расположениях и методы для спавна сущностей и контейнеров в сгенерированном мире.
Ключевые методы:
getWorld()— возвращает экземпляр Bukkit WorldgetWorldFolder()— возвращает File папки мираgetSpawnLocations()— возвращает все отмеченные точки спавна (List<Location>)getChestLocations()— возвращает все точки спавна сундуков (List<Location>)getBarrelLocations()— возвращает все точки спавна бочек (List<Location>)getExitLocations()— возвращает все точки выхода (List<ExitLocation>)spawnChests()— спавнит сундуки в отмеченных местах, возвращаетList<Block>spawnBarrels()— спавнит бочки в отмеченных местах, возвращаетList<Block>spawnInaccessibleExitLocations()— спавнит верхние схематики лифтов, возвращаетList<Location>spawnAccessibleExitLocations()— спавнит нижние схематики лифтов, возвращаетList<Location>spawnOtherEntities()— спавнит пользовательских сущностей из пулов спавнаspawnInstancedEntities(MatchInstance)— спавнит инстансных боссов, возвращаетList<InstancedBossEntity>
WorldGuard
Класс WorldGuard обрабатывает защиту регионов WorldGuard. Утилитарный метод public static ProtectedRegion generateProtectedRegion(FitAnything fitAnything, String regionName) предоставляется разработчикам для удобного подключения собственной схемы защиты регионов поверх BetterStructures.
Другие полезные методы:
checkArea(Location, Player)— проверяет, находится ли локация в защищённом регионе BetterStructures (возвращает true, если регион защищён, и отправляет игроку предупреждающее сообщение)Protect(...)— создаёт защищённые регионы программноUnprotect(CustomBossEntity)— снимает защиту региона, когда босс убит