Minecraft(我的世界)中文论坛

标题: 从零开始学魔改(适用于1.12.2CraftTweaker)

作者: youyihj    时间: 2019-9-14 20:11
标题: 从零开始学魔改(适用于1.12.2CraftTweaker)
本帖最后由 youyihj 于 2020-12-29 17:47 编辑

Gitbook 链接:
https://youyi580.gitbook.io/zentutorial/


以下为前言内容:
1.12.2的CraftTweaker,作为1.7.10的MineTweaker的继承,它具有更为强大的功能,能实现很多的设想。MT的wiki自然没有CrT的很多功能的叙述,而CrT的wiki篇目完全按照字母排序,最基本的工作台更改,藏在Vanilla - Recipes - Crafting Table Recipes,非常不便于新手使用。本篇教程将对其重新编排,让新手一步步走向高深。
本教程适用于1.12.2


啥?你说MoT和其他mod机器对CrT支持?大部分都是一个函数套过去就好了,过于简单。用法查对应wiki就行。不过,你可以去瞧瞧MM(Modular Machinery)


本篇教程部分内容来自或参考以下教程的一些部分,感谢前人的教程:


尚未完工内容:

使用CC BY-NC-SA 4.0 协议


如有问题,可到 QQ 群 874513506 进行更多交流。
[groupid=1496]MC百科[/groupid]
作者: 迷茫的过去    时间: 2019-9-14 21:07
又有大大出教程了,前排观望
作者: 天明遥遥    时间: 2019-9-16 23:53
本帖最后由 1094822247 于 2019-9-18 13:12 编辑

楼主有空的话准备一张图,在这里申请提交一下 Mod发布版banner  
自愿申请,什么时候都行
作者: 117779284    时间: 2019-9-17 18:41
这应该算是维基翻译
作者: youyihj    时间: 2019-9-17 22:31
117779284 发表于 2019-9-17 18:41
这应该算是维基翻译

有很多我自己修改的描述和我自己的例子,不算wiki翻译啦
作者: 3TUSK    时间: 2019-9-18 19:51
1.12中Mojang移除了IRecipe,每个配方以一个json文件储存,同时每个配方有一个ID。


事实错误。IRecipe 一直存在,上到最新的 1.14.4(笔者写下这个回复的时候)下到 1.7.10(甚至更久远)都有这么一个类。



以下内容需要有一定 Mod 开发经验方能正确理解:




不知楼主是从哪里看到的这个说法?笔者觉得这个说法相当眼熟,但是找不到出处。
作者: 机械自律体    时间: 2019-9-21 10:02
大佬厉害,谢谢您。
或许可以提交到中文ctwiki那里去
作者: Vandarkblue    时间: 2019-9-22 17:38
本帖最后由 Vandarkblue 于 2019-9-22 17:41 编辑

简单运用>矿物词典 这一节中第五段的 addAll 语句:
矿典名称.addAll(矿典名称);   //将某个矿物词典中所有物品列入到另一个矿物词典下

那么到底是把哪一个矿典列入哪一个之下呢?它和下文的 mirror 语句又有什么区别呢?
作者: youyihj    时间: 2019-10-1 10:05
本帖最后由 友 于 2019-10-2 16:09 编辑

ContentTweaker

ContentTweaker(CoT)是CrT的一个扩展,允许用ZenScript为游戏添加自定义物品、方块。魔改真正往游戏内容伸向“魔爪”!
CoT的脚本第一行应为#loader contenttweaker来指定该脚本由CoT加载。


搬运帖
指令

原版加工厂概论


物品


方块



流体


创造标签


尚未完工(剩余内容:材料系统)




作者: CheatDiamond    时间: 2019-10-2 21:15
就说你真么没掉。。
原来弄了个这个.
然而我不会cot。。。
不知道真么添加将魂材料,,。。

作者: sxamzxv    时间: 2019-10-4 16:31
友 发表于 2019-10-1 10:05
ContentTweaker
[markdown]ContentTweaker(CoT)是CrT的一个扩展,允许用ZenScript为游戏添加自定义物品、方 ...

