Minecraft(我的世界)中文论坛

 找回密码
 注册(register)

!header_login!

只需一步,立刻登录

查看: 32682|回复: 51

[Mod教程] 【NEI】Not Enough Items使用教程 - 插件编写篇已更新

[复制链接]
fyfly 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
3841
钻石
性别
保密
注册时间
2012-9-30
查看详细资料
发表于 2015-8-29 17:33:03 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 fyfly 于 2016-8-11 12:11 编辑

简介

NEI算是一个功能非常杂的mod了,但是很多人对NEI的了解甚至还只局限于作弊上,然而实际上NEI的功能对无论是生存还是创造都有很大的帮助。
NEI完全开源,作者为Chickenbones,如果想要贡献代码可以去:https://github.com/Chicken-Bones/NotEnoughItems
如果你还没有下载NEI,请去这里:http://chickenbones.net/Pages/links.html

安装的时候注意一点,NEI在客户端和服务器都能安装,而且推荐两端同时安装。
在下面我会详细列出NEI的绝大部分功能,不过可能还有遗漏,如果发现请告诉我,回来慢慢翻源码看看能不能再发现什么。
注意,下面写出的快捷键都为默认按键,可以在左下角Options里面更改。使用的MC版本为1.7.10+1.8。

本教程还发布在了MCMOD百科上,并且更新更及时,如果不喜欢mcbbs的排版可以去百科阅读:http://www.mcmod.cn/post/189.html

由于Chickenbones的弃坑,NEI在1.9+的版本将由covers1624维护,最新的工程可以在这里找到:https://github.com/TheCBProject/NotEnoughItems
同时,你也可以选择其它几个NEI的port版本:

对于区块边界的显示暂时可以使用下面几个工程代替:

本教程使用Creative Commons 4.0 BY-NC协议,如果想要转载请不要有商业用途,署名(喵呜J或fyfly),并告知我。另外,请最好不要转载,要是真是想宣传请直接发送链接,我这里会更新很频繁,转载之后可能会导致一些错误没有被改过来。
宽屏模式下效果更佳



合成配方篇

NEI查看合成配方非常方便,最基础的操作就是鼠标悬停在一个物品上方按下R键就行了。当然,除此之外还有很多其他的功能,总结在下面这个列表:
  • 查看选中物品的合成配方:悬停物品上方按R,或Recipe模式右侧物品栏左键
  • 查看选中物品的用途:悬停在物品上方U,或者悬停物品上Shift+R,或者Recipe模式右侧物品栏右键
  • 查看指向方块的合成配方(Waila):指向方块按小键盘3,注意这一条是Waila的功能,Creative+模式下有Bug
  • 查看指向方块的用途(Waila):指向方块按小键盘4,注意这一条是Waila的功能,Creative+模式下有Bug


下面是一张合成表的截图:


介绍一下界面:
  • 点击上方的箭头可以切换不同的配方类型(有序合成,无序合成,机器等)
  • 点击合成表中间的箭头可查看该类型的所有配方
  • 左键任意物品或悬停按R能够查看物品的配方
  • 右键任意物品或Shift+R或U键能够查看物品的用途
  • 如果你在合成表界面里查看了其他物品的合成表,可以用Backspace键退回上一级合成表
  • 如果合成表使用了Ore Dictionary,匹配的物品会轮流显示,按住Shift键可以停止变换
  • 右下角有个"?"的按钮,3x3配方在工作台中查看配方才会显示,2x2及以下背包内就有显示
    • 直接单击它会在工作台内投影出选中的配方
    • 如果你包里已经有了配方所需所有的物品,Shift+点击它会自动在工作台中摆放选中的配方(不支持包含武器或工具的配方已在1.7最新版本中修复,1.8好像还没修)



搜索篇

背包里面最下面那条黑色的框框就是搜索框,单击一下或者按一下F键就能输入了。

NEI的搜索是支持正则表达式的!如果你不喜欢正则表达式搜索,可以把Options>Inventory>Search Mode调成Plain。搜索是不分大小写的,也就是说Apple和apple效果一样的。另外,搜索会匹配物品的ToolTips(就是有些物品下面的说明),比如如果你搜索"No effects"就能搜索到那几个无效果的药水。

一些小技巧:
  • 输入"@x.y.z"格式能匹配到上方Item Subsets的物品选项卡,比如匹配Items>Potions>Neutral内物品,直接输入"@Items.Potions.Neutral"(上面一条也是这个原理)
  • 右键搜索框能直接清空
  • 双击搜索框能切换到高亮模式,他会将你背包所有格子变暗,之后将背包里匹配搜索内容的物品高亮。再次双击可取消


