跳至主要内容

開發者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

當箱子被填充時呼叫。使用容器的快照庫存安全地儲存要應用的資料。

你可以使用透過getContainer().getSnapshotInventory()取得的容器快照庫存上的addItem()removeItem()方法來修改戰利品。

你也可以呼叫getTreasureConfigFilename()來識別用於填充此箱子的戰利品表設定。

此事件可以取消。

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類別是在建築被貼上時實例化的類別,處理貼上的每個方面,包括填充箱子和生成怪物。

可用的getter方法:

  • getSchematicContainer() - 返回結構圖容器
  • getSchematicClipboard() - 返回WorldEdit的Clipboard物件
  • getSchematicOffset() - 返回放置用的Vector偏移
  • 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區域保護。實用方法public static ProtectedRegion generateProtectedRegion(FitAnything fitAnything, String regionName)供開發者使用,可以輕鬆在BetterStructures之上掛接自訂區域保護方案。

其他有用的方法:

  • checkArea(Location, Player) - 檢查位置是否在BetterStructures保護區域內(如果受保護則返回true,向玩家傳送警告訊息)
  • Protect(...) - 以程式方式建立受保護區域
  • Unprotect(CustomBossEntity) - 當Boss被擊殺時移除區域保護

WorldGuard

undefined

undefined