Skip to content

TFC金属板与Create金属板修复和安山合金锌锭合成修复#23

Open
dalizi2333 wants to merge 7 commits into
nuecloud:kubejsfrom
dalizi2333:kubejs
Open

TFC金属板与Create金属板修复和安山合金锌锭合成修复#23
dalizi2333 wants to merge 7 commits into
nuecloud:kubejsfrom
dalizi2333:kubejs

Conversation

@dalizi2333

@dalizi2333 dalizi2333 commented May 12, 2026

Copy link
Copy Markdown

第一次维护工作简述

主要完成3项工作,分别是为已有自定义配方指定配方ID,隔离TFC金属板与Create金属板并重新建立关联,补充安山合金缺失的锌锭合成配方

1.为已有自定义配方指定配方ID

问题背景

cbc_melting.js中批量添加的熔炼配方采用自动生成的哈希 ID(如 kubejs:shaped_abc123),难以定位和管理,于是决定开展手动指定配方ID的工作
并非所有的配方都需要手动指定配方ID,如果在kjs脚本中一个物品在一个类型的配方中只有一种合成方式,那么KubeJS会自动生成<命名空间>:<配方类型>/kjs/<产物名称>格式的配方ID
所以仅针对event_recipes.jscbc_melting.js中的部分配方进行了调整

解决方案

// event_recipes.js
event.recipes.tfc.heating('minecraft:iron_nugget',1500).fluidOutput(Fluid.of('tfc:metal/cast_iron', 10))
.id('kubejs:tfc/heating/tfc/metal/cast_iron/minecraft/iron_nugget')// 指定配方ID

event.recipes.tfc.heating('minecraft:iron_block', 1500).fluidOutput(Fluid.of('tfc:metal/cast_iron', 900))// 与上一个配方拥有完全相同的产出和配方类型,不指定配方ID的话会使用哈希ID
.id('kubejs:tfc/heating/tfc/metal/cast_iron/minecraft/iron_block')// 指定配方ID

// cbc_melting.js
const inputKey = ingredientArray.map(ing => {
    if (ing.item) {return `item/${ing.item.replace(':', '/')}`}
    if (ing.tag) {return `tag/${ing.tag.replace(':', '/')}`}
    return 'unknown'
}).join('_')
const fluidId = resultFluid.get('id').getAsString().replace(':', '/')
const recipeId = `kubejs:createbigcannons/melting/${fluidId}/${inputKey}_${recipeCounter++}`
event.custom({/* cbc熔炼配方参数 */}).id(recipeId)

2.隔离TFC金属板与Create金属板并重新建立关联

问题背景

在当前客户端/服务端中,Create 模组的冲压板与 TFC 的锻造薄板存在成本不平衡问题:

冲压板物品 对应 TFC 薄板 获取方式 金属锭消耗 当前加热产出
create:copper_sheet tfc:metal/sheet/copper Create 冲压(1铜锭) 1 200mB ❌
tfc:metal/sheet/copper - TFC 锻造(2铜锭) 2 200mB
create:brass_sheet tfc:metal/sheet/brass Create 冲压(1黄铜锭) 1 200mB ❌
tfc:metal/sheet/brass - TFC 锻造(2黄铜锭) 2 200mB
create:iron_sheet tfc:metal/sheet/wrought_iron Create 冲压(1铁锭) 1 ?(应产出铸铁液)
create:golden_sheet tfc:metal/sheet/gold Create 冲压(1金锭) 1 ?
createdeco:zinc_sheet tfc:metal/sheet/zinc Create 冲压(1锌锭) 1 ❌ 无加热配方

TFC 金属温度参考

金属 近似温度 (°C) 加热需求
1080 heated
黄铜 940 heated
1538 superheated
1064 heated
419 heated

铁的特殊处理

重要:铁板加热应产出铸铁液(tfc:metal/cast_iron),而非纯铁液。冲压铁板塑形应产出锻铁板(tfc:metal/sheet/wrought_iron)。

问题影响

Create 的金属板只需要一个金属锭就能冲压得到,但却能熔化出两个金属锭量的熔融金属,这意味着可以通过反复熔炼并冲压的方式无限刷取金属锭,严重破坏游戏经济平衡。

配方溯源

当前 TFC 模组中的加热(kubejs:tfc/heating)配方为了自动兼容科技模组的量产金属板手段,直接使用了如 #c:sheets/<金属类型> 的公共标签作为输入,这导致同样属于该标签的 Create 金属板被误判为 TFC 锻造板进行熔炼。

解决方案

步骤一:隔离配方标签

TFC 相关模组(['tfc','firmalife','tfcastikorcarts','tfc_items','tfcfertigation'])不再自动识别 #c:sheets/<金属类型> 标签,而是创建独立的 kubejs:tfc_single_sheets/<金属类型> 标签,确保 Create 金属板不会被当成 TFC 锻造板去熔炼。

