開發者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 BlockspawnBarrels()- 在標記位置生成桶,返回List of BlockspawnInaccessibleExitLocations()- 生成上層電梯結構圖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