Zentutorial
  • 首页
  • Zenscript
  • 简单运用
    • 局部变量
    • 尖括号调用
    • 工作台合成
      • 添加配方
      • 移除配方
      • Metadata
      • NBT
    • 熔炉配方
    • 矿物词典(Ore Dictionaries)
    • 物品名称修改
    • tooltips
      • 样式代码
    • 物品条件
    • 物品转换器
    • 掉落物
      • 打草掉落物
      • 生物掉落物
      • Dropt - 导言
        • Dropt - 方法速查
        • Dropt - 使用示例
    • 战利品表 : 导论
      • 战利品表修改(LootTableTweaker)
      • 战利品表修改(LootTweaker-基础)
    • 循环语句(foreach循环) / 普通数组
  • 高级运用
    • 概论
      • 基本类
      • ZenGetter
      • ZenSetter
      • ZenMethod(方法)
    • 常见错误
    • 基本运算
    • 数组与集合
    • 循环与遍历
    • 全局函数
    • Math包
    • if
    • in/has 操作符
    • 战利品表修改(LootTweaker-进阶)
    • 三元操作符
    • 预处理器
    • 全局和静态变量
    • 跨脚本引用
    • 关联数组(映射)
    • IItemStack类型的重新认识
    • IIngredient接口
    • IItemDefinition & IBlockDefinition
    • IData 类型
      • DataMap
    • 穷举与遍历
    • 自定义函数
    • 配方函数与配方事件
      • 配方函数
      • 配方事件
    • 事件概论
      • 一些忠告
    • ZenClass
  • ContentTweaker
    • ContentTweaker
    • 指令
    • 原版加工厂
      • 概论
      • 物品
      • 方块
      • 流体
      • 创造标签
      • 食物
    • 材料系统
      • 基础用法
        • 材料
        • 部件
        • 注册材料部件
        • 材料部件信息
      • 高级运用
        • 自定义部件类型
        • 注册自定义部件
        • 自定义材料部件信息
    • 高级运用
    • 更多鸡联动
    • 匠魂联动
      • 材料引导
        • 材料
        • 构建材料
      • 特性引导
        • 特性
        • 构建特性
        • 特性数据
      • 高级运用
  • 实战
    • 配方
      • 数据驱动合成修改
    • 事件
      • 修改方块掉落物
      • 禁止开创造
由 GitBook 提供支持
在本页
  • 标记
  • 数量
  • 或
  • 获得匹配的物品和流体

这有帮助吗?

  1. 高级运用

IIngredient接口

让我们重新看到最基本的合成添加语句:

recipes.addShaped(recipeName, output, inputBox);

实际上,output是IItemStack,而inputBox则是IIngredient的二维数组。

IIngredient——材料,它用来匹配一个合成的材料,输入或输出。IIngredient是IItemStack(物品堆)、IOreDictEntry(矿物辞典)、ILiquidStack(流体堆)的接口。这意味着IIngredient可用的方法,IItemStack、IOreDictEntry、ILiquidStack一样可用。对于一个需要IIngredient为参数的函数/方法或者定义IIngredient数组,也可以用IItemStack、IOreDictEntry、ILiquidStack输入。(你加合成的时候,用的不就是IItemStack或者IOreDictEntry嘛)实际上前文的物品条件和物品转换器就是针对IIngredient的。(对于流体不可用,不过我想没人对流体加条件)

需要import crafttweaker.item.IIngredient;导入有关包。

标记

使用marked方法用一个字符串标记一个材料,在下文的配方函数和配方事件中将会用到。

recipes.addShapeless("test002", <minecraft:stone:2>, 
[<minecraft:iron_ingot>.marked("iron"),<minecraft:dirt>]);

数量

你们早就知道用* 数量来表示数量吧。你可以使用amount ZenGetter获取一个材料对象的数量。

或

用|将两个材料连接起来,使得一个配方的某个槽可以使用材料A或材料B,而不用写多个配方。在某些时候,比OD更好用!

recipes.addShaped("te_frame_machine", <thermalexpansion:frame>,
[[<ore:ingotIron>|<ore:ingotAluminum>,<enderio:item_basic_capacitor>,<ore:ingotIron>|<ore:ingotAluminum>],
[<ore:blockGlass>,<ore:gearTin>,<ore:blockGlass>],
[<ore:ingotIron>|<ore:ingotAluminum>,<ore:blockGlass>,<ore:ingotIron>|<ore:ingotAluminum>]]);

获得匹配的物品和流体

用items或itemArray ZenGetter获取匹配的物品,返回IItemStack列表或数组。

用liquids ZenGetter获取匹配的流体,返回ILiquidStack列表。

//Returns an IItemStack List
//possible items: All iron ingots and the gold ingot from MC
val itemsIngredient = <ore:ingotIron> | <minecraft:gold_ingot>;


//Returns an ILiquidStack List
//possible liquids: Lava and Water
val liquidsIngredient = <liquid:lava> | <liquid:water>;


for item in itemsIngredient.items{
    //Prints each possible item's Display name
    print(item.displayName);
}

for item in itemsIngredient.itemArray{
    //Prints each possible item's Display name
    print(item.displayName);
}

for liquid in liquidsIngredient.liquids{
    //Prints each possible liquid's Display name
    print(liquid.displayName);
}
上一页IItemStack类型的重新认识下一页IItemDefinition & IBlockDefinition

最后更新于3年前

这有帮助吗?