sylqiuyifeng
本帖最后由 sylqiuyifeng 于 2015-4-28 18:27 编辑

废话不多说
说好的原理讲解来了
没看过核心的朋友请移步:http://www.mcbbs.net/thread-438695-1-1.html(PS 这次教程的图被压缩得惨不忍睹,我在网盘留了一份高清的,自己移步对着看吧……)
http://pan.baidu.com/s/1o6xFduq
知道你懒,效果视频在这里:
https://www.bilibili.com/html/player.html?aid=2260388&wmode=transparent&as_wide=1&page=1手机链接:http://www.bilibili.com/video/av2260388/


系统整体与初始化系统:
首先,整个核心的摆放方向如下,石块部分代表着fill高频的充能部分
要记住,fill的激活顺序是从同一个X坐标的CB开始(然而颜色弄错了不要在意)判断,小的优先(这个视角就是从左到右),然后是Y(下到上),最后是Z(前到后)
这样整个电路就很有顺序了
就是说目前的顺序为,最左下的,上面一个,到后面一行的下面那个,到上面……直到这一列都执行完了,就到下一列




然后这个是初始化部分(记住,以后这个视角的图的执行顺序全部是从下到上,从右到左,然后再到下一个切片)

  1. /setblock ~ ~ ~2 minecraft:redstone_block
复制代码
这个是初始化隔壁的fill clock用的

  1. /fill ~1 ~1 ~ ~5 ~1 ~ minecraft:redstone_block
复制代码
这个呢,是用于激活整个初始化系统的,与其对应的是左上角的:

  1. /fill ~ ~ ~ ~-6 ~-2 ~ minecraft:air
复制代码
会在执行完毕后删除整个系统

  1. /scoreboard objectives add cook/done/sel/fire/slot dummy
复制代码
这里是用于创建系统使用的变量了,作用分别是:
cook:监控食物烧烤的时间
done:监控食物的状态
sel:监控食物的种类
fire:监控玩家是否在火附近
slot:监控玩家选中的快捷栏
其后会详细讲解


  1. /gamerule commandBlockOutput false
复制代码
而这个负责将命令方块输出结果取消,避免刷屏

(按下一页看下一个部分)
(PS 我做解说也不容易啊,又要做图又要码字)(PS2 你的评分与回复就是对我最好的支持)

2021.12 数据,可能有更多内容废话不多说
说好的原理讲解来了
没看过核心的朋友请移步:http://www.mcbbs.net/thread-438695-1-1.html(PS 这次教程的图被压缩得惨不忍睹,我在网盘留了一份高清的,自己移步对着看吧……)
http://pan.baidu.com/s/1o6xFduq
知道你懒,效果视频在这里:
https://www.bilibili.com/html/player.html?aid=2260388&wmode=transparent&as_wide=1&page=1手机链接:http://www.bilibili.com/video/av2260388/


系统整体与初始化系统:

首先,整个核心的摆放方向如下,石块部分代表着fill高频的充能部分
要记住,fill的激活顺序是从同一个X坐标的CB开始(然而颜色弄错了不要在意)判断,小的优先(这个视角就是从左到右),然后是Y(下到上),最后是Z(前到后)
这样整个电路就很有顺序了
就是说目前的顺序为,最左下的,上面一个,到后面一行的下面那个,到上面……直到这一列都执行完了,就到下一列






然后这个是初始化部分(记住,以后这个视角的图的执行顺序全部是从下到上,从右到左,然后再到下一个切片)


代码:

  1. /setblock ~ ~ ~2 minecraft:redstone_block
这个是初始化隔壁的fill clock用的


代码:

  1. /fill ~1 ~1 ~ ~5 ~1 ~ minecraft:redstone_block
这个呢,是用于激活整个初始化系统的,与其对应的是左上角的:


代码:

  1. /fill ~ ~ ~ ~-6 ~-2 ~ minecraft:air
会在执行完毕后删除整个系统


代码:

  1. /scoreboard objectives add cook/done/sel/fire/slot dummy
这里是用于创建系统使用的变量了,作用分别是:
cook:监控食物烧烤的时间
done:监控食物的状态
sel:监控食物的种类
fire:监控玩家是否在火附近
slot:监控玩家选中的快捷栏
其后会详细讲解


