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. 高级运用

自定义函数

函数可以用于计算结果也可以打包一系列操作。

基本格式

function 函数名(参数表) as 返回类型名 {
    [代码]
    return 函数返回值;
}

然而事实上,只有function关键字是必要的,若是一个不需要参数的函数,则不需要参数表,只有一对小括号;若不需要返回值,只是打包一些操作的话,则不需要as 返回类型名和return;如果这个函数需要的代码只需要一行,直接写在return所在的一行即可,不需要其他代码;没有函数名的函数称为匿名函数,这经常匹配到特定的function类用于作为特定方法的输入参数(高级用法将会经常用到)。

return关键字将会把指定的值返回至函数的调用点上,执行后续操作。若函数处理时,碰到return后,程序将跳出函数,不再执行之后的函数内操作(跳出所有循环)。所以一般return会在函数代码的最下方。

例子

例子一:getItemName函数,返回输入的IItemStack的物品名

function getItemName(input as IItemStack) as string {
    val id as string = input.definition.id;
    val meta as int = input.metadata;
    if (meta == 0){
        return id;
    } else return (id ~ ":" ~ meta);
}

例子二:将删合成和添加合成打包起来(打包操作不需要返回值)为了指定配方名用到了例子一的getItemName函数

function recipeTweak(isShaped as bool, out as IItemStack, input as IIngredient[][]) {
    val recipeName as string = getItemName(out);
    recipes.remove(out,true);
    if (isShaped) {
        recipes.addShaped(recipeName,out,input);
    } else {
        recipes.addShapeless(recipeName,out,input[0]);
    }
}

例子三:构建一个全局函数

global addition as function(int, int)int = function (a as int, b as int) as int {
    return a + b;
};
上一页穷举与遍历下一页配方函数与配方事件

最后更新于3年前

这有帮助吗?