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 WorldgetSpawnLocations()- Список местоположений точек спавна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 ClipboardgetSchematicOffset()- Возвращает смещение вектора для размещенияgetLocation()- Возвращает местоположение размещения
Эти методы полезны при создании пользовательской защиты региона или анализе размещения сооружений.
ModularWorld
Класс ModularWorld представляет сгенерированный модульный мир и предоставляется через WorldGenerationFinishEvent. Он содержит все данные местоположений и методы для спавна сущностей и контейнеров в сгенерированном мире.
Ключевые методы:
getWorld()- Возвращает экземпляр Bukkit WorldgetWorldFolder()- Возвращает папку File мираgetSpawnLocations()- Возвращает все отмеченные точки спавнаgetChestLocations()- Возвращает все местоположения спавна сундуковgetBarrelLocations()- Возвращает все местоположения спавна бочекgetExitLocations()- Возвращает все местоположения точек выходаspawnChests()- Спавнит сундуки в отмеченных местоположениях, возвращает List of BlockspawnBarrels()- Спавнит бочки в отмеченных местоположениях, возвращает List of BlockspawnInaccessibleExitLocations()- Спавнит схемы верхнего лифтаspawnAccessibleExitLocations()- Спавнит схемы нижнего лифтаspawnOtherEntities()- Спавнит пользовательские сущности из пулов спавна
WorldGuard
Класс WorldGuard обрабатывает защиту региона WorldGuard. Метод утилиты public static ProtectedRegion generateProtectedRegion(FitAnything fitAnything, String regionName) предоставлен разработчикам для легкого подключения пользовательской схемы защиты региона поверх BetterStructures.
Другие полезные методы:
checkArea(Location, Player)- Проверить, может ли игрок строить в местоположенииProtect(...)- Создать защищенные регионы программным способомUnprotect(CustomBossEntity)- Удалить защиту региона