Skip to content

MITE MOD 物品腐蚀系统完整机制分析 - 详细材料抗性表 #6

@Inf1nlty

Description

@Inf1nlty

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的腐蚀系统展现了出色的设计理念:

  1. 简洁性: 布尔值系统易于理解和维护
  2. 现实性: 遵循真实化学和生物学原理
  3. 多样性: 5种不同腐蚀实体提供丰富体验
  4. 平衡性: 材料选择具有战略意义
  5. 扩展性: 架构支持未来功能扩展

这个系统成功地将复杂的现实世界腐蚀机制简化为可操作的游戏机制,是游戏设计中科学性与可玩性完美结合的典型例子。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions