血魔法 [非官方移植版]

血魔法 [非官方移植版]

这是血魔法模组由Minecraft 1.20.1版本非官方社区移植至Minecraft 1.21.1版本的使用NeoForge的版本。这不是血魔法的官方发布,与原始血魔法开发者无关,也未获得其官方支持。

血魔法

Blood Magic 3.4.0-46-alpha

Minecraft 1.21.1 非官方移植版

⚠️ 非官方移植版 —— ALPHA / 开发中

本版本是 Blood Magic 从 Minecraft 1.20.1 到 Minecraft 1.21.1 的社区非官方移植版,使用 NeoForge。

许可证与署名

本项目是 Blood Magic 到 Minecraft 1.21.1 的非官方移植版。

原版 Blood Magic 项目由 WayofTime 及 Blood Magic 贡献者 创建。

原项目:
https://github.com/WayofTime/BloodMagic

本移植版基于并修改了原版 Blood Magic 源代码。

Blood Magic 采用 Creative Commons Attribution 4.0 International (CC BY 4.0) 许可证,本移植版同样在此许可证下分发。

本项目 并非官方发布,与原版 Blood Magic 开发者无关联,也不受其官方支持。

本移植版中所做的更改包括针对 Minecraft 1.21.1 和 NeoForge 的适配、API 迁移、兼容性修复、配方/数据生成更改、网络更改、Data Component 迁移以及各种游戏性修复。

许可证:
https://creativecommons.org/licenses/by/4.0/

该移植版已达到可游玩且更为稳定的状态,但 仍处于开发中。部分功能、集成和边缘情况仍需要额外测试和修复。


主要移植更改

Minecraft 1.21.1 / NeoForge 迁移

  • 将 Blood Magic 1.20.1 代码库移植到 Minecraft 1.21.1

  • 将项目迁移到现代的 NeoForge 1.21.1 API

  • 针对新的 NeoForge 系统更新了注册表处理

  • 更新了已弃用的 Forge 时代代码,并移除了若干过时的兼容层

  • 将多个系统迁移到 Minecraft 1.21 的 Data Components 架构

  • 更新了物品、方块、配方、附魔、战利品和注册表 API

  • 清理了模组元数据和 NeoForge 依赖声明


网络

  • 将旧的网络实现替换为合适的 NeoForge 基于 payload 的网络系统

  • 更新了客户端/服务端数据包注册

  • 针对 Minecraft 1.21.1 重做了网络兼容代码

  • 在专用服务端和客户端上验证了 payload 加载


涂油(Anointments)

涂油系统进行了大量工作。

  • 将涂油物品属性处理迁移到 DataComponents.ATTRIBUTE_MODIFIERS

  • 应用涂油时现在会保留现有物品修饰符

  • 需要时可再次正确移除涂油修饰符

  • 重做了与收获相关的涂油处理

  • 更新了涂油耐久消耗时机

  • 通过现代 NeoForge 的 BlockDropsEvent 恢复了 XP 修改

  • 改进了与 Minecraft 1.21 收获流程的兼容性

与战利品相关的涂油

已恢复并适配:

  • Fortune

  • Silk Touch

  • Looting

  • Smelting

  • Voiding

Fortune、Silk Touch 和 Looting 现在使用 Minecraft 1.21 的附魔/注册表系统,而非已移除的 1.20.1 行为。

当 Blood Magic 在内部重新生成战利品表时,防递归保护也得以保留。


血珠合成材料(Blood Orb Ingredient)

自定义血珠配方材料已完全迁移。

  • IngredientBloodOrb 现在使用 NeoForge 现代的 ICustomIngredient 系统

  • 添加了正确的 IngredientType 注册

  • 血珠等级匹配行为得以保留

  • 保留了通用的 IBloodOrb 支持,以兼容其他血珠实现

  • 该材料现在重新包含在运行时构建中


配方与配方序列化

