API для разработчиков
Требования
BetterStructures требует:
- Java 17 или выше
- Сервер Spigot/Paper
- Плагин WorldEdit (7.3.0+)
Необязательные зависимости:
- WorldGuard (7.0.7+) - Для функций защиты регионов
- EliteMobs - Для интеграции спавна элитных мобов
- MythicMobs - Для интеграции мифических мобов
Публичный репозиторий
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.1.2</version>
<scope>provided</scope>
</dependency>
Примечание: Посетите https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures
Gradle
repositories {
maven {
name = "magmaguyRepoReleases"
url = uri("https://repo.magmaguy.com/releases")
}
}
dependencies {
implementation 'com.magmaguy:BetterStructures:2.1.2'
}
Примечание: Посетите https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures
События
Примечание: События находятся в 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
Вызывается при заполнении сундука. Использует снимок инвентаря контейнера для безопасного хранения данных.
Вы можете изменять добычу используя методы инвентаря addItem() или removeItem() на снимке инвентаря контейнера, полученном через getContainer().getSnapshotInventory().
Также можно вызвать getTreasureConfigFilename() для определения, какая конфигурация таблицы добычи использовалась для заполнения этого сундука.
Это событие можно отменить.
WorldGenerationFinishEvent
Вызывается по завершении генерации мира. Предоставляет доступ к объекту ModularWorld, содержащему все данные о сгенерированном мире, включая точки спавна, расположения сундуков и точки выхода.
Это событие НЕЛЬЗЯ отменить.
Доступ к данным мира осуществляется через метод getModularWorld():
getWorld()- Объект World BukkitgetSpawnLocations()- Список расположений точек спавнаgetChestLocations()- Список расположений сундуковgetBarrelLocations()- Список расположений бочекgetExitLocations()- Список расположений точек выходаspawnChests()- Размещение сундуков вручную в отмеченных местахspawnBarrels()- Размещение бочек вручную в отмеченных местах
Пример Event Listener
public class MyBetterStructuresListener implements Listener {
@EventHandler
public void onBuildPlace(BuildPlaceEvent event) {
FitAnything build = event.getFitAnything();
Location location = build.getLocation();
// event.setCancelled(true);
}
@EventHandler
public void onChestFill(ChestFillEvent event) {
Container container = event.getContainer();
Inventory inv = container.getSnapshotInventory();
inv.addItem(new ItemStack(Material.DIAMOND, 1));
}
@EventHandler
public void onWorldGenFinish(WorldGenerationFinishEvent event) {
ModularWorld world = event.getModularWorld();
List<Location> spawns = world.getSpawnLocations();
}
}
Ключевые классы
FitAnything
Класс FitAnything инстанцируется при вставке постройки и управляет каждым аспектом вставки, включая заполнение сундуков и спавн мобов.
Доступные getter-методы:
getSchematicContainer()- Возвращает контейнер схематикаgetSchematicClipboard()- Возвращает объект Clipboard WorldEditgetSchematicOffset()- Возвращает смещение Vector для размещенияgetLocation()- Возвращает Location размещения
Эти методы полезны при создании пользовательских защит регионов или анализе размещений построек.
ModularWorld
Класс ModularWorld представляет сгенерированный модульный мир и предоставляется через WorldGenerationFinishEvent. Содержит все данные о расположениях и методы для спавна сущностей и контейнеров.
Ключевые методы:
getWorld()- Возвращает экземпляр World BukkitgetWorldFolder()- Возвращает папку File мираgetSpawnLocations()- Все отмеченные расположения спавнаgetChestLocations()- Все расположения спавна сундуковgetBarrelLocations()- Все расположения спавна бочекgetExitLocations()- Все расположения точек выходаspawnChests()- Спавн сундуков, возвращает List of BlockspawnBarrels()- Спавн бочек, возвращает List of BlockspawnInaccessibleExitLocations()- Спавн верхних схематиков лифтаspawnAccessibleExitLocations()- Спавн нижних схематиков лифтаspawnOtherEntities()- Спавн пользовательских сущностей из пулов спавна
Класс WorldGuard управляет защитой регионов WorldGuard. Утилитарный метод public static ProtectedRegion generateProtectedRegion(FitAnything fitAnything, String regionName) предоставляется разработчикам для лёгкого подключения пользовательской схемы защиты регионов поверх BetterStructures.
Другие полезные методы:
checkArea(Location, Player)- Проверяет, находится ли локация в регионе, защищённом BetterStructures (возвращает true, если защищена, отправляет предупреждение игроку)Protect(...)- Программное создание защищённых регионовUnprotect(CustomBossEntity)- Удаление защиты региона при убийстве босса
WorldGuard
undefined
undefined