欢迎光临散文网 会员登陆 & 注册

Crafttweaker(1.12.2)基础1:ZenGetter,ZenSetter,ZenMethod

2022-11-20 13:50 作者:IChixiao  | 我要投稿

哈,熬过了入门部分,好玩的来啦!


zs脚本有三个特有的术语:ZenGetter,ZenSetter与ZenMethod。ZenGetter用于获取特定对象的某种信息,ZenSetter用于设定特定对象的某种数据,ZenMethod其实就是方法,既可能获取信息又可能设定数据。


么说可能还是过于抽象了,我们跟着wiki慢慢来看:


、ZenGetter

https://docs.blamejared.com/1.12/en/Vanilla/Variable_Types/IIngredient#command-string

这里介绍的commandString就是典型的ZenGetter,在wiki中看到此类用法一要注意对什么对象使用,二要注意返回了什么类型——以此处的commandString为例,可以看到其位于IIngredient页面下,因此显然要对一个材料对象使用,形如:

举个例子(如wiki所示):

那么返回了什么类型呢?wiki也讲得很清楚了,返回的是一个字符串


、ZenSetter

https://docs.blamejared.com/1.12/en/Vanilla/Items/IItemStack#zengetterszensetters

这里则用表格的形式展示了一系列ZenGetter,ZenSetter。我们先关注ZenSetter,在wiki中看到此类用法一要注意对什么对象使用,二要注意赋值为什么类型——以表内的maxStackSize为例,可以看到其位于IItemStack页面下,因此显然要对一个物品堆对象使用,形如:

举个例子:

那么赋值为什么类型呢?wiki也讲得很清楚了,赋值为一个整型


、ZenMethod

而关于ZenMethod,我们在之前的章节其实已经多次见过了,入门2列出的一系列方法都是ZenMethod,在wiki中看到此类用法一要注意对什么对象使用;二要注意有无传入参数,若有参数则要注意需要多少参数、参数的类型是什么、参数是否可省略以及省略后默认是什么值,无参数则一定要注意不要忘了结尾的那对括号;三要注意有无返回值,若有返回值则要注意返回了什么类型,无返回值则说明这个ZenMethod可能用于设置数据(类似于ZenSetter),也可能用于引发一些“变化”或“事件”。


像……还是少了点什么?想必有人在看wiki时已经敏锐的注视到了,maxStackSize既是ZenSetter,又是ZenGetter,那么用起来的时候不会搞混吗?

答案是不会:

这里的前一个铁锭.最大堆叠数是ZenSetter,后一个铁锭.最大堆叠数是ZenGetter,在赋值时等号右边的ZenGetter先返回值64(即铁锭原本的最大堆叠数),等号左边的ZenSetter再赋值为32(即64-32),两者虽然同名但不会发生逻辑上的悖论。当然了,实际写的时候大可不必这么麻烦,直接写成:

即可,最终进入游戏后就可以发现铁锭的最大堆叠数变了。


,那么接下来我们简单地实战一下:

如何修改某种方块使之无法被左键采掘(已知这样的方块硬度为-1)?

首先既然要改方块,那当然是在wiki > Vanilla > Blocks里寻找(不会还有人以为Vanilla是香草的意思吧),最终不难在IBlockDefinition处找到:

根据https://docs.blamejared.com/1.12/en/Vanilla/Blocks/IBlockDefinition#zengetterszensetters

不难发现有hardness这一ZenSetter,于是有:

但是这里的对象需要我们得到一个IBlockDefinition的实例,怎么获得呢?我们需要找找有没有相关的ZenGetter或ZenMethod能够返回一个IBlockDefinition。

根据https://docs.blamejared.com/1.12/en/Vanilla/Blocks/IBlock#zengetters

不难发现有definition这一ZenGetter,于是有:

但是这里的对象需要我们得到一个IBlock的实例,所以我们还得找找有没有相关的ZenGetter或ZenMethod能够返回一个IBlock。

根据https://docs.blamejared.com/1.12/en/Vanilla/Items/IItemStack#block-casting

不难发现有asBlock()这一ZenMethod,于是有:

怎么返回一个IItemStack,相信你已经熟得不能再熟了吧。假设我们要修改的方块是仙人掌(仙人掌好扎手的),那么最终的答案就是:

进入游戏后就发现仙人掌无法再用左键采掘了(其实可以通过挖掉根部的沙子获得)


么基础1就到此为止了,到此为止你已经能够脱离本系列直接根据wiki写脚本了,请根据自己的需求大胆尝试吧。

Crafttweaker(1.12.2)基础1:ZenGetter,ZenSetter,ZenMethod的评论 (共 条)

分享到微博请遵守国家法律