看过后无发现我还是安安心心的学习学习c语言再来魔改吧这个掉头发
作者: 1430697804    时间: 2019-10-7 00:29
可以将所有带有Logwood词条的物品输出至某个数组中以方便统一添加or删除对应的合成表么?
(比分说橡木拆分橡木板,Root的野木拆分野木木板,而两者都在<ore:logwood>中)
或者直接用尖括号引用矿词就已经可以完成类似的操作了?
作者: youyihj    时间: 2019-10-7 12:36
1430697804 发表于 2019-10-7 00:29
可以将所有带有Logwood词条的物品输出至某个数组中以方便统一添加or删除对应的合成表么?
(比分说橡木拆分 ...

理论上用<ore:logWood>.items可以获取包含所有原木的数组,但我就不保证顺序是对的了
作者: h316098438    时间: 2019-10-10 14:56
受教了,crafttweaker不研究下是真的难。目前只魔改了植物和匠魂
作者: flamedark    时间: 2019-10-20 11:44
够了,这让我想起了该死的VB
作者: 大小姐MC    时间: 2019-10-27 15:26
本帖最后由 大小姐MC 于 2019-10-27 15:32 编辑

支持楼主 不过能有一些例子就更好了 不然总是有点看不懂

列表比较难看懂
.maxStackSize = ;
可以修改物品的最大堆叠

例子
<minecraft:apple>.maxStackSize = 32;
把苹果的最大堆叠数量设置为32个

.maxDamage = ;
可以修改物品的耐久

例子
<minecraft:wooden_axe>.maxDamage = 100;
将木斧的耐久修改为100

<minecraft:wooden_axe>.maxDamage = 0;
将木斧设置为使用不掉耐久(无法破坏)

<chickens:liquid_egg>.clearTooltip();
比如上面这个我看了半天才看懂
我看成了item.clearTooltip(<chickens:liquid_egg>);
然后去看了wiki才明白的

作者: youyihj    时间: 2019-10-27 22:12
本帖最后由 友 于 2019-10-27 23:08 编辑
大小姐MC 发表于 2019-10-27 15:26
支持楼主 不过能有一些例子就更好了 不然总是有点看不懂

列表比较难看懂

概论--ZenSetter章节已经有全局例子了
修改生物掉落物的例子,entity是个变量,给了羊,不会看不出来吧?

作者: 1510525311    时间: 2019-10-31 19:07
为什么修改原木的挖掘等级后,还能用手撸获取

作者: 唱片机    时间: 2019-11-1 22:18
//学习到了!初级使用!
<minecraft:stone:1>.addTooltip("花岗岩(Granite)美观、耐久、非常坚硬。");
<minecraft:stone:1>.addTooltip(format.lightPurple(("愿意带着" + format.underline("花岗岩脑袋") + "去见上帝")) + "2333");
<minecraft:stone:1>.addShiftTooltip("石英含量是各种岩浆岩中最多的,其含量可从20—50%,少数可达50—60%。");

2019-11-01_22.15.19.png (297.75 KB, 下载次数: 1)

2019-11-01_22.15.19.png

2019-11-01_22.15.16.png (318.48 KB, 下载次数: 6)

2019-11-01_22.15.16.png

作者: Loginzz    时间: 2019-12-29 11:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: 499628539    时间: 2020-1-1 21:34
可以做盔甲么?我在wiki上没有看到相关的单词但又不能保证自己真的每一个单词都理解对了
作者: youyihj    时间: 2020-1-1 21:52
499628539 发表于 2020-1-1 21:34
可以做盔甲么?我在wiki上没有看到相关的单词但又不能保证自己真的每一个单词都理解对了 ...

貌似只能凭借材料系统现成的armor part,总之很鸡肋。
作者: 499628539    时间: 2020-1-1 21:57
友 发表于 2020-1-1 21:52
貌似只能凭借材料系统现成的armor part,总之很鸡肋。

意思是,可以通过string = “helmet”穿到身上,但是没办法显示出3d模型也无法应用护甲值只能使用nbt上保护附魔来达到盔甲的效果?
作者: Ruang_Feng    时间: 2020-1-3 18:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: youyihj    时间: 2020-1-3 21:57
Ruang_Feng 发表于 2020-1-3 18:52
这其中似乎出了点问题。首先"矿典名称B"才是被映射的而不是被映射的,"矿典名称A"才是映射到的地方。
比如 ...

了解,但是实际编写,除非这些物品完全等价,否则千万不要把他加进同一个矿辞。别忘记各mod的矿辞转换器。
我更推荐用材料接口的或使得某个合成的某个槽可以使用多种物品。
作者: Ruang_Feng    时间: 2020-1-3 22:40
提示: 作者被禁止或删除 内容自动屏蔽
作者: anrdblue    时间: 2020-1-4 16:42
原版加工包加工包究竟是什么?
我这边照着你的样板做的,进游戏就是不显示出来
作者: youyihj    时间: 2020-1-4 21:50
anrdblue 发表于 2020-1-4 16:42
原版加工包加工包究竟是什么?
我这边照着你的样板做的,进游戏就是不显示出来 ...

不要忘记最后要注册。
即对每个对象使用register方法。
作者: Geomancy    时间: 2020-1-6 13:18
这有点难呀

作者: anrdblue    时间: 2020-1-8 21:42
友 发表于 2020-1-4 21:50
不要忘记最后要注册。
即对每个对象使用register方法。

求教一下完整的格式
作者: youyihj    时间: 2020-1-8 21:44
anrdblue 发表于 2020-1-8 21:42
求教一下完整的格式

???我的例子的最后一行就是注册啊?
你的脚本给我康康。
作者: anrdblue    时间: 2020-1-8 22:53
友 发表于 2020-1-8 21:44
???我的例子的最后一行就是注册啊?
你的脚本给我康康。

哦找到了!在创造标签那一栏啊
作者: anrdblue    时间: 2020-1-8 23:32
友 发表于 2020-1-8 21:44
???我的例子的最后一行就是注册啊?
你的脚本给我康康。

还是不行啊,报错
ERROR:Could not find Material for name contenttweaker
ERROR:[contenttweaker]:Error executing {[0:contenttweaker]:item.zs}:
java.lang.NullPointerException

我写的脚本
#loader contenttweaker
import mods.contenttweaker.VanillaFactory;
import mods.contenttweaker.Item;

//茅草
val item0 as Item = VanillaFactory.createItem("item0");
item0.creativeTab = <creativetab:contenttweaker>;

//注册
item0.register();
作者: youyihj    时间: 2020-1-9 21:51
anrdblue 发表于 2020-1-8 23:32
还是不行啊,报错
ERROR:Could not find Material for name contenttweaker
ERROR:[contenttweaker]:Erro ...

你还没注册创造标签啊?
去掉item0.creativeTab那一行
你只需要创建一个物品然后注册即可
作者: anrdblue    时间: 2020-1-9 22:01
友 发表于 2020-1-9 21:51
你还没注册创造标签啊?
去掉item0.creativeTab那一行
你只需要创建一个物品然后注册即可 ...

昨晚问了群里的大佬,已经搞定了,我只要贴图,改贴图和名字挺快的(就是复制黏贴还有改数字加中文比较累)
作者: youyihj    时间: 2020-1-11 18:22
anrdblue 发表于 2020-1-9 22:01
昨晚问了群里的大佬,已经搞定了,我只要贴图,改贴图和名字挺快的(就是复制黏贴还有改数字加中文比较累 ...

你的物品ID难道是item0 item1 item2这样的吗????
如果你是这样,那么
for i in 0 .. 100 {
    VanillaFactory.createItem("item" ~ i).register();
}

一次性创建100个物品
作者: 352401049    时间: 2020-1-11 20:05
MCBBS有你更精彩~
作者: 378593424    时间: 2020-1-17 03:37
爱了爱了
作者: LanLan233    时间: 2020-1-17 21:14
谢谢大佬分享
作者: 幻境雲達達    时间: 2020-1-21 19:16
用这个能改拔刀剑合成么
作者: youyihj    时间: 2020-1-21 19:23
本帖最后由 友 于 2020-1-21 19:24 编辑
刘先生。 发表于 2020-1-21 19:16
用这个能改拔刀剑合成么

加合成表,啥东西都可以。

删合成,我记得没错的话,拔刀是按NBT区分的。你需要在recipes.remove方法再加一个参数,决定其匹配NBT。
  1. recipes.remove(拔刀ID+NBT, true);
复制代码


或者JEI(打开高级提示框),找到你要删除的配方的ID,使用recipes.removeByRecipeName方法来删除。
作者: AS885    时间: 2020-2-6 16:46
请问这个mod可以修改酿造台的配方吗?比如增加可以酿造的药水
作者: youyihj    时间: 2020-2-6 16:51
AS885 发表于 2020-2-6 16:46
请问这个mod可以修改酿造台的配方吗?比如增加可以酿造的药水

https://docs.blamejared.com/1.12 ... ipes_Brewing_Stand/
作者: AS885    时间: 2020-2-8 12:19
友 发表于 2020-2-6 16:51
https://docs.blamejared.com/1.12/en/#Vanilla/Recipes/Recipes_Brewing_Stand/

谢谢楼主,我看了页面然后大概弄了一个脚本,但是根据提示好像有问题,请问可以帮我看一下吗
val potion = <minecraft:potion>.withTag({
    CustomPotionEffects:[{
        Id: 5 as byte,
        Amplifier: 2 as byte,
        Duration: 1800 as int,
        ShowParticles: 0 as byte,
        }],
        display: {
            Name: "§r力量药水"
        }
        });

brewing.addBrew([<minecraft:potion>.withTag({Potion:"minecraft:strong_strength"}]), <minecraft:glowstone_dust>, <potion:1>);
作者: anrdblue    时间: 2020-2-8 20:26
提问,创建的流体如何换名字?我用displayName没成功
作者: youyihj    时间: 2020-2-8 20:29
anrdblue 发表于 2020-2-8 20:26
提问,创建的流体如何换名字?我用displayName没成功

本地化,写语言文件。 key为fluid.流体ID
作者: anrdblue    时间: 2020-2-12 12:13
友 发表于 2020-2-8 20:29
本地化,写语言文件。 key为fluid.流体ID

不明白,是写lang?放在那?CT里面么?
作者: youyihj    时间: 2020-2-12 12:14
anrdblue 发表于 2020-2-12 12:13
不明白,是写lang?放在那?CT里面么?

写lang     
作者: anrdblue    时间: 2020-2-13 12:36
问一下,CT制作的方块支不支持用overlay提供贴图?还有支不支持mcmeta动态图片?
作者: youyihj    时间: 2020-2-13 12:53
anrdblue 发表于 2020-2-13 12:36
问一下,CT制作的方块支不支持用overlay提供贴图?还有支不支持mcmeta动态图片? ...

应该都支持。不过要用overlay你需要修改下方块模型
作者: anrdblue    时间: 2020-2-13 13:54
友 发表于 2020-2-13 12:53
应该都支持。不过要用overlay你需要修改下方块模型

我在你的创造标签例子和方块例子改的,想把方块放在独立的标签里面
然后启动以后显示了报错
All registering must happen before registry event

//创建标签
val spare_parts as CreativeTab = VanillaFactory.createCreativeTab("spare_parts", <item:minecraft:dragon_egg>);
spare_parts.register();
val rubber_ring as Item = VanillaFactory.createItem("rubber_ring");
rubber_ring.creativeTab = <creativetab:spare_parts>;
rubber_ring.register();
//玛玉灵齿轮箱
var gearbos_manyullyn as Block = VanillaFactory.createBlock("gearbos_manyullyn", <blockmaterial:ice>);
gearbos_manyullyn.lightOpacity = 3;
gearbos_manyullyn.blockHardness = 1.0;
gearbos_manyullyn.blockResistance = 5.0;
gearbos_manyullyn.toolClass = "pickaxe";
gearbos_manyullyn.toolLevel = 0;
gearbos_manyullyn.blockSoundType = <soundtype:metal>;
gearbos_manyullyn.creativeTab = <creativetab:materials.base>;
gearbos_manyullyn.register();
作者: youyihj    时间: 2020-2-13 13:57
anrdblue 发表于 2020-2-13 13:54
我在你的创造标签例子和方块例子改的,想把方块放在独立的标签里面
然后启动以后显示了报错
All register ...

你落了#loader contenttweaker
作者: anrdblue    时间: 2020-2-13 21:09
友 发表于 2020-2-8 20:29
本地化,写语言文件。 key为fluid.流体ID

fluid.ct_mana.name=魔力
然后游戏里显示的还是fluid.ct_mana桶,写了lang放在里面的也没用啊
作者: youyihj    时间: 2020-2-13 21:10
anrdblue 发表于 2020-2-13 21:09
fluid.ct_mana.name=魔力
然后游戏里显示的还是fluid.ct_mana桶,写了lang放在里面的也没用啊 ...

去掉.name
作者: AS885    时间: 2020-2-14 16:14
从循环语句开始往后几乎都看不懂,请问有更详细的教程吗

作者: swordblood    时间: 2020-2-28 16:20
已收藏谢谢楼主
作者: 青芦叶    时间: 2020-3-10 21:57
本帖最后由 青芦叶 于 2020-3-16 20:43 编辑

从大佬的回答找到了大佬发的教程。
看了这个教程终于学会魔改整合包了

作者: AS885    时间: 2020-3-21 09:24
尝试了给的工具升级脚本,但是提示could not find input,虽然工具可以升级但是并没有保留附魔
作者: youyihj    时间: 2020-3-21 09:26
AS885 发表于 2020-3-21 09:24
尝试了给的工具升级脚本,但是提示could not find input,虽然工具可以升级但是并没有保留附魔 ...

emmmm 把里面的input改成ins,gitbook内的教程已更正~
作者: 优_克莉伍德    时间: 2020-3-25 09:59
这可太牛了,秀秀秀
作者: Suzj    时间: 2020-4-3 14:49
感谢大佬分享

作者: bedroce    时间: 2020-4-13 10:50
好难啊,感觉又要崩溃了

作者: 腾讯会议    时间: 2020-4-15 19:45
有序合成一定要分行吗
作者: youyihj    时间: 2020-4-15 22:15
腾讯会议 发表于 2020-4-15 19:45
有序合成一定要分行吗

可以不分行,但为了可读性,建议分行。
作者: 473937269    时间: 2020-4-16 22:29
支持一下 感谢分享 正好1.12魔改不会
作者: ong419    时间: 2020-4-17 22:08
那啥,合成表内物品的NBT若是想需求不是简单的等于,而是不小于某个数,该怎么做呢?比如说要求一把拔刀剑必须要有10000的ProudSoul才能参与合成,用了only_____AtLeast好像是不行的,报错了。
作者: ichigosama    时间: 2020-4-20 06:38
作为一个魔改深度爱好者,不得不赞一个
作者: wgt20021231    时间: 2020-4-20 23:43
掉头发掉头发
作者: youyihj    时间: 2020-4-26 00:17
ong419 发表于 2020-4-17 22:08
那啥,合成表内物品的NBT若是想需求不是简单的等于,而是不小于某个数,该怎么做呢?比如说要求一把拔刀剑 ...

请查阅idata和配方函数章节。
作者: Mr.时间之瓶    时间: 2020-4-29 11:32
添加
基本格式:furnace.addRecipe(output, input, xp);

移除
基本格式:furance.remove(output, input);

打错了可还行

作者: wnxzlf    时间: 2020-5-1 19:51
但是可视化编辑的删除并不能用?
作者: Az_Dreamer    时间: 2020-5-10 14:43
1.15版好像有些东西像item.Anydamage()都不能用了,能用withdamage代替anydamage吗?(有代表任意数的符号吗?)
还有熔炉配方也好像用不了了……
作者: youyihj    时间: 2020-5-10 21:49
Az_Dreamer 发表于 2020-5-10 14:43
1.15版好像有些东西像item.Anydamage()都不能用了,能用withdamage代替anydamage吗?(有代表任意数的符号 ...

本篇教程只讨论1.12.2
1.15的话…… 挺难受的,限制很大。我还是搞不懂recipetype。
作者: 小浪47一一一    时间: 2020-5-30 21:07
3,2,1,晕!
作者: 幻承    时间: 2020-6-2 20:26
魔改  啊啊啊啊啊  整的我快魔怔了

作者: liu765222    时间: 2020-6-6 11:44
顶啊  给力
作者: woshimowang    时间: 2020-7-22 13:24
youyihj 发表于 2019-10-1 10:05
ContentTweaker

搬运帖

香草加工厂~
作者: many先生    时间: 2020-8-4 07:03
帮忙顶一顶
作者: 傲普斯顿    时间: 2020-8-10 19:00
大佬  我想问个问题  怎么添加其他mod特有的物品合成方式的合成表呢?  比如无尽贪婪的终极合成   神秘时代的奥术注魔  我最近在做一个魔法类的整合包 我把等价的转化桌给魔成了这样   感觉还是不够难  想让它添加到神秘时代的奥术注魔中去  这点CT能实现吗?

但是我添加的明明是盖亚魂锭的矿辞   为什么变成魔力钢锭了?是我没加矿辞统一吗?   这两ID都是一样的


作者: youyihj    时间: 2020-8-10 20:07
本帖最后由 youyihj 于 2020-8-10 21:32 编辑
傲普斯顿 发表于 2020-8-10 19:00
大佬  我想问个问题  怎么添加其他mod特有的物品合成方式的合成表呢?  比如无尽贪婪的终极合成   神秘时代 ...

当然可以,自己去CrT/对应模组的wiki看,或寻找其他教程。这种简单的填空题不在本教程的范围内。

后面那个问题,善用 /ct hand

作者: 傲普斯顿    时间: 2020-8-11 11:13
本帖最后由 傲普斯顿 于 2020-8-11 11:16 编辑
youyihj 发表于 2020-8-10 20:07
当然可以,自己去CrT/对应模组的wiki看,或寻找其他教程。这种简单的填空题不在本教程的范围内。

后面
等等  我翻到这个

作者: 红神解说    时间: 2020-8-12 13:56
谢谢 魔鬼操作即将开始
作者: deelrell    时间: 2020-8-18 07:56
代码好难实在不会弄
作者: AS885    时间: 2020-8-19 00:13
最近更新的crt2和这个功能应该没有区别吧
作者: a327967420    时间: 2020-8-25 14:49
多谢大佬,服务器有救了qwq
作者: 永恒极光、    时间: 2020-8-28 04:19
想起异次元水晶 魔改就是万恶之源
作者: 五行缺钱456    时间: 2020-9-15 18:53
学到了      
作者: 东方昆仑    时间: 2020-10-2 20:38
学到了,感谢楼主
作者: wujiaxin12345    时间: 2020-10-3 12:49
学到了,谢谢
作者: 曦月祈晓    时间: 2020-10-18 00:03
很有趣的下载链接【尬笑】
作者: q343796345    时间: 2020-11-1 13:34
谢谢大佬教程,学到了
作者: 3224405561    时间: 2020-11-3 21:38
可以学到了
作者: Arschloch343    时间: 2021-1-11 15:25
多谢楼主orz
作者: 499628539    时间: 2021-1-15 04:32
有个很怪的事情,executeCommand函数在执行需要指定玩家的指令时候不管是由非玩家实体还是玩家来触发都需要作为对象的玩家拥有权限,比如server.CommandManager.executeCommand(event.player,"effect @p Speed 1 1"),在拥有op或单机开启了作弊的情况下会得到1s的速度2,反之则会告诉你没有权限执行,我一开始还以为是因为执行者是玩家的问题,然后我换成了server.CommandManager.executeCommand(event.entity,"effect @p Speed 1 1"),让其他实体来触发,但结果是一样
这会让服务器陷入一个很尴尬的局面,比如通过捡经验事件修改最大生命值指令需要给予玩家setMaxHealth的权限,既然他都可以直接使用指令改10086血了那CommandManager就没有任何意义
作者: youyihj    时间: 2021-1-15 10:50
499628539 发表于 2021-1-15 04:32
有个很怪的事情,executeCommand函数在执行需要指定玩家的指令时候不管是由非玩家实体还是玩家来触发都需要 ...

执行者改成 server,让服务器执行命令
作者: 专业黑人    时间: 2021-1-25 10:15
感谢楼主的分享。

作者: 2715598619    时间: 2021-1-26 09:46
        神乎其技!6的飞起!
作者: fichdich2    时间: 2021-1-28 00:53
虽然我不是腐竹,但是学到了
作者: 九先生    时间: 2021-1-28 18:58
感谢楼主分享 请问魔改的那个BOSS外观为什么不能长期保持
作者: 微硬hardware    时间: 2021-2-2 12:31
本帖最后由 微硬hardware 于 2021-2-2 12:39 编辑

如果我想把原版的工具禁用掉的话要怎么写(不只是要删掉合成)?
if(event.player.currentItem == <minecraft:wooden_pickaxe>){
    event.canceled = true;
}
如果这么写的话会有很长的报错是为什么?
经过测试发现不只是这个,只要把IItemStick放在if里面的话就会有类似的报错,是因为缺了包吗?