Blood Magic 自定义配方基础设施的大部分已迁移到 Minecraft 1.21.1。

  • 更新了自定义 Blood Magic 配方构建器

  • 将配方提供器迁移到新的 RecipeOutput API

  • 更新了材料序列化以使用现代的 Ingredient.CODEC

  • 重做了旧的 Blood Magic 配方序列化器

  • 为兼容配方 codec 添加了运行时解码支持

  • 针对新的 1.21.1 数据包格式更新了配方生成

  • 修复了生成配方使用过时路径或格式的问题

  • 修复了服务端与客户端之间的配方同步兼容性

近期修复

修复了:

Failed to encode packet 'clientbound/minecraft:update_recipes'

问题源于 RecipeAnointmentApply,其中 JSON codec 和网络 codec 未使用兼容的配方实例。

此问题已在当前构建中修正。


战利品系统

Blood Magic 的自定义战利品基础设施已重新启用并迁移。

自定义战利品函数

已移植到 Minecraft 1.21 的 MapCodec 系统:

  • set_will_range

  • set_will_fraction

  • set_living_upgrade

自定义战利品条目

  • 迁移了 bloodmagic:loot_table

  • 恢复了外部/原版战利品表的解析

  • 更新了战利品表引用以使用现代的 ResourceKey<LootTable> 处理

  • 重新启用了此前被排除的 Blood Magic 战利品包

  • 将随机处理更新为 Minecraft 的 RandomSource

全局战利品修饰符

  • 将全局战利品修饰符数据迁移到:

data/neoforge/loot_modifiers

  • 移除了过时的旧路径

  • 在服务端验证了全局战利品修饰符加载


数据生成(Datagen)

Blood Magic 的数据生成系统进行了重大迁移和清理。

  • 重新启用了此前被禁用的数据生成源

  • 将提供器迁移到 Minecraft 1.21.1 API

  • 更新了方块/物品标签

  • 更新了配方提供器

  • 更新了战利品表提供器

  • 更新了 sprite 源生成

  • 更新了附魔注册表查找

  • 更新了药水/效果处理

  • 更新了 DeferredHolder 泛型

  • 更新了战利品表以使用 ResourceKeys

  • 将条件配方更新为现代 NeoForge 条件格式

  • 更新了生成的数据包文件夹结构

数据包路径迁移

旧路径已迁移到 Minecraft 1.21 格式,包括:

data/bloodmagic/recipes/
→
data/bloodmagic/recipe/

以及以下内容对应的现代路径:

  • 配方

  • 进度

  • 战利品表

  • 标签

通用标签

旧版 Forge 标签已在适当位置迁移到现代的 c: 通用标签命名空间。

当前状态

runData 现在可成功完成。


NBT / Data Components

若干旧的 Blood Magic 系统仍直接期望可变 ItemStack NBT。

这些已适配到 Minecraft 1.21 的 Data Components 系统。

  • 改进了 Blood Magic 的 NBTHelper

  • 添加了更安全的 CustomData 处理

  • 修复了空 NBT 复合标签可能消失的情况

  • 恢复了活性盔甲 / 活性容器代码所期望的行为

  • 减少了旧的 getTag().put(...) 假设可能导致的 NullPointerException


恶魔意志(Demon Will)

  • 恢复了客户端 will_type 物品属性

  • 添加了对以下类型的检测:

    • Corrosive

    • Destructive

    • Vengeful

    • Steadfast

这恢复了恶魔意志相关模型和物品所期望的行为。


冰霜符文(Frost Sigil)

冰霜符文 已恢复。

旧的直接 FrostWalkerEnchantment 调用在 Minecraft 1.21 中已不存在,因此该符文已适配到现代的附魔效果系统。

现在当符文激活时,它会触发现代的 Frost Walker 位置效果。


Bleeding Edge 音乐唱片

Bleeding Edge 唱片已迁移到 Minecraft 1.21 的新唱片机系统。

  • 添加了正确的 jukebox_song 注册表条目

  • 添加了现代唱片机可播放物品组件

  • 保留了原始音频

  • 保留了原始比较器输出

  • 保留了原始曲目时长