关于@标签搜索:
  • 标签的下一项用"."来表示,比如搜索Items>Potions>Neutral标签内物品,可以输入"@Items.Potions.Neutral"
  • 必须使用@符号开头的字符串搜索才能开启分类搜索功能,也就是说如果你输入"dark iron | @Factorization"并不会切换到Factorization的选项卡
  • 分类标签只输入其中一项也是可以的,比如说想要搜索Items>Potions>Neutral可以直接输"@Neutral",也就是说Mod选项卡里的内容只要输入"@mod名字"就行了
  • 分类标签匹配的内容如果在只输入一项的情况下可以不输入完全,比如Mod>BuildCraft标签直接输入"@BuildCr也可以,但是如果匹配到了多个标签,NEI会将它们都显示出来
  • 在标签搜索的过程中,也会同时进行普通的搜索,也就是说如果有一个物品叫做Factorization,那么搜索"@Factorization"的同时这个物品也会匹配上
  • 怎样搜索某个Mod下的所有物品?
    • 搜索mod的名字,注意这个名字是与mcmod.info文件里的name项目对应的
    • 搜索mod添加的创造模式选项卡的名字(比如BuildCraft某些物品因为创造模式选项卡才能搜索到,否则只能搜BC)
    • 上面两项不但是不冲突的,而且是互补的


下面简单讲一下三种Search Mode的区别:
  • 简单(Plain):什么特殊功能都没有,匹配的是包含输入内容的物品
  • 正则表达式(Regex):使用正则表达式进行匹配,使用的是java.util.regex.Pattern进行的匹配
  • 拓展(Extended):默认就是这个,在正则匹配基础上添加通配符(Wildcards)匹配,它的原理就是通过将输入内容的
    • "."替换为""
    • "?"替换为"."
    • "*"替换为".+?"
    • 从而实现通配符,之后进行正则匹配


详细说一下拓展和正则模式:

拓展
本模式添加了两个通配符,分别为"*"和"?"。"*"代表任意字符串(不限长度),"?"代表一个任意字符。
比如说你如果要搜索苹果,但是你忘了怎么拼了,只记得几个字母,那么可以这样:
  • a*le:匹配任意以a开头的以le结尾的字符串,比如说apple,acble,afcle
  • ap?le:匹配任意以ap开头以le结尾的长度为5的字符串,比如说apple,apele
该模式支持正则表达式支持的所有语法,详细见下。

正则表达式
本模式支持正则表达式的所有语法,并且没有拓展模式中通配符,用起来更清爽,个人更喜欢这个模式。
由于正则表达式规则太多这里只列几个常用的,其他的请自己谷歌百度找个正则表达式教程学习(这里随便找到一个,可以点击这里学习)
  • [abc]pple:匹配apple,bpple,cpple
  • [a-c]pple:同上
  • ap{2}le:匹配apple,{2}代表重复两次,{2,}代表重复两次以上,{2,5}表示重复2到5次
  • ^apple:匹配以apple开头的物品
  • apple$:匹配以apple结尾的物品。不推荐使用,因为物品的名字包含物品原本的名字 +" "+ ID +"#"+ ToolTips,一个"#"代表一个回车。也就是说名字的末尾是ToolTips,即使没有ToolTips也需要关掉ID显示才能正常使用
  • stone|diamond:匹配stone或者diamond,这条语句可以很方便搜索多个内容
  • (?=.*diamond)(?=.*armor):匹配既包含diamond又包含armor的物品,可以弥补diamond armor搜索不到Diamond Horse Armor的问题

这里说一下NEI内部的物品名字,比如说这样一个物品:


它实际的名字是:
"Potion of Swiftness 373:8194#Speed (3:00)##When Applied:#+20% Speed"

但是如果你要在Regex或Extended模式搜索全称,需要搜索:
"Potion of Swiftness 373:8194#Speed \(3:00\)##When Applied:#\+20% Speed"
因为有些字符在Regex中有特殊作用,要用转义符才能匹配。当然啦,估计没有人会要搜索到这种程度/w\

另外如果加上Waila的话,如果在NEI搜索会匹配上Waila显示的那条mod名称,但是这条mod名不在物品的名字里,是作为单独的一条的。

也就是说直接搜索
"^BuildCraft$" (严格匹配"BuildCraft")
也会匹配到所有mod名显示为BuildCraft的物品。

