LevelledMobs API 文档
LevelledMobs 是一个 Minecraft 服务器插件,用于为怪物添加等级系统,提供 RPG 风格的怪物升级体验。该插件支持高度自定义的等级策略和修改器。
Overview
LevelledMobs API 文档
概述
LevelledMobs 是一个 Minecraft 服务器插件,用于为怪物添加等级系统,提供 RPG 风格的怪物升级体验。该插件支持高度自定义的等级策略和修改器。
包结构
- 主包:
io.github.arcaneplugins.levelledmobs - 事件包:
io.github.arcaneplugins.levelledmobs.events - 自定义掉落包:
io.github.arcaneplugins.levelledmobs.customdrops - 枚举包:
io.github.arcaneplugins.levelledmobs.enums - 管理器包:
io.github.arcaneplugins.levelledmobs.managers - 规则包:
io.github.arcaneplugins.levelledmobs.rules - 策略包:
io.github.arcaneplugins.levelledmobs.rules.strategies - 工具包:
io.github.arcaneplugins.levelledmobs.util - 包装器包:
io.github.arcaneplugins.levelledmobs.wrappers
核心 API 接口
LevelInterface
这是 API 中使用的主要接口,暴露了使用通用类来应用和修改 LevelledMobs 主要功能的方法。
主要方法:
getLevellableState(LivingEntity livingEntity): LevellableState– 检查现有怪物是否允许被等级化getLevelOfMob(LivingEntity livingEntity): Int– 获取等级化怪物的等级getMobNametag(LivingEntity livingEntity): String?– 获取怪物的名称标签isLevelled(LivingEntity livingEntity): Boolean– 检查 LivingEntity 是否是等级化怪物removeLevel(LivingEntity livingEntity)– 移除怪物的等级
LevelInterface2
扩展了 LevelInterface,为 LM 本身和其他插件提供全局接口来应用和修改 LevelledMobs 的主要功能。
扩展方法:
applyLevelToMob(lmEntity: LivingEntityWrapper, level: Int, isSummoned: Boolean, bypassLimits: Boolean, additionalLevelInformation: MutableSet<AdditionalLevelInformation>?)– 将等级应用到目标怪物generateLevel(lmEntity: LivingEntityWrapper): Int– 为怪物生成等级generateLevel(lmEntity: LivingEntityWrapper, minLevel: Int, maxLevel: Int): Int– 在指定范围内为怪物生成等级
事件系统
MobPreLevelEvent
在怪物被等级化之前触发的事件。注意:当使用 /lm summon 命令生成怪物时不会触发此事件。
构造函数:
MobPreLevelEvent(
val entity: LivingEntity,
var level: Int,
val levelCause: MobPreLevelEvent.LevelCause,
val additionalInformation: MutableSet<AdditionalLevelInformation>?
) : Event, Cancellable
MobPostLevelEvent
在怪物被等级化之后触发的事件。其他插件可以取消此事件。
构造函数:
MobPostLevelEvent(
val lmEntity: LivingEntityWrapper,
val levelCause: MobPostLevelEvent.LevelCause,
val additionalInformation: MutableSet<AdditionalLevelInformation>?
) : Event
SummonedMobPreLevelEvent
在怪物被等级化之前触发的事件,但仅当使用 /lm summon 命令生成怪物时触发。
构造函数:
SummonedMobPreLevelEvent(
val entity: LivingEntity,
var level: Int
) : Event, Cancellable
自定义掉落系统
核心类
CustomDropInstance
保存一个怪物或组实例,并将其与自定义掉落物品列表关联。这是为怪物/组设置覆盖的地方。
CustomDropItem
保存为自定义掉落物品设置的所有属性。
ExternalCustomDrops
为第三方插件提供添加自定义掉落的接口。
ExternalCustomDropsImpl
允许第三方直接将自定义掉落添加到 LevelledMobs。
自定义掉落集成示例
private void testCustomDrops() {
ItemStack itemStack = new ItemStack(Material.NETHERITE_SWORD);
ItemMeta meta = itemStack.getItemMeta();
assert meta != null;
meta.setDisplayName("Cool Netherite Sword");
meta.setLore(List.of("Created via API"));
itemStack.setItemMeta(meta);
LevelledMobs lm = LevelledMobs.getInstance();
CustomDropItem customDropItem = new CustomDropItem(lm);
customDropItem.setItemStack(itemStack);
customDropItem.chance = 1.0F;
customDropItem.equippedSpawnChance = 1.0F;
final CustomDropInstance customDropInstance = new CustomDropInstance(EntityType.ZOMBIE);
customDropInstance.customItems.add(customDropItem);
lm.customDropsHandler.externalCustomDrops.addCustomDrop(customDropInstance);
}
枚举类型
LevellableState
怪物是否允许被等级化的状态枚举:
ALLOWED– 允许DENIED_FORCE_BLOCKED_ENTITY_TYPE– 强制阻止的实体类型DENIED_CONFIGURATION_BLOCKED_ENTITY_TYPE– 配置阻止的实体类型DENIED_CONFIGURATION_COMPATIBILITY_MYTHIC_MOBS– MythicMobs 兼容性配置阻止DENIED_CONFIGURATION_COMPATIBILITY_ELITE_MOBS– EliteMobs 兼容性配置阻止DENIED_CONFIGURATION_COMPATIBILITY_SIMPLEPETS– SimplePets 兼容性配置阻止DENIED_CONFIGURATION_COMPATIBILITY_ELITE_BOSSES– EliteBosses 兼容性配置阻止DENIED_EXTERNAL_PLUGIN– 外部插件阻止DENIED_CONFIGURATION_CONDITION_NAMETAGGED– 名称标签条件配置阻止DENIED_NO_APPLICABLE_RULES– 没有适用的规则DENIED_OTHER– 其他原因阻止DENIED_LEVEL_0– 等级为 0
Addition
属性加成类型枚举:
ATTRIBUTE_MOVEMENT_SPEED– 移动速度ATTRIBUTE_ATTACK_DAMAGE– 攻击伤害ATTRIBUTE_MAX_HEALTH– 最大生命值CUSTOM_RANGED_ATTACK_DAMAGE– 自定义远程攻击伤害CUSTOM_ITEM_DROP– 自定义物品掉落CUSTOM_XP_DROP– 自定义经验掉落CREEPER_BLAST_DAMAGE– 苦力怕爆炸伤害ATTRIBUTE_ARMOR_BONUS– 护甲加成ATTRIBUTE_ARMOR_TOUGHNESS– 护甲韧性ATTRIBUTE_ATTACK_KNOCKBACK– 攻击击退ATTRIBUTE_FLYING_SPEED– 飞行速度ATTRIBUTE_KNOCKBACK_RESISTANCE– 击退抗性ATTRIBUTE_HORSE_JUMP_STRENGTH– 马跳跃强度ATTRIBUTE_ZOMBIE_SPAWN_REINFORCEMENTS– 僵尸生成增援ATTRIBUTE_FOLLOW_RANGE– 跟随范围
StrategyType
等级策略类型枚举:
RANDOM– 随机WEIGHTED_RANDOM– 加权随机RANDOM_VARIANCE– 随机方差Y_COORDINATE– Y坐标CUSTOM– 自定义SPAWN_DISTANCE– 生成距离PLAYER_VARIABLE– 玩家变量
主要管理器
LevelManager
等级管理器,继承自 LevelInterface2,负责处理怪物的等级化逻辑。
CustomDropsHandler
自定义掉落处理器,包含用于解析、实例化自定义掉落物品的有用函数。
ExternalCompatibilityManager
外部兼容性管理器,处理与其他插件的兼容性。
包装器类
LivingEntityWrapper
LivingEntity 的包装器,提供额外的功能和方法。
实用工具
获取怪物等级(不使用 API)
怪物等级存储在持久数据容器(PDC)中。您可以使用以下代码获取等级而不使用 LevelledMobs API:
简化解决方案:
public int getMobLevel(LivingEntity livingEntity) {
Plugin levelledMobsPlugin = Bukkit.getPluginManager().getPlugin("LevelledMobs");
if (levelledMobsPlugin == null) return 0;
NamespacedKey levelKey = new NamespacedKey(levelledMobsPlugin, "level");
return Objects.requireNonNullElse(
livingEntity.getPersistentDataContainer().get(levelKey, PersistentDataType.INTEGER),
0
);
}
优雅解决方案:
public class LevelledMobsManager {
private final Boolean levelledMobsIsInstalled;
private NamespacedKey key;
public LevelledMobsManager() {
Plugin levelledMobsPlugin = Bukkit.getPluginManager().getPlugin("LevelledMobs");
levelledMobsIsInstalled = levelledMobsPlugin != null && levelledMobsPlugin.isEnabled();
if (levelledMobsIsInstalled) {
key = new NamespacedKey(levelledMobsPlugin, "level");
}
}
public boolean hasLevelledMobsInstalled() {
return levelledMobsIsInstalled != null && levelledMobsIsInstalled;
}
public int getLevelledMobsMobLevel(Entity entity) {
if (!hasLevelledMobsInstalled()) return 0;
Integer mobLevel = entity.getPersistentDataContainer().get(key, PersistentDataType.INTEGER);
return Objects.requireNonNullElse(mobLevel, 0);
}
}
插件集成指南
1. 获取 LevelledMobs 实例
LevelledMobs lm = LevelledMobs.getInstance();
2. 检查怪物是否可等级化
LevellableState state = lm.getLevellableState(livingEntity);
if (state == LevellableState.ALLOWED) {
// 怪物可以等级化
}
3. 获取怪物等级
int level = lm.getLevelOfMob(livingEntity);
4. 监听等级化事件
@EventHandler
public void onMobPreLevel(MobPreLevelEvent event) {
// 在怪物等级化之前执行操作
// 可以修改 event.level 或取消事件
}
@EventHandler
public void onMobPostLevel(MobPostLevelEvent event) {
// 在怪物等级化之后执行操作
}
5. 添加自定义掉落
// 创建自定义掉落物品
CustomDropItem customDropItem = new CustomDropItem(lm);
customDropItem.setItemStack(yourItemStack);
customDropItem.chance = 0.5F; // 50% 掉落几率
// 创建掉落实例
CustomDropInstance customDropInstance = new CustomDropInstance(EntityType.ZOMBIE);
customDropInstance.customItems.add(customDropItem);
// 注册掉落
lm.customDropsHandler.externalCustomDrops.addCustomDrop(customDropInstance);
版本信息
- 当前文档版本:4.0.3.1
- 支持 Minecraft 版本:1.20 – 1.21+
- 支持服务器软件:PaperMC, Spigot, Purpur, Folia
注意事项
- 所有 API 调用应在服务器线程上执行
- 事件处理应遵循 Bukkit 事件系统的最佳实践
- 自定义掉落集成应确保线程安全
- 持久数据容器(PDC)是存储怪物等级的主要方式