MITE MOD 物品腐蚀系统完整机制分析
系统概述
基于对源代码的深入分析,MITE MOD的物品腐蚀系统采用了三层架构设计,通过布尔值驱动的抗性系统实现复杂的材料交互机制。
核心架构
1. 三层架构设计
伤害源层 (DamageSource) → 材料抗性层 (Material) → 实体交互层 (Entity)
2. 腐蚀类型分类
- 胃蛋白酶腐蚀 (
DamageSource.pepsin):主要分解有机物和蛋白质
- 酸性腐蚀 (
DamageSource.acid):腐蚀金属和无机材料
- 熔岩腐蚀 (
DamageSource.lava):高温熔化材料
- 火焰腐蚀 (
DamageSource.fire):燃烧有机材料
材料抗性系统详细分析
核心抗性属性
private boolean is_harmed_by_acid; // 酸性抗性
private boolean is_harmed_by_pepsin; // 胃蛋白酶抗性
private boolean is_harmed_by_lava; // 熔岩抗性
private boolean is_harmed_by_fire; // 火焰抗性
默认设置机制
// 所有材料的构造函数默认值
this.is_harmed_by_lava = true; // 默认被熔岩伤害
this.is_harmed_by_pepsin = false; // 默认不被胃蛋白酶伤害
this.is_harmed_by_acid = true; // 默认被酸伤害
this.is_harmed_by_fire = true; // 默认被火伤害
完整材料抗性分类表
🔴 易受酸腐蚀的材料 (is_harmed_by_acid = true)
金属材料
| 材料名称 |
英文名称 |
设置方式 |
备注 |
| 锈蚀铁 |
rusted_iron |
.setMetal(true) |
活性金属,易氧化 |
| 铜 |
copper |
.setMetal(true) |
活性金属 |
| 银 |
silver |
.setMetal(true) |
贵金属但仍受酸腐蚀 |
| 铁 |
iron |
.setMetal(true) |
最常见的易腐蚀金属 |
| 远古金属 |
ancient_metal |
.setMetal(true) |
特殊金属但仍易腐蚀 |
有机材料
| 材料名称 |
英文名称 |
设置方式 |
备注 |
| 皮革 |
leather |
默认设置 |
动物制品 |
| 木材 |
wood |
默认设置 |
植物材料 |
| 草 |
grass |
默认设置 |
植物材料 |
| 泥土 |
dirt |
默认设置 |
土壤 |
| 树叶 |
tree_leaves |
默认设置 |
植物材料 |
| 植物 |
plants |
默认设置 |
植物材料 |
| 藤蔓 |
vine |
默认设置 |
植物材料 |
| 海绵 |
sponge |
默认设置 |
多孔材料 |
| 布料 |
cloth |
默认设置 |
纺织品 |
| 纸张 |
paper |
默认设置 |
纤维制品 |
| 羽毛 |
feather |
默认设置 |
动物制品 |
其他易腐蚀材料
| 材料名称 |
英文名称 |
设置方式 |
备注 |
| 火焰 |
fire |
默认设置 |
特殊材料 |
| 沙子 |
sand |
默认设置 |
矿物但易腐蚀 |
| TNT |
tnt |
默认设置 |
爆炸物 |
| 仙人掌 |
cactus |
默认设置 |
植物材料 |
| 粘土 |
clay |
默认设置 |
土壤材料 |
| 硬化粘土 |
hardened_clay |
默认设置 |
烧制粘土 |
| 南瓜 |
pumpkin |
默认设置 |
植物材料 |
| 龙蛋 |
dragonEgg |
默认设置 |
特殊物品 |
| 蛋糕 |
cake |
默认设置 |
食物 |
| 蜘蛛网 |
web |
默认设置 |
蛋白质结构 |
| 活塞 |
piston |
默认设置 |
机械装置 |
| 骨头 |
bone |
默认设置 |
动物制品 |
| 粪便 |
manure |
默认设置 |
有机物 |
| 煤炭 |
coal |
默认设置 |
可燃矿物 |
| 火药 |
gunpowder |
默认设置 |
爆炸物 |
| 史莱姆 |
slime |
默认设置 |
有机胶体 |
| 染料 |
dye |
默认设置 |
化学制品 |
| 末影珍珠 |
ender_pearl |
默认设置 |
特殊材料 |
| 烈焰 |
blaze |
默认设置 |
火焰材料 |
| 丝绸 |
silk |
默认设置 |
蛋白质纤维 |
| 碎片 |
frags |
默认设置 |
各种碎片 |
| 黑胶唱片 |
vinyl |
默认设置 |
有机聚合物 |
特殊液体(手动设为易腐蚀)
| 材料名称 |
英文名称 |
设置方式 |
备注 |
| 牛奶 |
milk |
.setLiquid(true).setHarmedByAcid(true) |
特例:液体但易受酸腐蚀 |
所有食物材料
| 材料名称 |
英文名称 |
设置方式 |
备注 |
| 蘑菇炖菜 |
mushroom_stew |
默认设置 |
食物 |
| 牛肉炖菜 |
beef_stew |
默认设置 |
含肉食物 |
| 鸡汤 |
chicken_soup |
默认设置 |
含肉食物 |
| 蔬菜汤 |
vegetable_soup |
默认设置 |
植物食物 |
| 奶油蘑菇汤 |
cream_of_mushroom_soup |
默认设置 |
含奶制品 |
| 奶油蔬菜汤 |
cream_of_vegetable_soup |
默认设置 |
含奶制品 |
| 南瓜汤 |
pumpkin_soup |
默认设置 |
植物食物 |
| 土豆泥 |
mashed_potato |
默认设置 |
植物食物 |
| 果汁冰糕 |
sorbet |
默认设置 |
冷冻食品 |
| 冰淇淋 |
ice_cream |
默认设置 |
含奶制品 |
| 沙拉 |
salad |
默认设置 |
植物食物 |
| 水果 |
fruit |
默认设置 |
植物食物 |
| 蔬菜 |
vegetable |
默认设置 |
植物食物 |
| 肉类 |
meat |
默认设置 |
动物制品 |
| 面包 |
bread |
默认设置 |
谷物制品 |
| 甜点 |
desert |
默认设置 |
食物 |
| 馅饼 |
pie |
默认设置 |
烘焙食品 |
| 粥 |
porridge |
默认设置 |
谷物制品 |
| 谷物 |
cereal |
默认设置 |
谷物制品 |
| 糖 |
sugar |
默认设置 |
甜味剂 |
| 奶酪 |
cheese |
默认设置 |
奶制品 |
| 面粉 |
flour |
默认设置 |
谷物制品 |
| 面团 |
dough |
默认设置 |
面食原料 |
| 种子 |
seed |
默认设置 |
植物种子 |
🟢 抗酸腐蚀的材料 (is_harmed_by_acid = false)
贵金属和特殊金属
| 材料名称 |
英文名称 |
设置方式 |
备注 |
| 金 |
gold |
.setMetal(false) |
化学惰性贵金属 |
| 秘银 |
mithril |
.setMetal(false) |
魔法金属 |
| 精金 |
adamantium |
.setMetal(false) |
最强魔法金属,也抗熔岩 |
所有岩石矿物材料(自动抗酸)
| 材料名称 |
英文名称 |
设置方式 |
备注 |
| 燧石 |
flint |
.setRockyMineral() |
硅质矿物 |
| 石头 |
stone |
.setRockyMineral() |
基础岩石 |
| 黑曜石 |
obsidian |
.setRockyMineral() |
火山玻璃 |
| 地狱岩 |
netherrack |
.setRockyMineral() |
地狱材料 |
| 玻璃 |
glass |
.setRockyMineral(true) |
硅酸盐玻璃 |
| 石英 |
quartz |
.setRockyMineral(true) |
水晶矿物 |
| 绿宝石 |
emerald |
.setRockyMineral(true) |
宝石矿物 |
| 钻石 |
diamond |
.setRockyMineral(true) |
最硬矿物 |
| 红石 |
redstone |
.setRockyMineral() |
特殊矿物 |
| 萤石 |
glowstone |
.setRockyMineral() |
发光矿物 |
| 青金石 |
lapis_lazuli |
.setRockyMineral(true) |
蓝色矿物 |
| 珊瑚 |
coral |
.setRockyMineral() |
钙质结构 |
| 红石灯 |
redstoneLight |
.setRockyMineral() |
特殊方块 |
液体材料(自动抗酸)
| 材料名称 |
英文名称 |
设置方式 |
备注 |
| 水 |
water |
.setLiquid() |
基础液体 |
| 熔岩 |
lava |
.setLiquid() |
高温液体 |
特殊抗酸材料
| 材料名称 |
英文名称 |
设置方式 |
备注 |
| 雪 |
snow |
.setHarmedByAcid(false) |
手动设置抗酸 |
| 人工雪 |
craftedSnow |
.setHarmedByAcid(false) |
手动设置抗酸 |
| 空气 |
air |
透明材料 |
特殊材料 |
| 冰 |
ice |
特殊设置 |
固态水 |
| 铁砧 |
anvil |
特殊设置 |
金属工具 |
| 传送门 |
portal |
特殊设置 |
魔法结构 |
| 电路 |
circuits |
特殊设置 |
电子元件 |
| 地毯 |
materialCarpet |
特殊设置 |
纺织品 |
胃蛋白酶抗性分析
🔴 易受胃蛋白酶腐蚀的材料 (is_harmed_by_pepsin = true)
动物制品
| 材料名称 |
英文名称 |
设置方式 |
原理 |
| 皮革 |
leather |
.setHarmedByPepsin() |
蛋白质纤维 |
| 布料 |
cloth |
.setHarmedByPepsin() |
可能含动物纤维 |
| 地毯 |
materialCarpet |
.setHarmedByPepsin() |
纺织品 |
| 羽毛 |
feather |
.setHarmedByPepsin() |
角蛋白结构 |
食物中的动物制品
| 材料名称 |
英文名称 |
设置方式 |
原理 |
| 牛奶 |
milk |
.setHarmedByPepsin() |
动物蛋白 |
| 牛肉炖菜 |
beef_stew |
.setHarmedByPepsin() |
含肉类 |
| 鸡汤 |
chicken_soup |
.setHarmedByPepsin() |
含肉类 |
| 奶油蘑菇汤 |
cream_of_mushroom_soup |
.setHarmedByPepsin() |
含奶制品 |
| 奶油蔬菜汤 |
cream_of_vegetable_soup |
.setHarmedByPepsin() |
含奶制品 |
| 土豆泥 |
mashed_potato |
.setHarmedByPepsin() |
可能含奶制品 |
| 冰淇淋 |
ice_cream |
.setHarmedByPepsin() |
含奶制品 |
| 肉类 |
meat |
.setHarmedByPepsin() |
纯动物蛋白 |
| 馅饼 |
pie |
.setHarmedByPepsin() |
可能含蛋类 |
| 谷物 |
cereal |
.setHarmedByPepsin() |
可能含奶制品 |
| 奶酪 |
cheese |
.setHarmedByPepsin() |
奶制品 |
特殊材料
| 材料名称 |
英文名称 |
设置方式 |
原理 |
| 蛋糕 |
cake |
.setHarmedByPepsin() |
含蛋和奶制品 |
🟢 抗胃蛋白酶腐蚀的材料 (is_harmed_by_pepsin = false)
所有金属和矿物材料
- 所有金属材料默认抗胃蛋白酶
- 所有岩石矿物材料默认抗胃蛋白酶
植物性食品
| 材料名称 |
英文名称 |
原理 |
| 蘑菇炖菜 |
mushroom_stew |
纯植物性 |
| 蔬菜汤 |
vegetable_soup |
纯植物性 |
| 南瓜汤 |
pumpkin_soup |
纯植物性 |
| 果汁冰糕 |
sorbet |
纯植物性 |
| 沙拉 |
salad |
纯植物性 |
| 水果 |
fruit |
纯植物性 |
| 蔬菜 |
vegetable |
纯植物性 |
| 面包 |
bread |
纯植物性 |
| 甜点 |
desert |
纯植物性(无蛋奶) |
| 粥 |
porridge |
纯植物性 |
| 糖 |
sugar |
植物提取物 |
| 面粉 |
flour |
植物制品 |
| 面团 |
dough |
植物制品 |
| 种子 |
seed |
植物种子 |
腐蚀实体分类详细表
凝胶立方体类型及其完整特性
| 实体类型 |
中文名称 |
腐蚀类型 |
攻击倍数 |
掉落物subtype |
粒子效果 |
免疫伤害 |
| EntitySlime |
史莱姆 |
胃蛋白酶 |
1 |
0 |
slime |
雪球 |
| EntityJelly |
胶体 |
胃蛋白酶 |
2 |
1 |
ochre_jelly |
雪球 |
| EntityBlob |
血团 |
胃蛋白酶 |
3 |
2 |
crimson_blob |
雪球 |
| EntityOoze |
软泥 |
酸性 |
3 |
3 |
gray_ooze |
熔岩、魔法、雪球 |
| EntityPudding |
布丁 |
酸性 |
4 |
4 |
black_pudding |
火焰、熔岩、魔法、雪球 |
凝胶球体的伤害分配详情
// 基于subtype的伤害类型分配
subtype 0 (绿色) → DamageSource.pepsin (胃蛋白酶)
subtype 1 (赭色) → DamageSource.pepsin (胃蛋白酶)
subtype 2 (深红) → DamageSource.pepsin (胃蛋白酶)
subtype 3 (灰色) → DamageSource.acid (酸性)
subtype 4 (黑色) → DamageSource.acid (酸性)
攻击伤害计算详情
// 球体攻击伤害 = subtype < 3 ? subtype + 1 : subtype
绿色球体 (subtype=0): 1点伤害
赭色球体 (subtype=1): 2点伤害
深红球体 (subtype=2): 3点伤害
灰色球体 (subtype=3): 3点伤害
黑色球体 (subtype=4): 4点伤害
// 立方体攻击强度 = 实体大小 × 类型攻击倍数
史莱姆: 大小 × 1
胶体: 大小 × 2
血团: 大小 × 3
软泥: 大小 × 3
布丁: 大小 × 4
腐蚀计算机制详解
方块腐蚀公式
实际腐蚀时间(秒) = 方块基础腐蚀周期(tick) ÷ 20 ÷ 腐蚀实体大小
腐蚀进度每秒增加值 = 实体大小
完成腐蚀条件: 累积进度 >= 基础腐蚀周期(秒)
进度追踪系统详解
// 主要追踪数组: int[384] (64个方块 × 6个字段)
字段0: 方块ID
字段1: 维度ID
字段2: X坐标
字段3: Y坐标
字段4: Z坐标
字段5: 腐蚀进度
// 扩展追踪列表: List<int[]> 用于超出64个方块限制的情况
视觉和音效系统
腐蚀效果差异化
// 酸性腐蚀效果
EnumBlockFX.smoke_and_steam // 烟雾 + 蒸汽
// 胃蛋白酶腐蚀效果
EnumBlockFX.steam // 仅蒸汽
// 进行中的腐蚀
EnumBlockFX.steam_particles_only // 仅蒸汽粒子
音效系统
// 接触腐蚀音效
"random.fizz" // 嘶嘶声,音调1.6 + 随机变化
// 实体音效
"mob.slime.big" // 大型史莱姆音效
"mob.slime.small" // 小型史莱姆音效
特殊交互机制
容器液体交互
// 熔岩容器 → 石头容器 (对凝胶体造成5点伤害)
if (contents == Material.lava) {
this.attackEntityFrom(new Damage(DamageSource.lava, 5.0F));
entity_item.convertItem(item_vessel.getPeerForContents(Material.stone));
}
// 水容器 → 空容器 (无伤害)
else if (contents == Material.water) {
entity_item.convertItem(item_vessel.getEmptyVessel());
}
箭矢腐蚀机制
// 只有酸性实体会腐蚀箭矢
if (this.isAcidic()) {
ItemArrow item_arrow = entity_arrow.item_arrow;
if (item_arrow.isHarmedByAcid()) {
entity_arrow.entityFX(EnumEntityFX.steam_with_hiss);
return; // 箭矢被销毁,不被收集
}
}
装备腐蚀计算
// 玩家装备受损计算
if (player.inventory.takeDamage(
player.getHeldItemStack(), // 被腐蚀的物品
this.getDamageTypeVsItems(), // 腐蚀类型
(float)this.getAttackStrengthMultiplierForType() // 腐蚀强度
)) {
player.entityFX(EnumEntityFX.steam_with_hiss); // 视觉反馈
}
// 全身装备腐蚀 (仅限凝胶立方体攻击玩家时)
if (target.isEntityPlayer()) {
target.getAsPlayer().dealDamageToInventory(
this.getDamageTypeVsItems(), // 腐蚀类型
0.05F * (float)this.getSize(), // 基础腐蚀率 × 实体大小
(float)this.getAttackStrength(), // 攻击强度
true // 影响全身装备
);
}
性能优化建议
1. 内存使用优化
- 当前问题: 固定384长度数组,即使只腐蚀少量方块也占用完整内存
- 建议方案: 使用
Map<BlockPosition, CorrosionProgress> 动态分配
2. 计算频率优化
- 当前频率: 每20tick(1秒)执行一次腐蚀计算
- 建议: 根据腐蚀实体数量动态调整计算频率
3. 范围查询优化
- 当前问题: 每次都遍历完整的方块数组
- 建议: 使用空间索引加速范围查询
平衡性分析
攻击倍数差异
- 史莱姆(1倍) → 布丁(4倍),差异过大
- 建议调整为更平滑的递增:1, 1.5, 2, 2.5, 3
材料抗性合理性
- 金属分类基本符合化学原理
- 有机材料的胃蛋白酶敏感性设计合理
- 岩石矿物的抗酸性符合地质学
扩展性建议
1. 百分比抗性系统
// 当前: boolean is_harmed_by_acid
// 建议: float acid_resistance_percentage // 0.0-1.0
2. 多级腐蚀速度
// 建议增加腐蚀速度等级
enum CorrosionRate { SLOW, NORMAL, FAST, INSTANT }
3. 环境因素影响
// 建议增加环境因素
- 湿度影响腐蚀速度
- 温度影响化学反应
- pH值影响酸性腐蚀效果
结论
MITE MOD的腐蚀系统展现了出色的设计理念:
- 简洁性: 布尔值系统易于理解和维护
- 现实性: 遵循真实化学和生物学原理
- 多样性: 5种不同腐蚀实体提供丰富体验
- 平衡性: 材料选择具有战略意义
- 扩展性: 架构支持未来功能扩展
这个系统成功地将复杂的现实世界腐蚀机制简化为可操作的游戏机制,是游戏设计中科学性与可玩性完美结合的典型例子。