特殊字符一共有:
  • \
  • ^
  • $
  • .
  • |
  • ?
  • *
  • +
  • (
  • )
  • [
  • {

想要搜索的话请在前面加\,比如匹配"\"就输入"\\"


背包操作篇

这应该算是NEI知道的人最少的功能了吧,但是这个绝对是辅助生存模式非常棒的一类功能,注意以下内容可能会和某些mod冲突,请自行检查。

具体有以下几点:
  • 合成物品时右击产出框:使用输入原料合成多次物品,直到满组或者原料用光,如果已经拿着物品了,合成出来的物品会堆叠到拿起的那个物品上(原理是连续处理64次合成事件orz)
  • 打开一个容器的时候,鼠标悬在物品上滑动滚轮:会将物品传输到容器当中,或从容器取出(绝对是最棒的一个功能)
  • 打开一个容器的时候,拿起一个物品,按住Shift并点击同类物品:传输所有同类物品到容器里
  • 作弊模式下Ctrl+左击物品:补满当前堆物品,如果已经满了,则再给一组
  • 作弊模式下Ctrl+右击物品:补充一个物品
  • 作弊模式下悬浮物品上方Ctrl+Q:给一个当前物品(这是原版中的扔出当前格子所有物品,被NEI覆盖)
  • 生存模式下悬浮物品上方Shift+Q:扔出当前种类所有物品,注意这个是分容器的,比如悬浮在箱子里的物品上只会扔箱子里的物品(对应原版类似功能Ctrl+Q)
  • 创造模式+(Creative+)下 Ctrl+滚轮:滚动切换工具栏的物品



物品分类篇

物品的分类(Item Subsets)就是背包NEI界面最上面的那个大大的按钮,左键点击后会出现一个下拉菜单,里面可以通过不同的分类浏览物品。

如果你在任意一个分类或子分类上Shift+左击,下面搜索框会自动输入分类名称,并匹配该分类下所有物品。
如果你任意右击一个分类或物品,那么这个物品将会被右侧的物品面板排除,如果重新左键一下就能重新选中,你可以利用这个功能排除ForgeMultipart数量众多的小方块。
双击任意一个分类能够关闭除该分类以外所有物品,注意这与Shift+左击不同,这个是隐藏了多余物品,Shift+左击是匹配了当前类别下的物品。

之前版本能够右击分类的按钮保存设置好的分类,但是新版本这个功能好像还没实现。


工具篇

这里的工具指的是Data Dumps,进入方法为Options>Tools>Data Dumps。这个小工具能够导出游戏的很多数据,特别是药水,附魔,生物群系这三项对于整合包制作者的帮助非常大,因为这三项会存在id冲突,请整合包作者随时检查这三项内容。输出的文件在.minecraft/dumps文件夹里。

下面解释具体每一项的作用:
  • 物品(Items):导出所有注册过的物品,文件名为item.csv。输出的内容包括:名字(非本地化),ID,是否是方块,所属mod,所属类
  • 方块(Blocks):导出所有注册过的方块,文件名为block.csv。输出的内容包括:名字(非本地化),ID,是否有对应物品,所属mod,所属类
  • 药水(Potions):导出所有的药水,文件名为potion.csv。输出内容包括:ID,名字(非本地化),所属类。包含三个选项:
    • All:输出所有id的药水(0-31)
    • Free:输出空闲的id
    • Used:输出已用id的药水
  • 附魔(Enchantments):导出所有的附魔,文件名为enchantment.csv。输出内容包括:ID,名字(非本地化),附魔物种类,最小等级,最高等级,所属类。包含三个选项:
    • All:输出所有id的附魔(0-255)
    • Free:输出空闲的id
    • Used:输出已用id的附魔
  • 生物群系(Biomes):导出所有的生物群系,文件名为biome.csv。输出内容包括:ID,名字,气温,降雨,生成几率,基础高度,高度变化,种类,所属类。包含三个选项:
    • All:输出所有id的生物群系(0-255)
    • Free:输出空闲的id
    • Used:输出已用id的生物群系
  • 物品面板(Item Panel):导出当前物品面板(右侧面板)中物品的信息,包含四个选项:
    • CSV:输出物品信息为CSV格式,文件名为itempanel.csv。输出内容包括:物品ID(字符串),内部ID,metadata,是否包含NBT信息,显示名字
    • NBT:输出物品的NBT信息,文件名为itempanel.nbt。输出的内容是一个包含了NBTTagList的NBTTagCompound,NBTTagList里面包含的内容有ID,数量,伤害值(即metadata)还有物品的NBT数据,不过好像想不出来有什么用途。它使用CompressedStreamTools.writeCompressed()输出,如果开发者想要读取输出的信息可以用CompressedStreamTools.readCompressed()来读取。简单写了一个读取的演示,代码见这里
    • JSON:输出物品信息为JSON格式,文件名为itempanel.json。这个实际上就是上边NBT数据转化成了JSON形式,输出内容包括物品id(id),物品伤害值(damage, 即metadata),和NBT数据(tag)
    • PNG:输出物品面板内所有物品为PNG图片,文件输出到itempanel_icons文件夹。功能类似于Item Render,并且可以选择输出大小,最小为16x16,最大为256x256。如果想用这个输出物品图片传到MCMOD百科也是可以的。



作弊操作篇

这部分内容比较多,分开说,这一部分对Mod解说者来说非常强大,如果想要解说Mod视频请务必要安装NEI。本篇所有内容请保证模式为Cheat Mode。另外,各位请一定要克制住自己/w\。
首先来看下总体的界面吧:


一. 工具面板(左上角那个)
这个面板里的东西都是非常常用的一些选项,下面分别介绍他们,顺序为从左往右,从上往下:
  • 删除模式(Delete Mode):单击启用。使用请左击背包内的物品,被左击到的物品就会被删除。Shift+左击物品会删除同类所有物品(批量删除都包括打开的容器)。右击或Shift+右击物品会减少该堆物品的1个。Shift+单击删除模式的按钮会清空背包。拿着物品左击删除模式按钮会删除该堆物品。拿着物品右击删除模式按钮会删除一个。拿着物品Shift+左击删除模式按钮会删除同类所有物品
  • 下雨(Rain):单击切换世界的下雨状态,右击按钮直接禁用下雨(也就是世界不会下雨了),禁用状态下左击启用下雨。如果按钮变成蓝色,则世界正在下雨中(有时候有Bug)
  • 游戏模式(Gamemode):一共有4个模式(Spectator在1.8版本里也没有),分别为SurvivalCreativeCreative+Adventure,每次单击都往下切换一个。其中Creative+并不是一个真正的游戏模式,它只在NEI内部有标明,实际上对应的原版GameType都是Creative,没有区别。注意这个设置的只是玩家的游戏模式,而不是设置的世界的游戏模式
    • Creative+:这个模式在原版背包的基础上新增了54个格子,相当于一个大箱子的容量。还有一个非常特别的特性,关闭背包的时候Ctrl+滚轮能来回切换工具栏的物品。注意背包满了之后捡起的物品不会拾到到拓展的背包里。非常适合建筑党来使用
  • 磁铁模式(Magnet Mode):服务器上只有服务端也安装了NEI才能使用。这个功能会吸引半径为16x8x16(x,y,z)的掉落物.注意如果你的背包满了(C+的拓展背包不能拾起物品),磁铁模式不会主动吸引物品,范围恢复到原始,但是如果是创造模式你仍然可以捡起物品,不过会自动删除
  • 时间(Time):一共有四个时间分别为6:00(Dawn)12:00(Noon)18:00(Dusk)0:00(Midnight),一小时为1000ticks,即时间点分别为6000,12000,18000,0。为了保证时间是永远向前运行的,每次切换会切换到第二天的该时间点,所以如果你切换频繁了,游戏天数会不断上涨。右键点击图标会禁用该时间段,最多只能禁用三个,禁用之后到达该时间段会直接跳过到该时间段的结束,左键可以重新启用
  • 治疗(Heal):点击之后会恢复玩家20点生命值,恢复饱食度,并熄灭身上的火

二. 保存背包(左边那个)
这里的功能对Mod解说者非常有用,你们可以保存解说所需要的所有东西,身上乱了之后直接Load一下就能复原了。
NEI提供了7个保存槽(代码里写死了!),每个槽都可以保存一个背包状态,这个保存状态是可以跨世界甚至是跨服的。注意这个功能是能够保存C+模式的背包的,即使不在C+模式加载的背包,换成C+模式仍然会显示刚刚加载的物品!
下面是对槽的操作:
  • 保存:直接点击任何一个包含有Save字样的槽就行了
  • 读取:直接点击任何一个包含有Load字样的槽就行了
  • 重命名:右击任意一个槽就行了,不管有没有保存东西,右击之后会提示你输入字符,按回车确认
  • 删除:已经保存过的槽右边会有一个X字按钮,点一下就删除了

三. 附魔
NEI提供了一个附魔的功能,在背包里按X键打开,界面会是这样的:


忽略那个青金石的物品框,不需要的。
点击上面的Level左右按钮能够切换等级,最高等级为10级,点击右边附魔就能添加了,添加之后再点击一次就能取消附魔。

那个Locked选项表示检测冲突附魔及附魔工具种类,比如剑只能附和剑有关的附魔(锋利,节肢杀手等),而且锋利和节肢杀手这种冲突附魔不能共存。
点击一下那个Locked按钮就能解锁附魔,Unlocked模式下不会检测冲突和种类,所以剑就能够附装备的附魔,并且也能附冲突的附魔。

四. 药水
药水和附魔功能类似,按P键打开面板,大概是这样的:


在下面那个药水槽里放入除水瓶以外任意药水就行了。
如果要添加效果,左击右边的效果就行了,点击Level的左右箭头能够调整等级,最大值为4级。
点击上面的Duration能够编辑持久,右击Duration可以清空,Duration最大只能够填27:18。
如果要取消效果,右击效果就行了。
最上面有一排收藏药水,你可以把制作好的药水放到上面标记。标记过后可以源源不断地拿,Shift+左击可以拿无限数量的药水,Ctrl+左击可以直接将药水传送背包,想要取消标记右击对应药水就行了。

五. 物品面板(右边那个)
大家应该都很熟悉这个面板了,这么明显,并且都见过这么多次了。点击上方的箭头或者用滚轮或者PageUp和PageDown按钮能够翻页。
对物品一共有这些操作:
  • 获取一组:左击物品
  • 获取一个:右击物品
  • 获取特定数量:在下面那个输入框指定数量,之后左击物品
  • 获取无限物品:Shift+左击物品,无限物品能够无限放置无限扔出,显示为111个


输入框的编辑:
  • 左击:激活输入框,直接输入数字就行了
  • 右击:清零
  • 左击加号:添加1个
  • 左击减号:减少1个
  • Shift+左击加号:添加10个
  • Shift+左击减号:减少10个
  • Ctrl+左击加号:添加64个
  • Ctrl+左击减号:减少64个
刷物品的时候记得一定不要超过背包剩余容积,会崩溃的,这个Bug到现在还没修复。Not Enough Issues


其它

一. 显示/关闭NEI
按下O键即可隐藏侧边框,如果要完全禁用NEI,去设置设置NEI Disabled并按下O键就行了。

二. 方块高亮
按下小键盘0键能切换方块高亮的开关。如果想要调节位置的话去Options>World>Highlight Tooltips里面,在中间按钮为Shown的时候拖动高亮的方框,如果中间按钮为Hidden点击一下按钮就能变成Shown了。不过仍然建议安装Waila,不推荐使用NEI的方块高亮。

另外,Waila和NEI的方块高亮是独立的!也就是说你可以同时开启Waila的高亮和NEI的高亮(两个方框)。注意小键盘0这个按键如果装了Waila打开的是Waila的设置,如果想要调节Waila高亮的,按0之后点击Waila>Configure aspect...之后就可以拖动方框调节了。选项Alpha是透明度,Scale是缩放比例。

三. 怪物生成指示
按下F7键开始,再次按下结束,打开之后地面上会出现红色和黄色的网格。
黄色的网格表示该格怪物只在夜间生成,白天不会生成。
红色网格表示该格怪物会在白天和夜间都生成。
看到这两个标示就赶快插火把吧!

四. Chunk指示
按下F9开始,第一次按下显示Chunk的顶点,第二次按下显示Chunk的范围边界,再按一下就停止。
显示会是这样子的:

绿色标示边界,红色标示顶点。

五. asm文件夹
如果你安装了NEI,运行之后你会发现在.minecraft文件夹下多出来一个asm文件夹。

这个文件夹其实是由NEI的前置CodeChickenLib输出的。由于NEI需要注入原版代码,大量地使用了ASM,并且用的是CCL的ModularASMTransformer。这个类会自动输出转换过的结果到文件里用来debug,所以就成了现在的asm文件夹里面的文件。注意并不只有NEI用到了这个类,其他还有很多Mod也都用到了。
所以如果你想删除这个文件夹,当然可以,这个只是debug用的,代码里看到个选项能关闭生成,但是一直没找到那个选项在哪设置。

六. NEI插件
NEI由于提供了API,许多mod都对NEI进行了支持。在Forge Mods列表里你能看到加载的NEI插件:
目前还有很多专门的NEI插件,现在还在更新比较推荐的有:


设置篇

NEI本身还是有很多可以设置的选项的,本部分分两块来说。第一部分是Options里的选项,第二部分是config文件。注意NEI客户端的config文件在.minecraft/config/NEI下,服务端的在world/NEI下。

一. 选项(Options)
选项分为Global和World两种模式,点击右上角的按钮可以切换。Global模式下的设置是全局的,所有世界都能共享,而World模式则是对当前世界特定的,不会影响到其他世界的设定。在World模式下左边会出来一排W的按钮,左键选中右键取消,更改选项自动选中,选中代表该项采取World的设置,未选中代表直接继承Global模式下的设定。
首先我们来看Inventory下的几个选项:
  • NEI Enabled/NEI Disabled:关闭NEI,与O键不同,这个关掉之后左下角还是有个Options按钮,但是NEI功能完全禁用了,不像O键只是隐藏侧边框
  • 模式(Mode):一共有三种模式,分别为Cheat Mode,Recipe Mode和Utility Mode,下面分别介绍一下。另外不知道什么原因,单机在这里的设置要调到World模式更改才能更改成功,或直接在World模式中把W按钮右键关掉。在服务器模式会根据玩家是否是Op自动更新,没有Op自动Recipe Mode,有了Op作弊的按钮自动出来(其实只是改了功能而已,没改模式)
    • 作弊模式(Cheat Mode):拥有所有的功能,刷物品,调整世界设置等
    • 合成模式(Recipe Mode):推荐生存使用的模式,只有查看合成表和搜索的功能
    • 实用模式(Utility Mode):介于作弊模式和合成模式中间的一个模式,点击右边的物品面板里的物品只能查看合成表,但是你可以自定义放在左上角的那些工具,并且可以使用
  • 实用模式功能(Utilities):左击按钮就能启用功能,右击按钮就能关闭,这样可以自定义实用模式的工具面板,注意最后一个Items指的是背包状态保存功能
  • 游戏模式(Gamemodes):选择游戏模式按钮能切换的游戏模式,生存模式不可关,左击打开右击关闭
  • 布局风格(Layout Style):分为TMI和Minecraft两种,TMI风格是为了满足一些TMI老用户的需求
  • 物品排序(Item Sorting):里面有各种不同的排序因素,可以拖动排序,按照优先级排序。里面的因素分别为:
    • Minecraft:原版物品最先筛选
    • Mod:将Mod物品组合到一起,并按照Mod名称排序
    • Item ID:按照物品ID大小排序
    • Default:保持物品状态自然不变
    • Item Damage:按照物品的耐久(Metadata)排序
    • Display Name:按照显示名字排序
  • 物品ID(Item IDs):有三种模式:Auto,Shown和Hidden
    • Auto:在NEI禁用或隐藏的时候不显示ID,在NEI显示的时候显示ID
    • Shown:一直显示
    • Hidden:一直隐藏
  • 搜索模式(Search Mode):在搜索篇已经讲过了
  • 合成查阅性能分析(Profile Recipes):在物品合成表后面会多一个Crafting Profiling界面,记录查询的耗时,debug使用,一般不需要开启:


World选项里面只有一个Highlight Tooltips的功能,你可以调整高亮提示框的位置与是否显示,具体见其它里的方块高亮。
Command选项里面是针对一些特殊的服务器使用的指令。
Keybindings就是调整键位的地方,不多说了。

二. Config文件
能在客户端里找到的选项我这里就省略了,自己去客户端调。

客户端下client.cfg文件
  1. # 检查更新
  2. checkUpdates=true
  3. #对于那些自控力低的人
  4. #把下面这条改成对应的模式,这样你就在游戏里改不了了,可用选项:0(生存),1(创造),2(创造+),3(冒险),-1(禁用)
  5. inventory.lockmode=-1
复制代码

服务端下server.cfg文件
  1. #使用权限
  2. permissions
  3. {
  4.         adventure=OP
  5.         creative=OP
  6.         creative+=OP
  7.         delete=OP
  8.         enchant=OP
  9.         heal=OP
  10.         item=OP
  11.         magnet=OP
  12.         #这一条是刷物品的时候会得到提示
  13.         notify-item=CONSOLE, OP
  14.         potion=OP
  15.         rain=OP
  16.         save-state=OP
  17.         time=OP
  18. }
复制代码


后面一共可以填:
  • 玩家名:例如,time=CodeChicken, Friend1
  • OP:仅限OP使用
  • CONSOLE:仅限控制台使用
  • ALL:全体玩家都能使用

服务端下banneditems.cfg文件
  1. {name:"minecraft:command_block"}=[NONE]
复制代码


这个前面是一个JSON字符串,代表一个NBT数据,Tag一共可以有四个:
  • name:名字,注意是modid:name这种形式的
  • Count:个数,不填默认为1
  • Damage:伤害值(metadata),不填默认为0
  • tag:NBTTagCompound数据,不填则为空

是不是感觉很熟悉呢?没错,结合CSV和JSON导出的信息就能很方便地填写这一项了!

后面是允许的玩家或群体,简单来讲就是白名单,一共可以填:
  • NONE:不允许任何人
  • 玩家名:例如{name:"minecraft:bedrock"}=[RebirthIsHope, Meow_J]
  • OP:允许OP
  • CONSOLE:允许控制台(基本没用)
  • ALL:无限制



插件编写篇

由于这块内容灵活度太大,我不可能将每一个方法都介绍到,所以我只会挑选出几个常用的来讲。如果你是普通玩家那么这部分你可以跳过。

一. 依赖
第一步当然就是添加依赖了。首先,打开你的build.gradle文件,在文件的下面添加这样几行:
  1. repositories {
  2.     maven {
  3.         name = "chickenbones"
  4.         url = "http://chickenbones.net/maven"
  5.     }
  6. }
  7. dependencies {
  8.     compile "codechicken:CodeChickenLib:1.8-1.1.2.139:dev"
  9.     compile "codechicken:CodeChickenCore:1.8-1.0.5.36:dev"
  10.     compile "codechicken:NotEnoughItems:1.8-1.0.5.104:dev"
  11. }
复制代码

当然,dependencies里面的版本请自己选择合适的,这里可能不是最新的,如果你要是1.7.10的mod就选择1.7.10的版本,具体的版本号请到这里(CCC, NEI)和这里(CCL)查看。

接下来,把那几个dev的mod文件下载下来,加到你IDE的依赖里,这里很简单就不说了。

二. IConfigureNEI
我们需要先创建一个类实现(Implements) IConfigureNEI,名称随意,我在这里将其命名为NEIConfig。这个类的作用相当于是一个入口,当NEI需要载入插件的时候会搜索到这个类,从而加载你的插件。

你一共需要实现三个方法:
  • loadConfig:这个方法是用来注册Handler或者设置一些其它东西的,经常使用的有API.registerRecipeHandler(),API.registerUsageHandler(),API.setGuiOffset()
  • getName:这里只需要返回你设定的NEI插件名字就行了,它会显示在NEI已加载插件那里
  • getVersion:返回你设定的版本号

参考代码:http://git.io/MJNEICFG

三. RecipeHandler
RecipeHandler是编写插件最重要的一部分了,当然它也非常复杂。不过还好,Chickenbones给我们提供了一个TemplateRecipeHandler,你可以直接继承这个类而不用写很多重复性的代码。这个类本身其实就相当于一个教程,里面每个方法基本都有文档,你可以参考它来写你自己的Handler。

这里我们首先新建一个类继承TemplateRecipeHandler,我这里命名为RecipeHandlerMeowMachine,作为喵呜机的配方。之后去IConfigureNEI类,在loadConfig下加入这样两行:
  1.         API.registerRecipeHandler(new RecipeHandlerMeowMachine());
  2.         API.registerUsageHandler(new RecipeHandlerMeowMachine());
复制代码

这两行分别注册了配方和用途的Handler,都是我们刚刚注册的那个类。

接下来我们需要新建一个内部类继承CachedRecipe,这里是CachedMeowMachineRecipe。它作为NEI内部的配方形式。
我们需要实现这两个方法:
  • getIngredients:返回一个List,里面装有该配方的原材料的PositionedStack
  • getResult:返回该配方产物的PositionedStack

当然除此之外还有很多方法可以Override,比如副产物可以用getOtherStacks之类的,大家可以自行探索。这里的PositionedStack为一个有固定坐标的物品,注意在构建PositionedStack时候那个Object可以是ItemStack或者是ItemStack的List/数组。

参考代码:http://git.io/MJNEIRH

回到RecipeHandlerMeowMachine,我们实现这几个方法:
  • getGuiClass:返回你机器Gui的类,如果Gui的偏移有问题,到IConfigureNEI的loadConfig方法里添加API.setGuiOffset()调整
  • getGuiTexture:返回你机器Gui材质的地址
  • getRecipeName:返回显示在配方最上方的配方名称
  • recipiesPerPage:返回每页显示的配方数量,推荐写1防止出问题
  • loadTransferRects:里面用transferRects.add()在Gui上添加一个区域可以点击用来显示当前机器的所有配方,类似于工作台那个箭头
    • this.transferRects.add(new RecipeTransferRect(new Rectangle(起始x, 起始y, x长度, y长度), "过滤用ID"));
  • loadCraftingRecipes(String outputId, Object... results):覆盖这个是用来加载所有配方的时候过滤ID的,基本想法就是,在outputId等于过滤ID时候在this.arecipes里添加所有的配方,除此以外按照默认的来处理。注意this.arecipes代表匹配到的配方
  • loadCraftingRecipes(ItemStack result):根据产物搜索配方,基本想法是,遍历所有注册的配方,当产物相同的时候添加配方到this.arecipes
  • loadUsageRecipes(ItemStack ingredient):根据原料搜索配方,基本想法是,遍历所有注册的配方,当原料包含该物品的时候添加配方到this.arecipes

参考代码:http://git.io/MJNEIRH

如果还有什么不明白的地方,可以去这个工程参考:https://github.com/Meow-J/NEITest




如果你觉得文字教程难以理解,请查看SF_Chipan的视频教程:
http://www.bilibili.com/video/av2849844/

评分

参与人数 20人气 +22 金粒 +249 贡献 +2 收起 理由
Halley + 2 + 16 MCBBS有你更精彩~
qjklyrw + 1 MCBBS有你更精彩~
WZRY + 1 MCBBS有你更精彩~
sjjklh + 1
萤粽子 + 1 + 20 感谢楼主
卡密萨马 + 1 + 15 暂时看不懂……不过好东西!
KaedeLen + 1 + 15 围观喵呜机
qwww + 10 NEI大法好
看那的猪 + 1 + 20 很棒的作品!
1156407698 + 1 + 20 很棒的作品!
大世落幕 + 1 + 15 23233
awd410842 + 1 + 10 很棒的作品!
baroqve + 1 很棒的作品!
冥魔焱 + 1 很棒的作品!
lzlniu + 1 很棒的作品!
BensonQC + 2 Mcbbs有你更精彩~
breathiness + 1 + 15 非常感谢
Cannon_fotter + 1 + 15 NEI大法好
MarcoV + 4 + 44 教程例行加分
米安博奥 + 33 666

查看全部评分

godhonest 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
838
钻石
性别
保密
注册时间
2015-4-4
查看详细资料
发表于 2015-8-29 17:35:39 | 显示全部楼层
谢谢楼主!!!
回复

使用道具 举报

米安博奥 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
8693
钻石
性别
保密
注册时间
2013-11-1
查看详细资料
发表于 2015-8-29 17:41:55 | 显示全部楼层
感谢教程=W=
回复

使用道具 举报

breathiness 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1188
钻石
性别
保密
注册时间
2015-4-18
查看详细资料
发表于 2015-8-30 17:37:26 | 显示全部楼层
很详细,帮助很大,感谢!
回复

使用道具 举报

fyfly 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
3841
钻石
性别
保密
注册时间
2012-9-30
查看详细资料
 楼主| 发表于 2015-8-30 19:52:24 | 显示全部楼层
本帖最后由 fyfly 于 2015-8-30 19:56 编辑

NEI插件编写正在坑,不知道什么时候能搞好/w\,好像这点国内外都没找到教程orz
回复

使用道具 举报

2545320709 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
2368
钻石
性别
保密
注册时间
2014-5-30
查看详细资料
发表于 2015-8-31 14:08:01 | 显示全部楼层
高亮显示有点问题,部分方块会有指错。具体我忘了,反正出现过,不过指错也只是指成同类方块,好像有一个暮色的平滑地下砖他指成地下砖
回复

使用道具 举报

fyfly 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
3841
钻石
性别
保密
注册时间
2012-9-30
查看详细资料
 楼主| 发表于 2015-8-31 14:41:01 | 显示全部楼层
2545320709 发表于 2015-8-31 14:08
高亮显示有点问题,部分方块会有指错。具体我忘了,反正出现过,不过指错也只是指成同类方块,好像有一个暮 ...

NEI bug是有点多,而且作者修得不怎么积极。不过不用不影响使用就行
回复

使用道具 举报

longge1008 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
529
钻石
性别
保密
注册时间
2011-9-1
查看详细资料
发表于 2015-9-2 17:10:29 | 显示全部楼层
还有碰撞体积显示快捷键F3+B
希望可以的话能提供一下其它隐藏的快捷键信息,上面的按键我也是看到实况up主介绍才知道的
回复

使用道具 举报

fyfly 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
3841
钻石
性别
保密
注册时间
2012-9-30
查看详细资料
 楼主| 发表于 2015-9-2 18:12:19 | 显示全部楼层
longge1008 发表于 2015-9-2 17:10
还有碰撞体积显示快捷键F3+B
希望可以的话能提供一下其它隐藏的快捷键信息,上面的按键我也是看到实况up主 ...

F3+B是原版的快捷键!不是NEI的,故不做介绍
回复

使用道具 举报

longge1008 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
529
钻石
性别
保密
注册时间
2011-9-1
查看详细资料
发表于 2015-9-2 18:48:16 | 显示全部楼层
fyfly 发表于 2015-9-2 18:12
F3+B是原版的快捷键!不是NEI的,故不做介绍

哦,不好意思搞错了
回复

使用道具 举报

lzlniu 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
5331
钻石
性别
保密
注册时间
2012-3-19
查看详细资料
发表于 2015-9-2 20:47:07 | 显示全部楼层
这一发教程真的做出细节来了。nei使用方法详解,适合所有人看。
回复

使用道具 举报

LIUIF 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
752
钻石
性别
保密
注册时间
2013-11-30
查看详细资料
发表于 2015-9-2 21:23:29 | 显示全部楼层
原来NEI还有这么多功能
回复

使用道具 举报

冥魔焱 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
210
钻石
性别
保密
注册时间
2013-2-11
查看详细资料
发表于 2015-9-3 01:55:25 | 显示全部楼层
不知道为什么我左击悬浮框里的物品并不能拿,即使在作弊模式下也这样,不知道为什么
回复

使用道具 举报

冥魔焱 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
210
钻石
性别
保密
注册时间
2013-2-11
查看详细资料
发表于 2015-9-3 02:13:07 | 显示全部楼层
冥魔焱 发表于 2015-9-3 01:55
不知道为什么我左击悬浮框里的物品并不能拿,即使在作弊模式下也这样,不知道为什么 ...

才发现还要把右边的用于全部世界那个给点上,真麻烦啊
回复

使用道具 举报

fyfly 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
3841
钻石
性别
保密
注册时间
2012-9-30
查看详细资料
 楼主| 发表于 2015-9-3 08:36:37 | 显示全部楼层
冥魔焱 发表于 2015-9-3 01:55
不知道为什么我左击悬浮框里的物品并不能拿,即使在作弊模式下也这样,不知道为什么 ...

设置篇有讲过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 京公网安备 11010502037624号 | 手机版

GMT+8, 2020-1-21 14:04 , Processed in 0.047201 second(s), Total 22, Slave 21 queries, Release: Build.2020.01.19.1840, Gzip On, MemCached On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标 本站与Mojang以及微软公司没有从属关系

© 2010-2020 我的世界中文论坛 版权所有 本站原创图文内容版权属于原创作者,未经许可不得转载

快速回复 返回顶部 返回列表