代码:

  1. /gamerule commandBlockOutput false
而这个负责将命令方块输出结果取消,避免刷屏


(按下一页看下一个部分)
(PS 我做解说也不容易啊,又要做图又要码字)(PS2 你的评分与回复就是对我最好的支持)

sel系统



看着很复杂……其实只是一个枚举系统……
我们从右边开始

代码:

  1. /fill ~ ~1 ~ ~5 ~1 ~4 minecraft:stone
  2. /fill ~ ~-1 ~ ~5 ~-1 ~4 minecraft:redstone_block
这两个是最经典的fill clock,没什么值得解释的了


代码:

  1. /scoreboard players set @a sel 0
这个命令最先执行,负责不断地重设玩家的sel分数


代码:

  1. /scoreboard players set @a sel X {SelectedItem:{[物品NBT]}}
剩下左边的这堆命令其实功能都只有一个:枚举玩家手持的食物
例如土豆分数是1,生鱼是2之类的,生食从1~8
于是玩家手持相应物品的时候,sel分数就会被设定成为相应的数值


代码:

  1. /scoreboard players set @a sel 9 {SelectedItem:{[物品NBT]}}
sel设置为9的命令呢,都是用于探测熟食的


代码:

  1. /scoreboard players set @a sel 9 {SelectedItem:{id:"minecraft:cooked_fish",Count:1b}}
例如这个,就是用来探测玩家手持熟鱼的
命令太多我就懒得逐一说了,反正就是枚举所有食物嘛……

顺带一提系统还有6个方块放到下一个切片里面了



fire系统



这个系统是用来探测玩家是否在火一格范围内,并且面对火的
我们从右下角开始

代码:

  1. /scoreboard players set @a fire 0
首先这个和sel系统部分有点类似,不断重设玩家的fire分数


代码:

  1. /execute @a[rym=-135,ry=-45] ~ ~ ~ detect ~1 ~ ~ minecraft:fire -1 /scoreboard players set @p fire 1
  2. /execute @a[rym=135,ry=-135] ~ ~ ~ detect ~ ~ ~-1 minecraft:fire -1 /scoreboard players set @p fire 1
  3. /execute @a[rym=45,ry=135] ~ ~ ~ detect ~-1 ~ ~ minecraft:fire -1 /scoreboard players set @p fire 1
  4. /execute @a[rym=-45,ry=45] ~ ~ ~ detect ~ ~ ~1 minecraft:fire -1 /scoreboard players set @p fire 1
这四个execute detect命令首先探测玩家的面向(rym和ry部分),再按照朝向的不同探测不同位置的火方块,如果有就把fire设为1
那么rym和ry究竟是什么回事?这是玩家水平的视角旋转
看图:

所以当玩家面向-135~-45的范围的话,我们就在他x+1的地方探测是否有火
135~45的话同理,探测x-1的地方,如此类推
这样就可以探测玩家是否在火附近并且面向火


代码:

  1. /scoreboard players add @a[score_fire_min=1,score_sel_min=1] cook 1
最后呢,就是这个命令,他负责探测fire至少为1(在火附近面向火),和sel最少为一(手持生食或者熟食)
如果有的话,就以20Hz的速度给他的cook分数+1,就是说每秒加20个cook

cook系统



然后就是cook部分相关了
我设定的时候,希望不同的食物有不同的事件烤熟
肉类最久,鱼其次,最快是土豆
这时sel就有用了
不过在看这个之前,为了让玩家清楚知道是否在烹饪

代码:

  1. /execute @a[score_fire_min=1,score_sel_min=1] ~ ~ ~ /particle fireworksSpark ~ ~ ~ 0.1 1 0.1 0.1 1
我们让在烹饪状态的玩家(fire和sel都至少为1)身边显示粒子,提醒玩家


代码:

  1. /scoreboard players set @a[score_sel_min=1,score_sel=1,score_cook_min=120] done 1
  2. /scoreboard players set @a[score_sel_min=2,score_sel=3,score_cook_min=140] done 1
  3. /scoreboard players set @a[score_sel_min=3,score_sel=8,score_cook_min=160] done 1
  4. /scoreboard players set @a[score_sel_min=9,score_sel=9,score_cook_min=100] done 2
这四个命令负责监控玩家的烹饪状态
当sel为1(土豆),那么只要他的cook积分到了120(6秒),就把done分数设为1
2~3(鱼类),140(7秒)
3~8(肉类),160(8秒)
然后如果是熟食(sel_min=9)的话,那么100tick(5秒)后就把done设为2
done分1和2是为了区分是烤熟了还是烤焦了,后面有用



slot系统






然后还是无聊的枚举系统,这次用来探测玩家的选择快捷栏

代码:

  1. /scoreboard players set @a slot N {SelectedItemSlot:N-1}
探测玩家选中了第N个槽位
就这么简单……



声音提示系统



还记得done分1/2么
就是为了这个

代码:

  1. /playsound random.orb @a[score_done_min=1,score_done=1] ~ ~ ~ 1 1 1
  2. /playsound random.fizz @a[score_done_min=2,score_done=2] ~ ~ ~ 1 1 1
这两个命令分别是:
如果done状态是1的话,播放获得经验球的那个悦耳叮叮声
如果是2的话,播放物品被岩浆烧毁的滋滋声



清除系统


更多的枚举系统袭来……
这次是负责在玩家烹饪好/烧焦完(done最少为1)的时候,清除选中物品栏的物品

代码:

  1. /replaceitem entity @a[score_slot_min=M,score_slot=M,score_done_min=1,score_done=2] slot.hotbar.M-1 minecraft:air
就是通过slot分数得知玩家选中了哪个槽位,然后用replaceitem把空气放进去替换相关物品,达到清除的效果



give系统
是的,依旧还是该死的枚举系统……
这次负责把成品给予玩家


代码:

  1. /give @a[score_done_min=1,score_sel_min=Y,score_sel=Y,score_done=1] [物品ID] 1
  2. /give @a[score_done_min=1,score_sel_min=1,score_sel=1,score_done=1] minecraft:baked_potato 1
基本格式就像上面那样
下面那个是例子
例如sel为1的话,证明我在烤土豆
于是系统探测到你done也为1(完成烹饪的状态)的话
就给你一个烤土豆


代码:

  1. /give @a[score_done_min=2,score_sel_min=9,score_sel=9,score_done=2] minecraft:coal 1
烤焦了原理也一样,如果sel是9,done是2的话,就给你一块碳……



状态重设系统



最后终于到完工的部分了……

代码:

  1. /scoreboard players set @a[score_done_min=1] done 3
首先,来到系统最后执行的部分,先将所以烤完/烤焦东西的玩家done分数设置为3


代码:

  1. /scoreboard players set @a[score_done_min=3] cook 0
然后是将这些玩家的cook分数设置为0
先设3再设0是为了避免将正在烤东西的玩家的cook也重设了
这样就一辈子都不能烤东西了


代码:

  1. /scoreboard players set @a[score_done_min=3] done 0
最后再将玩家的done重设回0,准备下一轮烧烤
解说到此玩家,有问题的欢迎回复询问



你失误了

sylqiuyifeng

其实我只是纯粹忘记改标题了我会说?
内容其实码好了233

sylqiuyifeng 发表于 2015-4-27 19:18
其实我只是纯粹忘记改标题了我会说?
内容其实码好了233


还以为你是保存草稿点错了

我的世界sun123
Assists+1
---------------
RP+2
XP+100
Coin+20
Glod+1

C-青皮君
这东西用fill高频什么鬼!233333
漏斗级就够了那种0.5BpM的

sylqiuyifeng
C-青皮君 发表于 2015-4-27 19:25
这东西用fill高频什么鬼!233333
漏斗级就够了那种0.5BpM的

单人不用fill高频你对得起CB么!
你对得起那个被你烤的土豆么!
用漏斗就意味着土豆要被多烤那么一些时间
还有就是系统就不能压缩了233333

失落の灵谛
sylqiuyifeng 发表于 2015-4-27 19:27
单人不用fill高频你对得起CB么!
你对得起那个被你烤的土豆么!
用漏斗就意味着土豆要被多烤那么一些时间 ...

神回复= =

C-青皮君
sylqiuyifeng 发表于 2015-4-27 19:27
单人不用fill高频你对得起CB么!
你对得起那个被你烤的土豆么!
用漏斗就意味着土豆要被多烤那么一些时间 ...

为了土豆的荣耀想想真是炫酷!

C-青皮君
sylqiuyifeng 发表于 2015-4-27 19:27
单人不用fill高频你对得起CB么!
你对得起那个被你烤的土豆么!
用漏斗就意味着土豆要被多烤那么一些时间 ...

为了土豆的荣耀想想真是炫酷!

小白~别喷。
=。=红石大触已膜拜

ufof
SYL我来支持你了

jianghr
能做到随地烧烤,这是极好的,可惜单人的话我们还缺个世界锚。{:10_514:}
教程图文做得很好

sylqiuyifeng
本帖最后由 sylqiuyifeng 于 2015-4-28 16:42 编辑
jianghr 发表于 2015-4-28 14:54
能做到随地烧烤,这是极好的,可惜单人的话我们还缺个世界锚。
教程图文做得很好 ...

世界锚还真不是问题
没记错以worldspawnpoint为中心的3x3区块是会持续加载的(更正,似乎是16x16?)
The spawn chunks usually consist of an area of 16×16 chunks centered as close as possible to the world spawn point.
A Spawn Chunk is a chunk within the area surrounding the world spawn point.These chunks are special in that they will not be unloaded from memory, regardless of how far away a player moves, so long as there is at least one player in the Overworld.

所以说只要把系统放在spawn chunks就能保证持续有效果了
然后图……这次已经是我懒没做半透明效果了233
(还有就是怎么传都被压缩得惨不忍睹)

jianghr
sylqiuyifeng 发表于 2015-4-28 16:36
世界锚还真不是问题
没记错以worldspawnpoint为中心的3x3区块是会持续加载的(更正,似乎是16x16?)

这段E文我还真没看到过,不过既然初始1Chunk是持续加载的话,那要么压缩,要么用漏斗强行加载邻近chunk了。

sylqiuyifeng
jianghr 发表于 2015-4-28 19:29
这段E文我还真没看到过,不过既然初始1Chunk是持续加载的话,那要么压缩,要么用漏斗强行加载邻近chunk了 ...

基本上chunckloader原理也是这个,把加载的区块扩散出去
不过充分利用spawnchunck的话可以往高度发展,弄成系统塔,最近很火的那个RPG地图似乎也这样做了

MsYqgzt
似乎明白了什么……支持多人对吧?

sylqiuyifeng
MsYqgzt 发表于 2015-4-28 22:46
似乎明白了什么……支持多人对吧?

没试验过,理论上应该支持

chyx
sylqiuyifeng 发表于 2015-4-28 19:39
基本上chunckloader原理也是这个,把加载的区块扩散出去
不过充分利用spawnchunck的话可以往高度发展,弄 ...

你们俩一个inf一个版主是真不知道假不知道 怎么可能是1*1chunk 要是这样 什么机器能建在里面   

sylqiuyifeng
chyx 发表于 2015-4-29 02:18
你们俩一个inf一个版主是真不知道假不知道{:6 ...

然而研究游戏机制一向不是我会干的事情

super东
C-青皮君 发表于 2015-4-27 19:25
这东西用fill高频什么鬼!233333
漏斗级就够了那种0.5BpM的

有没有不用命令方块的烧烤器啊

super东
C-青皮君 发表于 2015-4-27 19:25
这东西用fill高频什么鬼!233333
漏斗级就够了那种0.5BpM的

有没有不用命令方块的烧烤器啊

爱心魔王FHC
建议直接在命令方块上面写1、2、3、4……
还有上面金粒加错…………

sylqiuyifeng
FHC红石 发表于 2015-4-30 18:53
建议直接在命令方块上面写1、2、3、4……
还有上面金粒加错…………

1234也好
不过已经做了那就算了

sylqiuyifeng
super东 发表于 2015-4-29 19:12
有没有不用命令方块的烧烤器啊

有没有不用方块的建筑啊