炼金反应室(Alchemical Reaction Chamber)

改进了 炼金反应室 的移植。

  • 恢复了来自重命名已放置物品的自定义名称

  • 添加了自定义名称的保存/加载

  • 将自定义名称存储迁移到 Minecraft 1.21 的组件/NBT API

  • 自定义名称现在用于方块的菜单/显示名称


Modopedia

旧的 Patchouli 依赖已替换为 Modopedia 以适配 1.21.1 移植版。

  • 添加了基本的 Modopedia 兼容性

  • 添加了 Blood Magic 书籍条目

  • 添加了所需的文本格式化器

  • 更新了指南书配方

  • 更新了模组元数据以依赖 Modopedia 而非 Patchouli

  • 从分发的 jar 中移除了过时的 Patchouli 依赖

重要

完整的原版 Patchouli 书籍尚未完全转换。

当前的 Modopedia 集成为指南提供了基础,但可能仍需要迁移额外的书籍内容/模板。


元数据与打包

  • 修复了移植版中残留的过时 Forge 元数据

  • 将项目迁移到 neoforge.mods.toml

  • 修复了 NeoForge 版本范围声明

  • 添加了正确的 Modopedia 依赖

  • 移除了被意外打包的过时 mods.toml Forge 文件

  • 修复了 Gradle 资源占位符扩展

  • 从最终 jar 中清理了旧的数据库/资源路径


当前验证状态

当前移植版已通过以下开发测试:

  • compileJava —— OK

  • runData —— OK

  • 数据生成 —— 已处理 2685 个文件

  • 专用服务端启动 —— OK

  • 已加载 2079 个配方

  • 已加载 1693 个进度

  • 服务端达到 Done

  • 客户端模组加载 —— OK

  • 客户端资源重载 —— OK

  • 纹理图集 —— OK

  • NeoForge payload 加载 —— OK

  • 干净的 Gradle 构建 —— OK

当前开发 jar:

bloodmagic-3.4.0-46-alpha.jar


已知问题 / 剩余工作

本移植版 尚未被视为完成。

尽管编译、数据生成、服务端启动和客户端资源加载均已正常工作,但 Blood Magic 是一个大型模组,并非每个机制都已接受完整的游戏内回归测试。

剩余领域包括:

  • 所有 Blood Magic 系统的完整游戏性测试

  • 仪式和复杂多方块行为的额外测试

  • 活性盔甲和升级交互的额外测试

  • 所有涂油在实际游戏中的额外测试

  • 自定义配方和配方同步的额外测试

  • 额外的多人/客户端-服务端测试

  • 将原版 Patchouli 文档完全转换为 Modopedia

  • 仍需验证或额外工作的可选模组集成

  • 与 Agricraft 相关的兼容性

  • 与 Mystical Agriculture 相关的兼容性

  • 其他尚未完全验证的第三方兼容模块

  • 与原始 1.20.1 版本相比可能存在的视觉、渲染或行为差异

最近的配方同步修复在进入世界和将客户端连接到服务端时也需要额外的实际测试。

来自 Modopedia、Curios、NeoForge、原版渲染或着色器的一些非阻塞性开发警告可能仍会出现。


重要提示

这是一个实验性的非官方移植版。

使用前请备份你的世界。

请勿假设其与现有 Blood Magic 世界、附属模组或整合包完全兼容。

漏洞报告很有用,尤其是附带以下内容时:

  • latest.log

  • 崩溃报告

  • NeoForge 版本

  • 已安装模组列表

  • 问题复现步骤

本移植版的目标是在 Minecraft 1.21.1 上尽可能恢复原始的 Blood Magic 1.20.1 行为,同时逐步用现代 NeoForge 等效系统替换过时的 Forge/Minecraft 系统。

在本移植版被视为完全稳定之前,仍需要更多修复、兼容性工作和游戏性测试。