Mebahel's API

由 Mebahel 模组使用的共享系统和工具。

资源介绍

Mebahel 的 API 由 Mebahel 模组使用的共享系统和工具。 Mebahel 的 API 是一个 Fabric 库,为多个 Mebahel 项目提供通用的系统。它包含用于结构处理、自定义容器、多人游戏战利品处理、实体移动以及其他功能的可重用代码,否则这些功能需要在每个模组中单独实现。 该模组主要作为技术依赖项,本身不添加独立的游戏内容。 依赖项 Forge / NeoForge Sinytra Connector Forgified Fabric API GeckoLib Fabric Fabric API GeckoLib 对于玩家和整合包用户 Mebahel 的 API 是作为使用其共享系统的模组的依赖项安装的。在大多数情况下,玩家不会直接与它交互。 根据使用该 API 的模组,它可以提供诸如干燥结构生成、动画自定义箱子、个人战利品、同步容器行为以及改进的自定义实体移动等功能。 结构去水 结构可以在生成后使用 API 移除水和湿透状态。这对于地牢、废墟以及其他可能与海洋、河流、洞穴或含水层相交的结构非常有用。 自定义箱子 使用箱子框架的模组可以提供具有如下功能的自定义容器: 打开和关闭的动画 自定义声音和界面 服务器权威的库存处理 多人游戏安全同步 每个玩家的可选个人战利品 当启用个人战利品时,每位玩家都会从配置的战利品表中获得自己生成的库存,而不是共享相同的箱子内容。 实体移动 自定义实体可以使用共享的移动实用程序进行战斗定位,包括侧移、当目标太近时撤退、面向目标的旋转、跳跃辅助以及防卡住处理。 安装 当另一个模组将 Mebahel 的 API 列为必需依赖项时,请安装它。 它必须存在于该依赖模组的相应环境中。如果在安装了依赖模组的情况下移除 API,可能会导致它们无法加载或正常运行。 对于模组开发者 Mebahel 的 API 为 Fabric 模组之间共享的系统提供了可重用的基础。目标是让常见行为集中在一个库中,而不是在每个项目中维护单独的实9现。 目前 API 暴露的主要系统包括: 结构去水 动画自定义箱子的基础 个人和共享箱子库存 自定义容器的界面和界面处理器支持 实体移动和战斗定位实用程序 开发者安装 将 API 仓库和依赖项添加到你的 Fabric 项目中。 Maven 仓库 repositories { maven { name = "GitLab-Mebahel" url = uri(" https://gitlab.com/api/v4/projects/77311613/packages/maven ") } } 依赖项 dependencies { modImplementation "net.mebahelsapi:mebahels-api:<version>" } fabric.mod.json { "depends": { "mebahels-api": "*" } } 结构去水处理器 去水处理器旨在用于生成后应保持干燥的结构。 它可以: 移除生成块中的湿透状态 清除处理结构区域内的水 与基于模板的结构生成配合使用 在放置后执行清理工作,无需在每个结构中编写自定义逻辑 用法 将处理器添加到相关的结构处理器配置中: "processors": "mebahelsapi:water_removal_processor" 清理工作在结构放置后自动处理,并在服务器端运行。 自定义箱子框架 箱子框架为需要动画、同步、自定义声音或多人游戏特定库存行为的自定义容器提供了基础实现。 它包括对以下内容的支持: GeckoLib 打开、关闭和生成动画 自定义打开和关闭声音 自定义界面和界面处理器 服务器权威的容器逻辑 多人游戏同步 为每个玩家单独生成的个人战利品 在不使用个人战利品时的标准共享库存 个人战利品 当配置了战利品表时,箱子可以为每位玩家生成单独的库存。战利品为该玩家生成一次,并存储在其他玩家看到的库存之外。 这对于地牢奖励、Boss 箱子或多人数结构中每位玩家都能领取自己战利品的情况非常有用。 共享库存 当不使用个人战利品表时,箱子表现为共享容器,所有玩家访问相同的库存。 示例方块实体 public class DwemerChestBlockEntity extends BaseChestBlockEntity { public DwemerChestBlockEntity(BlockPos pos, BlockState state) { super(ModBlockEntities.DWEMER_CHEST_ENTITY, pos, state, 36); } @Override protected Text getChestTitle() { return Text.translatable("block.mebahelcreaturesdwarven.dwemer_chest"); } @Override protected String getLogPrefix() { return "[DwemerChest]"; } @Override @Environment(EnvType.CLIENT) public void playOpenSound() { playChestSound(ModSounds.DWARVEN_CHEST_OPEN); } @Override @Environment(EnvType.CLIENT) public void playCloseSound() { playChestSound(ModSounds.DWARVEN_CHEST_CLOSE); } @Override protected boolean isMultiplayerEnabled() { return ModMultiplayerChest.turnOnMultiplayerDraugrChest; } } 示例方块 public class DwemerChestBlock extends BaseChestBlock { public DwemerChestBlock(AbstractBlock.Settings settings) { super( settings, () -> ModBlockEntities.DWEMER_CHEST_ENTITY, DwemerChestBlockEntity::new ); } @Override protected boolean isMultiplayerEnabled() { return ModMultiplayerChest.turnOnMultiplayerDraugrChest; } } MovementUtil MovementUtil 包含用于自定义实体移动和战斗定位的可重用辅助工具。它主要用于远程怪物、Boss、构造体以及其他需要比基本导航目标更多控制的实体。 典型用途包括: 保持实体面向其目标 检测和恢复移动停滞 保持战斗距离 围绕目标侧移 当目标靠得太近时撤退 辅助跨越小障碍物 移动和攻击时机可以分开处理,以便动画和攻击保持与定位逻辑独立。 示例射击目标 public class DraugrArcherShootingGoal extends Goal { private final DraugrArcherEntity actor; private final MovementUtil movementUtil; private final double STRAFE_DISTANCE = 8; public DraugrArcherShootingGoal(DraugrArcherEntity actor) { this.actor = actor; this.movementUtil = new MovementUtil(this.actor); } @Override public void tick() { if (actor.isUsingPotion() || actor.getHealTicks() > 0) { actor.setShooting(false); actor.getNavigation().stop(); return; } LivingEntity target = this.actor.getTarget(); if (target == null || !target.isAlive()) { this.stop(); return; } double distanceToTarget = this.actor.distanceTo(target); movementUtil.lookAtTarget(target, actor); movementUtil.checkIfStuck(target, actor); if (distanceToTarget <= STRAFE_DISTANCE) { movementUtil.moveBackward(target, actor); } else { movementUtil.strafeAroundTarget(target, actor); } // Shooting logic handled separately } } 典型的目标可以验证目标、更新旋转、运行防卡住处理、根据距离选择移动方式,然后单独处理攻击时机。 被以下模组使用 Mebahel 的 API 被用作依赖这些系统的 Mebahel 模…

在鱼乐云资源中心浏览该资源,登录后可一键安装到你的游戏服务器。

返回资源中心