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

API для разработчиков

Требования

BetterStructures требует:

  • Java 17 или выше
  • Spigot/Paper server
  • 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.0.4</version>
<scope>provided</scope>
</dependency>

Примечание: Посетите https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures, чтобы увидеть доступные версии. Последняя стабильная версия: 2.0.4

Gradle

repositories {
maven {
name = "magmaguyRepoReleases"
url = uri("https://repo.magmaguy.com/releases")
}
}

dependencies {
implementation 'com.magmaguy:BetterStructures:2.0.4'
}

Примечание: Посетите https://repo.magmaguy.com/releases/com/magmaguy/BetterStructures, чтобы увидеть доступные версии. Последняя стабильная версия: 2.0.4

События

Примечание: События находятся в 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().

Это событие может быть отменено.

WorldGenerationFinishEvent

Вызывается при завершении генерации мира. Предоставляет доступ к объекту ModularWorld, содержащему все данные о сгенерированном мире, включая точки спавна, местоположения сундуков и точки выхода.

Это событие НЕ может быть отменено.

Вы можете получить доступ к данным мира через метод getModularWorld(), который предоставляет:

  • getWorld() - Объект Bukkit World
  • getSpawnLocations() - Список местоположений точек спавна
  • getChestLocations() - Список местоположений сундуков
  • getBarrelLocations() - Список местоположений бочек
  • getExitLocations() - Список местоположений точек выхода
  • spawnChests() - Вручную спавнить сундуки в отмеченных местоположениях
  • spawnBarrels() - Вручную спавнить бочки в отмеченных местоположениях

Пример обработчика событий

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 - это класс, который инстанцируется при вставке сооружения и обрабатывает все аспекты вставки, включая заполнение сундуков и спавн мобов.

Доступные методы получения:

  • getSchematicContainer() - Возвращает контейнер схемы
  • getSchematicClipboard() - Возвращает объект WorldEdit Clipboard
  • getSchematicOffset() - Возвращает смещение вектора для размещения
  • getLocation() - Возвращает местоположение размещения

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

ModularWorld

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

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

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

WorldGuard

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

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

  • checkArea(Location, Player) - Проверить, может ли игрок строить в местоположении
  • Protect(...) - Создать защищенные регионы программным способом
  • Unprotect(CustomBossEntity) - Удалить защиту региона