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

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 из WorldEdit
  • getSchematicOffset() — возвращает вектор смещения для размещения
  • getLocation() — возвращает Location размещения

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

ModularWorld

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

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

  • getWorld() — возвращает экземпляр Bukkit World
  • getWorldFolder() — возвращает 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) — снимает защиту региона, когда босс убит