本帖最后由 songfeitong 于 2014-4-9 21:48 编辑

前言
大家好,今天给大家带来的是一个可以自定义合成的东东,其实这个东西我之前是有灵感的,但因不会testforblock所以搁置了,今天看了Dragnoz的视频顿时有了灵感啊、其实这个没有你们想象的那么神奇,只是一个含有NBT标签的testforblock和setblock而已啦~



展示

1.合成僵尸生怪蛋
啦啦啦,今天弄到几个僵尸头,可以合成僵尸蛋了!

众:呵呵你是在作死吗,不仅就没有这个配方,还放到发射器里了。


之后,突然被强制退出发射器的界面,可以看到它被岩浆取代了。


不到半秒钟后,发射器又回来了。


嗯打开,可以看到僵尸刷怪蛋就合成好了。


众惊呼:这不科学!



原理
这台机器原理很简单,就是一个命令方块连着高频脉冲使用testforblock指令检测指定位置上的发射器是否装有指定物品,并且规定一定数量和正确的排列顺序。命令方块代码如下:
  1. testforblock 458 86 -366 dispenser 3 {Items:[0:{Slot:0b,id:397s,Damage:2s,Count:1b},{Slot:1b,id:397s,Damage:2s,Count:1b},{Slot:2b,id:397s,Damage:2s,Count:1b},{Slot:3b,id:397s,Damage:2s,Count:1b},{Slot:4b,id:344s,Damage:0s,Count:1b},{Slot:5b,id:397s,Damage:2s,Count:1b},{Slot:6b,id:397s,Damage:2s,Count:1b},{Slot:7b,id:397s,Damage:2s,Count:1b},{Slot:8b,id:397s,Damage:2s,Count:1b}]}
复制代码
之后当玩家放入要“合成”的配方后,命令方块输出信号,用岩浆替换发射器,因为在破坏容器时物品会掉落,所以岩浆是用来清除掉落出的物品的。之后发射器界面会被强制关闭。
  1. setblock 458 86 -366 lava
复制代码
最后1tick后,执行命令生成新的发射器并装载着合成完的物品。
  1. /setblock 458 86 -366 dispenser 3 replace {Items:[{id:383,Count:1,Slot:0,Damage:54}]}
复制代码
最后合成的流程就完成了。



应用
本机器应用真的十分广泛,如在RPG地图里可以让玩家找齐几种自定义的物品,然后合成一件道具,这些物品都可以拥有NBT标签。或者也能用在箱子上,给箱子中放指定物品就会触发机关。或者甚至可以当做密码锁,比如箱子里放7块不同颜色的羊毛,只有找到密码正确排列顺序才能解锁。



教程
总而言之,要制作这个还是需要用到Mcedit的(当然如果你是命令方块大神可以自己写代码)。这次用到的是一个把容器转换为命令方块的滤器,因为testforblock与setblock的格式十分接近,所以我们只需在setblock命令的基础上对命令进行改造就可以了。
滤器:TileEntityToCommand TileEntityToCommand.zip (1.58 KB, 下载次数: 439)



首先,放置一个发射器。


里面装有你希望的合成配方,这个是命令方块。


然后退出游戏换Mcedit。
进入Mcedit后,先选中发射器。



然后选择滤器,找到TileEntityToCommand 。


第一行是选择生成命令方块还是命令矿车。先说X、Y、Z,代表这个命令方块生成的发射器的坐标在哪里。如果Coordinates are Relative to Command Block选了话就是他的相对坐标(命令就是~x ~y ~z),不选就是正常坐标(x,y,z),这里我没有勾选。最后一个嘛,就不要在意了。


然后点Filter,发射器就变成了命令方块,然后保存后进入游戏,把代码粘出。




