
MesdagPortLib
将模组从一个版本移植到另一个版本
MesdagPortLib
一个向前移植的库,将现代 Minecraft(1.21+)的 API 功能带回到 Forge 1.20.1。可以把它看作一座桥梁,让模组开发者能够在针对稳定的 1.20.1 Forge 生态系统的同时,使用 NeoForge 风格的 API。
✨ 主要特性
♜ 17 个新的玩家与实体属性
所有属性均已网络化并自动同步。每个属性都有一个情感指示器(正面/中性/负面),并带有彩色提示文本:
| 属性 | 默认值 | 描述 |
|---|---|---|
player.block_break_speed |
1.0 | 方块破坏速度倍率 |
generic.burning_time |
1.0 | 燃烧时间倍率 |
generic.explosion_knockback_resistance |
0.0 | 爆炸击退抗性 |
generic.fall_damage_multiplier |
1.0 | 摔落伤害倍率 |
generic.flying_speed |
0.4 | 创造模式飞行速度 |
generic.jump_strength |
0.42 | 跳跃高度 |
generic.max_absorption |
0.0 | 最大伤害吸收生命值 |
player.mining_efficiency |
0.0 | 挖掘速度修正 |
generic.movement_efficiency |
0.0 | 移动效率 |
generic.oxygen_bonus |
0.0 | 水下呼吸加成 |
generic.safe_fall_distance |
3.0 | 安全摔落距离 |
generic.scale |
1.0 | 实体缩放(0.0625 ~ 16.0) |
player.sneaking_speed |
0.3 | 潜行移动速度 |
player.submerged_mining_speed |
0.2 | 水下挖掘速度 |
player.sweeping_damage_ratio |
0.0 | 横扫之刃伤害比率 |
generic.water_movement_efficiency |
0.0 | 水中移动效率 |
player.creative_flight |
false | 布尔值:启用创造飞行 |
属性通过 PortEntityAttributeModificationEvent 自动添加到所有生物实体上。
📊 数据映射系统
从 1.21 移植过来的 JSON 驱动数据系统——将类型化、基于编解码器的值附加到任何注册表条目上:
- 数据驱动——在
data/<namespace>/data_maps/JSON 文件中定义值 - 标签与条件支持——可应用于标签,使用条件谓词
- 合并与移除——支持多来源合并及移除策略
- 网络同步——自动的客户端-服务器协商与同步
内置数据映射:
- 堆肥物品(
portlib:compostables)——覆盖堆肥几率与村民行为 - 熔炉燃料(
portlib:furnace_fuels)——定义自定义燃料燃烧时间
📦 数据组件系统
ItemStack 上的类型安全持久化数据,仿照 1.21 的数据组件设计:
- 基于
Codec的持久化 + 基于StreamCodec的网络同步 - 基于补丁的部分更新
PortModifyDefaultComponentsEvent用于设置默认组件
🔗 附加系统
面向实体、方块实体和世界等级的 NeoForge 风格数据附加:
- 可序列化的附加数据,支持死亡时复制
- 通过
StreamCodec进行按玩家同步 - 世界等级附加数据持久化到存档数据中
🎯 220+ 个移植事件
一个全面的事件系统,将 Forge 事件封装成干净、调用者隔离的 API:
- 玩家(34 个):
PortPlayerHeartTypeEvent、PortSweepAttackEvent、PortCriticalHitEvent、PortArrowLooseEvent、PortItemTooltipEvent、PortAnvilRepairEvent、PortTradeWithVillagerEvent等。 - 生物实体(33 个):
PortLivingShieldBlockEvent、PortLivingIncomingDamageEvent、PortLivingDrownEvent、PortLivingUseTotemEvent、PortMobDespawnEvent、PortBabyEntitySpawnEvent等。 - 客户端(60+ 个):
PortRenderLevelStageEvent、PortRenderTooltipEvent、PortRenderHandEvent、PortRenderArmEvent、PortRegisterGuiLayersEvent、PortRegisterKeyMappingsEvent、PortComputeFovModifierEvent、PortSelectMusicEvent等。 - 世界/方块/物品:
PortBlockDropsEvent、PortExplosionKnockbackEvent、PortPistonEvent、PortItemExpireEvent、PortChunkWatchEvent等。 - 酿造/附魔:
PortPotionBrewEvent、PortEnchantmentLevelSetEvent - 村庄:
PortVillagerTradesEvent、PortWandererTradesEvent
事件在调用者自身模组的事件总线上分发,保持模组隔离的干净整洁。
🌐 网络系统
- 捆绑数据包——多个逻辑数据包合并为一个物理消息
- 丰富的发送目标(追踪实体、追踪区块、维度、附近玩家)
- 注册表感知的
FriendlyByteBuf扩展 - VarInt/VarLong/UTF-8 编解码器工具
🧩 接口注入
通过接口注入和 coremods,45 个以上的原版类获得了新方法:
Holder<T>→is()、getKey()、getRegisteredName()、getData()ItemStack→setData()、getData()、数据组件操作LivingEntity→getAttribute(Holder<Attribute>)、removeEffectsCuredBy()Registry/IForgeRegistry→ 扩展查找方法Entity/Player/Block/Item→ 各种扩展方法
🏷 通用标签生成
c: 命名空间标签(箱子、圆石、矿石、沙子、存储方块等),用于跨模组兼容。
🎮 面向玩家
PortLib 本身不添加任何游戏内容——它是一个库模组。如果其他模组需要它,请安装它。你会在你的玩家和实体上看到 17 个新属性,但它们只有在其他模组修改时才会生效。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。