Перейти к основному содержимому

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 Bukkit
  • getSpawnLocations() - Список расположений точек спавна
  • 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 WorldEdit
  • getSchematicOffset() - Возвращает смещение Vector для размещения
  • getLocation() - Возвращает Location размещения

Эти методы полезны при создании пользовательских защит регионов или анализе размещений построек.

ModularWorld

Класс ModularWorld представляет сгенерированный модульный мир и предоставляется через WorldGenerationFinishEvent. Содержит все данные о расположениях и методы для спавна сущностей и контейнеров.

Ключевые методы:

  • getWorld() - Возвращает экземпляр World Bukkit
  • getWorldFolder() - Возвращает папку File мира
  • getSpawnLocations() - Все отмеченные расположения спавна
  • getChestLocations() - Все расположения спавна сундуков
  • getBarrelLocations() - Все расположения спавна бочек
  • getExitLocations() - Все расположения точек выхода
  • spawnChests() - Спавн сундуков, возвращает List of Block
  • spawnBarrels() - Спавн бочек, возвращает List of Block
  • spawnInaccessibleExitLocations() - Спавн верхних схематиков лифта
  • spawnAccessibleExitLocations() - Спавн нижних схематиков лифта
  • spawnOtherEntities() - Спавн пользовательских сущностей из пулов спавна

Класс WorldGuard управляет защитой регионов WorldGuard. Утилитарный метод public static ProtectedRegion generateProtectedRegion(FitAnything fitAnything, String regionName) предоставляется разработчикам для лёгкого подключения пользовательской схемы защиты регионов поверх BetterStructures.

Другие полезные методы:

  • checkArea(Location, Player) - Проверяет, находится ли локация в регионе, защищённом BetterStructures (возвращает true, если защищена, отправляет предупреждение игроку)
  • Protect(...) - Программное создание защищённых регионов
  • Unprotect(CustomBossEntity) - Удаление защиты региона при убийстве босса

WorldGuard

undefined

undefined