以下是代码改编时间
此操作全部在Word或记事本中完成!
现在这个是原来的命令:
setblock 305.5 58.0 -1809.2 23 5 replace {Items:[{id:265s,Damage:0s,Count:1b,Slot:0b},{id:331s,Damage:0s,Count:1b,Slot:1b},{id:265s,Damage:0s,Count:1b,Slot:2b},{id:331s,Damage:0s,Count:1b,Slot:3b},{id:399s,Damage:0s,Count:1b,Slot:4b},{id:331s,Damage:0s,Count:1b,Slot:5b},{id:265s,Damage:0s,Count:1b,Slot:6b},{id:331s,Damage:0s,Count:1b,Slot:7b},{id:265s,Damage:0s,Count:1b,Slot:8b}],id:"Trap"}
第一步先把setblock改成testforblock,把replace删去。然后如下:


testforblock 305.5 58.0 -1809.2 23 5 {Items:[{id:265s,Damage:0s,Count:1b,Slot:0b},{id:331s,Damage:0s,Count:1b,Slot:1b},{id:265s,Damage:0s,Count:1b,Slot:2b},{id:331s,Damage:0s,Count:1b,Slot:3b},{id:399s,Damage:0s,Count:1b,Slot:4b},{id:331s,Damage:0s,Count:1b,Slot:5b},{id:265s,Damage:0s,Count:1b,Slot:6b},{id:331s,Damage:0s,Count:1b,Slot:7b},{id:265s,Damage:0s,Count:1b,Slot:8b}],id:"Trap"}
第二步,把,id:"Trap"注意连带之前的逗号都删掉,最终如下:


testforblock 305.5 58.0 -1809.2 23 5 {Items:[{id:265s,Damage:0s,Count:1b,Slot:0b},{id:331s,Damage:0s,Count:1b,Slot:1b},{id:265s,Damage:0s,Count:1b,Slot:2b},{id:331s,Damage:0s,Count:1b,Slot:3b},{id:399s,Damage:0s,Count:1b,Slot:4b},{id:331s,Damage:0s,Count:1b,Slot:5b},{id:265s,Damage:0s,Count:1b,Slot:6b},{id:331s,Damage:0s,Count:1b,Slot:7b},{id:265s,Damage:0s,Count:1b,Slot:8b}]}


然后把它粘回到命令方块里就行了




之后进入游戏,把命令方块移到别的地方,在原来的位置放一个发射器,装好预定的物品。


之后可以在命令方块后面放比较器在输入信号检测一下。


这里没有输出信号,让我们打开命令方块看一下,说是预定值为5,现在却为2。预定值指的就是加下划线的。


testforblock 305.5 58.0 -1809.2 23 5 {Items:[{id:265s,Damage:0s,Count:1b,Slot:0b},{id:331s,Damage:0s,Count:1b,Slot:1b},{id:265s,Damage:0s,Count:1b,Slot:2b},{id:331s,Damage:0s,Count:1b,Slot:3b},{id:399s,Damage:0s,Count:1b,Slot:4b},{id:331s,Damage:0s,Count:1b,Slot:5b},{id:265s,Damage:0s,Count:1b,Slot:6b},{id:331s,Damage:0s,Count:1b,Slot:7b},{id:265s,Damage:0s,Count:1b,Slot:8b}]}

这个值代表了他的基本数据,如朝向。我们把它改成2就行了。
之后再拉下拉杆,就输出信号了。


然后给命令方块连上脉冲。



比较器后面的指令就是把发射器替换成岩浆。
  1. setblock 305.5 58.0 -1809.2 11
复制代码
然后后面放一个中继器,接上命令方块。红的是用来放置岩浆的。绿的嘛……


绿的里面的命令又需要用到Mcedit,这里就不上图了,就是把发射器里面放上最终合成后的物品,然后用上方的滤器如法炮制,得到一个命令方块,把命令复制进去,不用任何修改。
  1. setblock 305.5 58.0 -1809.2 23 2 replace {Items:[{id:137s,Damage:0s,Count:1b,Slot:0b}],id:"Trap"}
复制代码




现在制作流程就结束了,我们试验一下。
放入物品:


然后放置了岩浆,强制退出。打开以后,就是一个命令方块了。




虽然我知道你们很多人可能都看不懂或不能理解这篇教程,但毕竟这很有用,请支持一下初一党吧,马上期末考试了还在发帖别的都不求了,只求你们点一下顶!