// stamped_sheets_fix.js
singleSheetsMetalList.forEach(itemID => {
    const metalType = itemID.split('/')[2]
    event.replaceInput(
        {mod: mod},// TFC相关mod
        `#c:sheets/${metalType}`,// 公共的金属板标签
        `#kubejs:tfc_single_sheets/${metalType}`// 额外创建的独立TFC单金属板标签
    )
})

步骤二:建立关联配方

重新建立 Create 冲压板与 TFC 锻造板之间的合理转换途径:

// stamped_sheets_fix.js
// 1. 冲压板熔化配方(产出100mB金属液,匹配1个金属锭的消耗)
// 1.1 TFC加热配方
event.recipes.tfc.heating(data.sheetItemID, data.temperature)
    .fluidOutput(Fluid.of(data.fluidID, data.fluidAmount))
    .id(tfcHeatingRecipeId)
// 1.2 Create Big Cannons熔化配方
event.custom({/* cbc熔炼配方参数 */}).id(recipeId)

// 2. 冲压板与锻造板双向转换
// 2.1 冲压板 -> 锻造板(2个冲压板 + 助焊剂)
compactingRecipe = event.recipes.create.compacting(data.tfcItemID,
    [Ingredient.of(`#${data.tagID}`, 2), Ingredient.of(`tfc:powder/flux`)])
if (data.temperature > 1080) {compactingRecipe.superheated()} 
else {compactingRecipe.heated()}
compactingRecipe.id(plateToSheetCompactingRecipeId)

// 2.2 锻造板 -> 冲压板(1个锻造板切为2个冲压板)
event.recipes.create.cutting(`2x ${data.sheetItemID}`, `${data.tfcItemID}`)
    .id(sheetToPlateCuttingRecipeId)

配置数据组织结构优化

为方便后续维护和调试,将stamped_sheets_fix.js中的配置数据(otherModPlateMaptfcMods)从分散位置集中到脚本开头的"配置数据区域":

// stamped_sheets_fix.js - 配置数据区域(第18-38行)

// 其他模组冲压板映射表
// 用途:建立Create等模组的冲压板与TFC锻造板的对应关系
// 格式: c:plates/<材料> -> {item: 冲压板物品ID, temperature: 熔化温度(摄氏度)}
const otherModPlateMap = {
    'c:plates/copper':          {'item':'create:copper_sheet','temperature':1080},
    'c:plates/wrought_iron':    {'item':'create:iron_sheet','temperature':1538},
    'c:plates/gold':            {'item':'create:golden_sheet','temperature':1064},
    'c:plates/brass':           {'item':'create:brass_sheet','temperature':940},
    'c:plates/zinc':            {'item':'createdeco:zinc_sheet','temperature':419}
}

// TFC及其附属模组列表
// 这些模组的配方如果使用了c:sheets/*标签,都需要替换
const tfcMods = ['tfc','firmalife','tfcastikorcarts','tfc_items','tfcfertigation']

优化效果:配置数据集中在脚本开头,便于快速定位和修改;无需处理文件加载、路径、全局对象等复杂问题。

3. 安山合金锌锭合成修复

问题背景

在当前客户端/服务端中,Create 模组的安山合金只能使用锻铁锭进行合成

// event_recipes.js
event.shapeless(Item.of('create:andesite_alloy', 8), [
    '#c:cobblestones',
    '#c:ingots/iron'
])

但根据Create模组中已有的配方,锌应该能完全替代铁去参与合成

解决方案

// event_recipes.js
  // 配方1:铁锭版本
  event.shapeless(Item.of('create:andesite_alloy', 8), [
      '#c:cobblestones',
      '#c:ingots/iron'
  ]).id('kubejs:create/andesite_alloy_iron')
  // 配方2:锌锭版本
  event.shapeless(Item.of('create:andesite_alloy', 8), [
      '#c:cobblestones',
      '#c:ingots/zinc'
  ]).id('kubejs:create/andesite_alloy_zinc')

总结

本次维护工作共完成 3 项核心任务

序号 工作内容 核心目标 涉及文件
1 配方ID规范化 解决自动生成的哈希ID难以定位和管理的问题 event_recipes.jscbc_melting.js
2 TFC与Create金属板隔离 修复金属锭刷取漏洞,恢复游戏经济平衡 stamped_sheets_fix.js
3 安山合金锌锭合成 补充缺失的合成配方,完善游戏体验 event_recipes.js

技术亮点

  • 通过标签替换机制实现了模组间物品的隔离,不影响其他模组的正常运作
  • 建立了合理的双向转换配方,既保证平衡性又保持玩法灵活性
  • 优化了配置数据结构,提高了脚本的可维护性和可调试性

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant