跳到主要内容

开发者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