机器人WBW
本帖最后由 林扬骐 于 2018-2-4 00:03 编辑

上个暑假去美国前几天打算把跑酷迷宫机做好,但是还是发现比想象的复杂一些(也可能是因为自己给它加了太多的功能与注释……)
当时就弃了,打算1.13出来再说……后发现1.13大改
现在感觉时间不是很多了(作业好多),况且如果真的还要回到mc的话,还有个“魔方系统”的“王牌”更有价值(当然如果也被做出来的话就没法了╮(─▽─)╭麻烦那时记得叫我一声)(我知道除了mc外还有其它虚拟世界或现实世界
所以不如把半成品发出来,反正是个创意,谁发出来有何关系,成品早些完成也是大家一起早些体验,我同时也有更多时间了。



[h]

链接:https://pan.baidu.com/s/1nwPSAbn 密码:7d62
(网盘里有存档和pcb、txt)
1.12时用pcb做的function
(本贴第二页有文本的pcb代码,超级长)


本来目标功能简述:
(当时的过去一直没看见什么把跑酷和迷宫结合在一起的任何地图,打算利用迷宫机的经验(http://www.mcbbs.net/thread-532683-1-1.html)做一个跑酷迷宫机)
基本要求:这个跑酷迷宫机能造随机路线的迷宫,且大部分路线都是利用跑酷才能过的
盼望特点(可以不全部实现):
A.有的路线允许掉落,又保证迷宫可以通过;
B.掉落不会伤血或不会伤太多;
C.掉落下去仍然是迷宫中的一条路,或是稍差一点设计一个系统回到一个位置(如果要迷宫充满惊喜与想重来也不让你重来的绝望,那么建议前者);
D.迷宫的跑酷难度可调,而且路线及其多样,且存在“不可逆路线”;
E.人们可以根据需要自己设计跑酷路线在机器或系统里;
F.迷宫路线不要太简单;
G.设定迷宫生成范围很容易(不要破坏另外的地形);
H.玩家可以自己轻松设置起点终点;
I.可以随时暂停/继续/停止迷宫建造……
原本还有设想但已经发现困难所以放弃的特点:加入半砖、楼梯、梯子、藤蔓、活板门甚至门等等(2代设想),可能的话加入一些机关(如活塞、发射器、命令方块……3代设想,但可能会太冗杂),这样路线会极其多样化,但算法与设计路线就是上天的工作量了,那样怕是已经可以做十多个跑酷地图或者五六个解密地图(可能过于夸张)
当前功能/原理、更具体的目标功能、遇到的困难简述:
(实际上设计出来到现在还一个迷宫都没有真正造出来,因为好像有了开头(菜单),过程算法在纠结,过程路线未输入,且几乎连个结束程序都还没出来(系统除了菜单以外就没运行过))
(下面大部分都是程序设计到的)
总体:
路线分支的方式是“随机找可分支点后随机分支”(若无法分支就给这个分支点一个tag),直到某个条件(范围内没有可选分支或分支数量达到设定上限)则停止
路线的实现方法是结构方块(这样输入路线后的输出路线可以对称又可旋转),用指定的某几种方块分别表示“关键点”、“分支点”、“跑酷所需空间”、“概率出现的碰头块”(后面加入的);另外路线甚至包含“拐弯跳”



(以下对应上面的“设想”)
A.(可能是未完全解决的问题?)路线检测,允许一定情况下的上下开口,又保证每个“关键点”都可以到达(“跑酷所需空间”的来检测,“关键点”脚下方块(落脚点)不可被用作跑酷空间,“分支点”检测到当前的脚下方块是结构空位或对应uid的“跑酷所需空间”会导致某些“关键点”失去落脚点则不能分支……)
B.设计路线输入路线时考虑到就好
C.保证范围内所有路线都是系统生成的就好,路线尽量“可逆”
D.设计、输入路线时分等级(现在菜单中也设计到了)
想有些“不可逆路线”,又要保证C.“总是有路”,那么就需要让这段路线朝可走的方向最终连接上迷宫的其它路线或直接到终点(不确定是否设计到)
E.结构方块,命个名,加入“自定义路线”的function文件,简单
F.设计了“密度”,路线有设计等级,拐弯跳,也有“碰头块”(可设定出现概率,设计中好像是0/32~32/32的概率),还可以想办法减少“交叉”等(防止可能的路线“降低难度”,但未设计)
G.fill一堆石砖吧,它只会在这内部生成迷宫,上下左右都不会有任何洞(当然,空间不能太小,不然也可能使其不能“施展拳脚”,便很快结束)
原理便是每次生成路线都会用实体(“跑酷所需空间”等)检测上下左右前后,只要这一组有一个不行(检测到空气或其它),这一个uid的路线就不合格
H.起点:放一个盔甲架,旁边有至少高2格的石砖,脚下也是石砖,这就是起点
“确定一个带tag:maze_start_new 的实体(或放置一个靠着石砖墙且脚下也是石砖的盔甲架),让该实体的侧面挨着“石砖范围”的一面墙,保证墙足够大够平<即玩家在该实体的位置时向侧面的墙内tp一格后除了自己原来的位置外,向另外5个方向tp一格不会让玩家接触空气,但是可以是结构空位>”
终点:设置系统自动设置,或取消自动设置而自己在合适位子造一个,以空气或水等等作为空间,以结构空位作为从迷宫路线延伸进的入口(如果迷宫长度足够那么可以到你的入口位置)
I.在建造时,原本的起点,(可以设计“某些人”)靠近后会有菜单,点击便可暂停/继续/停止(1.12则是gamerule,1.13……可能就是用实体配合一个有tick标签的函数等等了)(不确定是否设计到)
(另外看来防止迷宫太暗还设计了“关键点光源”)
(另外看起来好像是设计的菜单费太多时间了……)



另外如果要更详细地讲些什么,在第二页的代码里有当时超级详细的注释,应该还是能看懂(内容可以算半个帖子了)
希望有人可以帮忙实现吧,谢谢(然而看起来这个任务“极富挑战性”,而且还是1.12,……当然最好改成1.13--->那么又是一项艰巨的任务)
感觉最可能的at(当然愿意的话可以互相转告):
@ruhuasiyu @pineapple_  @pca006132 @PotatoMaster101 @雷鸣·翾鹗 @乾.坤 @langyo_v3 (当然版主愿意也可以---->) @乙烯_中国
@龙腾猫跃 @贰逼




2021.12 数据,可能有更多内容上个暑假去美国前几天打算把跑酷迷宫机做好,但是还是发现比想象的复杂一些(也可能是因为自己给它加了太多的功能与注释……)
当时就弃了,打算1.13出来再说……后发现1.13大改
现在感觉时间不是很多了(作业好多),况且如果真的还要回到mc的话,还有个“魔方系统”的“王牌”更有价值(当然如果也被做出来的话就没法了╮(─▽─)╭麻烦那时记得叫我一声)(我知道除了mc外还有其它虚拟世界或现实世界
所以不如把半成品发出来,反正是个创意,谁发出来有何关系,成品早些完成也是大家一起早些体验,我同时也有更多时间了。


[h]

链接:https://pan.baidu.com/s/1nwPSAbn 密码:7d62
(网盘里有存档和pcb、txt)
1.12时用pcb做的function
(本贴第二页有文本的pcb代码,超级长)


本来目标功能简述:
(当时的过去一直没看见什么把跑酷和迷宫结合在一起的任何地图,打算利用迷宫机的经验(http://www.mcbbs.net/thread-532683-1-1.html)做一个跑酷迷宫机)
基本要求:这个跑酷迷宫机能造随机路线的迷宫,且大部分路线都是利用跑酷才能过的
盼望特点(可以不全部实现):
A.有的路线允许掉落,又保证迷宫可以通过;
B.掉落不会伤血或不会伤太多;
C.掉落下去仍然是迷宫中的一条路,或是稍差一点设计一个系统回到一个位置(如果要迷宫充满惊喜与想重来也不让你重来的绝望,那么建议前者);
D.迷宫的跑酷难度可调,而且路线及其多样,且存在“不可逆路线”;
E.人们可以根据需要自己设计跑酷路线在机器或系统里;
F.迷宫路线不要太简单;
G.设定迷宫生成范围很容易(不要破坏另外的地形);
H.玩家可以自己轻松设置起点终点;
I.可以随时暂停/继续/停止迷宫建造……
原本还有设想但已经发现困难所以放弃的特点:加入半砖、楼梯、梯子、藤蔓、活板门甚至门等等(2代设想),可能的话加入一些机关(如活塞、发射器、命令方块……3代设想,但可能会太冗杂),这样路线会极其多样化,但算法与设计路线就是上天的工作量了,那样怕是已经可以做十多个跑酷地图或者五六个解密地图(可能过于夸张)
当前功能/原理、更具体的目标功能、遇到的困难简述:
(实际上设计出来到现在还一个迷宫都没有真正造出来,因为好像有了开头(菜单),过程算法在纠结,过程路线未输入,且几乎连个结束程序都还没出来(系统除了菜单以外就没运行过))
(下面大部分都是程序设计到的)
总体:
路线分支的方式是“随机找可分支点后随机分支”(若无法分支就给这个分支点一个tag),直到某个条件(范围内没有可选分支或分支数量达到设定上限)则停止
路线的实现方法是结构方块(这样输入路线后的输出路线可以对称又可旋转),用指定的某几种方块分别表示“关键点”、“分支点”、“跑酷所需空间”、“概率出现的碰头块”(后面加入的);另外路线甚至包含“拐弯跳”





(以下对应上面的“设想”)
A.(可能是未完全解决的问题?)路线检测,允许一定情况下的上下开口,又保证每个“关键点”都可以到达(“跑酷所需空间”的来检测,“关键点”脚下方块(落脚点)不可被用作跑酷空间,“分支点”检测到当前的脚下方块是结构空位或对应uid的“跑酷所需空间”会导致某些“关键点”失去落脚点则不能分支……)
B.设计路线输入路线时考虑到就好
C.保证范围内所有路线都是系统生成的就好,路线尽量“可逆”
D.设计、输入路线时分等级(现在菜单中也设计到了)
想有些“不可逆路线”,又要保证C.“总是有路”,那么就需要让这段路线朝可走的方向最终连接上迷宫的其它路线或直接到终点(不确定是否设计到)
E.结构方块,命个名,加入“自定义路线”的function文件,简单
F.设计了“密度”,路线有设计等级,拐弯跳,也有“碰头块”(可设定出现概率,设计中好像是0/32~32/32的概率),还可以想办法减少“交叉”等(防止可能的路线“降低难度”,但未设计)
G.fill一堆石砖吧,它只会在这内部生成迷宫,上下左右都不会有任何洞(当然,空间不能太小,不然也可能使其不能“施展拳脚”,便很快结束)
原理便是每次生成路线都会用实体(“跑酷所需空间”等)检测上下左右前后,只要这一组有一个不行(检测到空气或其它),这一个uid的路线就不合格
H.起点:放一个盔甲架,旁边有至少高2格的石砖,脚下也是石砖,这就是起点
“确定一个带tag:maze_start_new 的实体(或放置一个靠着石砖墙且脚下也是石砖的盔甲架),让该实体的侧面挨着“石砖范围”的一面墙,保证墙足够大够平&lt;即玩家在该实体的位置时向侧面的墙内tp一格后除了自己原来的位置外,向另外5个方向tp一格不会让玩家接触空气,但是可以是结构空位&gt;”
终点:设置系统自动设置,或取消自动设置而自己在合适位子造一个,以空气或水等等作为空间,以结构空位作为从迷宫路线延伸进的入口(如果迷宫长度足够那么可以到你的入口位置)
I.在建造时,原本的起点,(可以设计“某些人”)靠近后会有菜单,点击便可暂停/继续/停止(1.12则是gamerule,1.13……可能就是用实体配合一个有tick标签的函数等等了)(不确定是否设计到)
(另外看来防止迷宫太暗还设计了“关键点光源”)
(另外看起来好像是设计的菜单费太多时间了……)


另外如果要更详细地讲些什么,在第二页的代码里有当时超级详细的注释,应该还是能看懂(内容可以算半个帖子了)
希望有人可以帮忙实现吧,谢谢(然而看起来这个任务“极富挑战性”,而且还是1.12,……当然最好改成1.13---&gt;那么又是一项艰巨的任务)
感觉最可能的at(当然愿意的话可以互相转告):
@ruhuasiyu @pineapple_@pca006132 @PotatoMaster101 @雷鸣·翾鹗 @乾.坤 @langyo_v3 (当然版主愿意也可以----&gt;) @乙烯_中国
@龙腾猫跃 @贰逼





代码:

  1. //说明{
  2. /*
  3. 作品名:跑酷迷宫(ParkourMaze)
  4. 作者:林扬骐(Lin Yangqi)

  5. //前言:{
  6. 你一定在mc中玩过跑酷,也一定在mc中走过迷宫。但你有没有想象过在迷宫中跑酷,或是在跑酷时走迷宫?那么,

  7. 这应该就是你想要的。
  8. 跑酷迷宫机!它可以自动造出路线需要靠跑酷来“行走”的迷宫(室内),所有造出的迷宫全随机(别想查攻略)

  9. ,为了通过它造出的跑酷迷宫,你需要灵巧的跑酷技术(当然,可以慢一点),还有走迷宫时的强大分析能力(别再用

  10. 靠墙走迷宫的方式了!它可是3d的!),这个难度可不是一般的,来挑战吧,祝你好运!
  11. //}
  12. //简介:{
  13. 这个作品是一个“迷宫机”,它可以自动造出路线需要靠跑酷来“行走”的迷宫(室内迷宫),所有造出的迷宫全

  14. 随机。
  15. //}
  16. //会用上的东西:{
  17.   (实际运用上的东西请以实际为准(pcb后方内容),但是这个说明会尽量完善)
  18.   //实体名称:{
  19.     maze_point 迷宫的路线关键点,建造时存在,建造后清除
  20.     maze_room 每个回合,确定回合路线的经过区域
  21.     maze_stop 每个回合,确定回合路线的终点(“站点”)
  22.    
  23.     maze_random 随机器,在_start处生成,4个实体,各带0~3的maze_math分数
  24.     maze_save 储存一个建造点的设置数据
  25.     maze_find:用于运动起点自动竖向校准(但还是建议在函数中就定好)(//后来确实决定不自动校准)
  26.     maze_unable 无法继续用于建造路线的关键点
  27.   //}
  28.   //实体tag:{
  29.     maze_start_new (起点手动设置 进行一些操作后 自动改为_start)
  30.     maze_start 选择用于建造迷宫的起点(会发光)(不建议手动设置_start)
  31.     maze_start_done 迷宫建造完成后生成的起点
  32.     maze_end 建造中自动设定的终点(终点可以有多个,终点特点是不再在此处向外延伸)(建造前手动放置錾制石砖可将其预定为终点,前提是可以达到(程序会尽量保证达得到))
  33.     maze_end_done 迷宫建造完成后生成的终点
  34.     maze_stopsele 每个回合,随机选择_stop(并判断)
  35.     maze_pointsele 每个"回合"选择的"选定点"
  36.     maze_clear (由设置决定)用于在制作迷宫后清除结构空位(换做空气)
  37.     maze_prompt 给出提示的实体
  38.    
  39.     maze_blockok 检测_stop/_room在方块检测上是否合格
  40.     maze_selectok 检测_stop/_room在选择器上是否合格

  41.    
  42.     maze_used 标记实体是否被使用过(如标记一个已失效的随机器)
  43.     maze 表示生成后已经过处理的实体(部分实体会需要)
  44.     maze_oneway (用给一个结构的运动终点_stop,表示此结构是单向路径,要求到运动终点仍“有出路”(要求_stop的旁边是结构空位,或者头顶以及向上tp一格后的旁边是结构空位))
  45.     maze_corner 设置中决定是否生成拐角结构
  46.     maze_gather 设置中决定是否"本质上的更密集"
  47.     maze_randomsele 随机选
  48.     //(已化为“@s就可”)maze_killmyuid 一回合内,某实体若带上,与其同uid分数的将被kill(如不合格的_stop或_room)
  49.   //}
  50.   //假名{
  51.     acq 设默认值
  52.     2 就是2
  53.     killuid 将被kill的uid
  54.   //}

  55.   //方块:{
  56.     stonebrick(0) 石砖:决定迷宫生成的位置与范围、大小(作为“墙体”(?))
  57.     structure_void 结构空位:挖掉石砖放置的东西,表示玩家可能经过的路线(可在迷宫制作后手动fill掉或制作前设置自动清除)
  58.     air 空气:作为一个室内迷宫,其路线多数情况下不能接触空气(可以改function)
  59.     stonebrick(3) 錾(zan,四声)制石砖:建造终点
  60.     苔石砖:跑酷的落脚点,不可被“挖去”。
  61.     裂石砖:设置终点的过程方块
  62.    
  63.   //} 
  64.   //分数:{
  65.     maze_uid:各迷宫元素的种类区分(每个回合自动设置)
  66.     maze_density:迷宫关键点密度(线路密不密)(每个r=8范围内出现的关键点出现次数的限制(不一定每个位置都一定正好那么多个“关键点”))(给_stop的选择器加的条件)
  67.     maze_round:当前建造回合数
  68.     maze_round_rest:(给_start)(可在建造前或建造中设置)剩余建造回合数(为1时做最后一个回合,为0时则在无法建造时自动停止(自动停止路线更密集,但花费时间更长))

  69.     maze_set:(1)设置迷宫制作后是否清除结构空位(2)设置迷宫制作后是否把苔石砖换为普通石砖(设置迷宫是否建造后放置火把)(另:【关于终点】终点的设置与其他point的设置可以不同,但是同一个计分板下(各4位))
  70.     maze_ele_walk-/mx:水平 路径难度。与后面的_jump,_fall,_jump类似,都是确定各跑酷元素难度等级的,高等级在高max分数的情况下才可能出现。(自定义的也可自定义自己元素的难度等级选择,或不定义等级而始终可能有自定义的元素被使用)
  71.     maze_ele_jump-/mx 跳跃 路径难度
  72.     maze_ele_fall-/mx 跌落 路径难度
  73.     //(已去掉)maze_set_corner 设置是否出现拐角路径(+1首拐,+2末拐)
  74.     maze_set_hit 顶头方块出现概率 (顶头路径不常规,慎选!另外,顶头跳有时可能会与其他跳跃路径冲突,故出现概率实际很小)
  75.    
  76.     maze_math 用于计算某些分数
  77.     maze_near 辅助tellraw用(例:_save:判断玩家是否在身边,若是则发光,若否则s设为0;玩家:判断玩家是否在身边,是则_near2分数+1,否则near分数set为0)
  78.     maze_neat2 辅助tellraw用(例:near2分数为1的,根据其周围实体判断给出什么提示(有操作时分数设为0))
  79.     maze_endcount 【关于终点】设置 自动设置的终点 的个数
  80.     maze_mir (给_pointsele)计算,决定此回合结构是否镜像。
  81.     maze_direction 方向
  82. //}
  83. (原理会之后在游戏技巧版发布)
  84. //}
  85. //使用方法:{
  86. (实际使用方法请以实际为准(pcb后方内容),但是这个说明会尽量完善)
  87. 1.确定一块由 普通石砖 填充而成的范围(可用fill)
  88. 2.确定一个带tag:maze_start_new 的实体(或放置一个靠着石砖墙且脚下也是石砖的盔甲架),让该实体的侧面挨着“石砖范围”的一面墙,保证墙足够大够平<注2.1>
  89. 3.此时接近生成的雪球,可以设置回合数<注3.1>、结束后的处理、迷宫各迷宫元素难度<注3.2>、预设自动设置终点的个数<注3.3>、设定建造起点<注3.4>等。
  90. 4.设置好后点击【开始建造】即开始,在迷宫建造完成前不宜做大多数事情
  91. 5.暂停与停止:敲掉起点处的苔石砖即可暂停,再在原位放置(1)苔石砖:继续;(2)普通石砖:强制停止
  92. 6.建造完成后,

  93. 另:关于自定义建造元素,1.可以仿造ele中的函数来制作,大致是让_pointsele生成_room(迷宫路径)和_stop(一个路径的终点),并为_room和_stop带上uid分数表示各属不同种类的建造元素(也可自定义自己元素的难度等级选择,或不定义等级而始终可能有自定义的元素被使用)(路径必须是玩家从一个方块上跳跃或移动或跌落到另一个方块上)(注:建造元素有各自不同的uid分数)

  94. <注>:
  95. 2.1:即玩家在该实体的位置时向侧面的墙内tp一格后除了自己原来的位置外,向另外5个方向tp一格不会让玩家接触空气,但是可以是结构空位
  96. 3.1:为1时做最后一个回合,为0时则在无法建造时自动停止(自动停止路线更密集,但花费时间更长)(建造中设置时为“剩余回合数”,即继续执行的回合数)
  97. 3.2:0为不选该元素,自定义的也可自定义自己元素的难度等级选择,或不定义等级而始终可能有自定义的元素被使用
  98. 3.3:终点可以手动设置(放錾制石砖),自动设置的终点是除手动设置外还自动会设置的终点(如自动设置5个,而有2个錾制石砖,则除了两个终点会在錾制石砖的位置(錾制石砖会在建造后被替换为其他方块)以外,在其他5个地方也会设置终点(取最后5个未设为终点的point作为终点))
  99. 3.4:分为两种,一种是已经被设置过建造起点的建造点,另一种是新建一个建造点并自动设置其为建造起点(建造起点只有一个(每次建造用),建造点可以多个(待选用))

  100. //}

  101. 另:ele是element的简称
  102. */
  103. //}
  104. /*
  105. 一共3个状态:建造中、暂停时、非建造时(建造前或停止后,是一个意思)

  106. function linyangqi-parkourmaze:start unless @e[tag=maze_start]
  107. function linyangqi-parkourmaze:start

  108. 苔石砖1,錾制石砖3
  109. */
  110. //使用前init<不会清除妨碍>{
  111.   new func init
  112.   #使用前一定请使用该函数(但是暂时没有清除函数?)
  113.   scoreboard objectives add maze_density dummy 迷宫密度
  114.   scoreboard objectives add maze_ele_fall+ dummy
  115.   scoreboard objectives add maze_ele_fall- dummy
  116.   scoreboard objectives add maze_ele_jump+ dummy
  117.   scoreboard objectives add maze_ele_jump- dummy
  118.   scoreboard objectives add maze_ele_walk+ dummy
  119.   scoreboard objectives add maze_ele_walk- dummy
  120.   scoreboard objectives add maze_round dummy 回合数
  121.   scoreboard objectives add maze_ele_custom+ dummy
  122.   scoreboard objectives add maze_ele_custom- dummy
  123.   scoreboard objectives add maze_round_rest dummy 剩余回合数
  124.   scoreboard objectives add maze_set dummy 是否清除结构空位、放置方块、放置火把
  125.   scoreboard objectives add maze_set_hit dummy 设置碰头概率
  126.   scoreboard objectives add maze_uid dummy 迷宫建造元素的uid区分
  127.  
  128.   scoreboard objectives add maze_endcount dummy 自动设置的终点的个数
  129.   scoreboard objectives add maze_near dummy 近距显示菜单用1
  130.   scoreboard objectives add maze_near2 dummy 近距显示菜单用2
  131.   scoreboard objectives add maze_sneak stat.sneakTime 是否潜行
  132.   scoreboard objectives add maze_sneak2 stat.sneakTime 一次潜行的时间
  133.   scoreboard objectives add maze_math dummy 计算用
  134.   scoreboard objectives add maze_mir dummy 决定镜像
  135.   scoreboard objectives add maze_direction dummy 决定方向
  136.   scoreboard objectives add maze_stats dummy 命令成功次数(_stop检查密度用)
  137.  
  138.   gamerule gameLoopFunction linyangqi-parkourmaze:main
  139.  
  140.   /*
  141.   maze_density:密度会稍微偏大,重点还是回合数合适
  142.   maze_round_rest:推荐回合数:每10x10x10区域出60回合左右
  143.   */
  144.   scoreboard players set acq maze_round_rest 500
  145.   scoreboard players set acq maze_density 50
  146.   scoreboard players set acq maze_endcount 1
  147.   scoreboard players set acq maze_ele_fall- 1
  148.   scoreboard players set acq maze_ele_fall+ 2
  149.   scoreboard players set acq maze_ele_jump- 1
  150.   scoreboard players set acq maze_ele_jump+ 3
  151.   scoreboard players set acq maze_ele_walk- 1
  152.   scoreboard players set acq maze_ele_walk+ 4
  153.   scoreboard players set acq maze_ele_custom- 1
  154.   scoreboard players set acq maze_ele_custom+ 233
  155.   scoreboard players set acq maze_set 001000101
  156.   scoreboard players set acq maze_set_hit 0
  157.   scoreboard players set 2 maze_math 2
  158.   /*
  159.   除了分数外,设置中还有两个tag:maze_corner和maze_gather
  160.   */
  161.  
  162.   //改游戏规则(为了tellraw键盘)
  163.   //gamerule sendCommandFeedback false
  164. //}
  165. //反init(去掉计分板)remove{
  166.   new func remove
  167.   #清除init设置的分数,但是tag不会清除
  168.   scoreboard objectives remove maze_density
  169.   scoreboard objectives remove maze_ele_fall+
  170.   scoreboard objectives remove maze_ele_fall-
  171.   scoreboard objectives remove maze_ele_jump+
  172.   scoreboard objectives remove maze_ele_jump-
  173.   scoreboard objectives remove maze_ele_walk+
  174.   scoreboard objectives remove maze_ele_walk-
  175.   scoreboard objectives remove maze_ele_custom+
  176.   scoreboard objectives remove maze_ele_custom-
  177.   scoreboard objectives remove maze_round
  178.   scoreboard objectives remove maze_round_rest
  179.   scoreboard objectives remove maze_set
  180.   scoreboard objectives remove maze_set_hit
  181.   scoreboard objectives remove maze_uid
  182.  
  183.   scoreboard objectives remove maze_endcount
  184.   scoreboard objectives remove maze_near
  185.   scoreboard objectives remove maze_near2
  186.   scoreboard objectives remove maze_sneak
  187.   scoreboard objectives remove maze_sneak2
  188.   scoreboard objectives remove maze_math
  189.   scoreboard objectives remove maze_mir
  190.   scoreboard objectives remove maze_direction
  191.   scoreboard objectives remove maze_stats
  192.  
  193.   gamerule gameLoopFunction -
  194. //}
  195. //-0.00000000000001
  196. //循环部分main{
  197.   new func main
  198.   #放个靠墙盔甲架的自动设置
  199.   execute @a ~ ~ ~ execute @e[r=10,type=armor_stand,name=!maze_start_new] ~ ~ ~ detect ~ ~-0.00000000000001 ~ stonebrick 0 function linyangqi-parkourmaze:findnewstart unless @e[tag=maze_start]
  200.   execute @a ~ ~ ~ execute @e[r=10,name=maze_start_new] ~ ~ ~ function linyangqi-parkourmaze:setnewstart unless @e[tag=maze_start]
  201.   #近距:显示提示
  202.   function linyangqi-parkourmaze:testfor
  203.   function linyangqi-parkourmaze:custom/testfor unless @e[tag=maze_start]
  204.   execute @e[tag=maze_start] ~ ~ ~ function linyangqi-parkourmaze:round
  205.  
  206.  
  207.   /*
  208.   stats触发又一次tellraw
  209.   */
  210.   #tellraw操作后要“复位”(分数决定?/stat决定?)
  211. //}
  212. /*提示:
  213.   //建造前save的提示{
  214.     1.基础设置:
  215.    剩余回合数round_rest;密度density;自动设终点的个数endcount(加提示:手动设终点方式;【关于终点s】自动设置的也可以加条件(选择器与方块的OK))
  216.     2.迷宫难度设置:(等级中其实可以有自定义部分(用#来提示/在最后“开建”之前有“显示自定义方式”))
  217.    【悬浮】:((+“范围”)0级为没有此种结构,给出的默认分数都符合正常跑酷者)
  218.    水平路径结构walk:mn~mx级(范围0~5级)
  219.    跳跃路径结构jump:mn~mx级(范围0~5级)
  220.    跌落路径结构fall:mn~mx级(范围0~4级)(看图)
  221.    (用exe定显示“是”与“否”(有“切换”))是否拐角corner、是否“本质上更密”gather<注1>、碰头set_hit
  222.     3.建造后的处理:
  223.    (于一个计分板maze_set,终点也可设置,操作时先point后终点(point分数会在前4位)但是清除结构空位的设置在最后一位,即一共有9位)是否清除结构空位[个位]、是否放置火把或红石火把[十位]、是否将关键点脚下的方块更换为其它方块[百位](本来是苔石砖,可以被更换为石砖1、南瓜灯2、萤石3、海晶灯4,但是若为后两者[3,4],火把始终不能插上)
  224.     4.对当前建造点的操作
  225.    【清除此建造点/kill】【在此处开始建造function:start】
  226.     (注1:本质上更密,难度也会相对降低,因为它允许路线的直接交叉,从而更可能产生近路)
  227.  
  228.  
  229.   (另:密度是在r=8范围内的,给stop的选择器上加条件)
  230.   //}
  231. */

  232. //建造前{
  233.   //OK定位,自动设【OK循环——若有此种位置的盔甲架&&没有_point】:findnewstart{
  234.    new func findnewstart
  235.    #x+
  236.    execute @s ~ ~ ~ detect ~1 ~ ~ stonebrick 0 execute @s ~ ~ ~ detect ~1 ~1 ~ stonebrick 0 entitydata @s {CustomName:"maze_start_new"}
  237.    #x-
  238.    execute @s ~ ~ ~ detect ~-1 ~ ~ stonebrick 0 execute @s ~ ~ ~ detect ~-1 ~1 ~ stonebrick 0 entitydata @s {CustomName:"maze_start_new"}
  239.    #z+
  240.    execute @s ~ ~ ~ detect ~ ~ ~1 stonebrick 0 execute @s ~ ~ ~ detect ~ ~1 ~1 stonebrick 0 entitydata @s {CustomName:"maze_start_new"}
  241.    #z-
  242.    execute @s ~ ~ ~ detect ~ ~ ~-1 stonebrick 0 execute @s ~ ~ ~ detect ~ ~1 ~-1 stonebrick 0 entitydata @s {CustomName:"maze_start_new"}
  243.    #tp
  244.    tp @s[type=armor_stand,name=maze_start_new] ~ ~0.5 ~
  245.    
  246.    execute @s[name=maze_start_new] ~ ~ ~ execute @e[name=maze_save,r=12,c=1] ~ ~ ~ tellraw @a[r=32] [{"bold":True,"color":"red","text":"请不要在旧建造点12格范围内设立新建造点。\n(若一定要在此处设立,需要事先清除旧建造点)"}]
  247.    execute @s[name=maze_start_new] ~ ~ ~ execute @e[name=maze_save,r=12,c=1] ~ ~ ~ kill @e[name=maze_start_new,c=1,r=13]
  248.   //}
  249.   //OK _new转变为_save【OK循环——若有_new&&没有_point】:setnewstart{
  250.    new func setnewstart
  251.    
  252.    /*_start只在【开始建造】被点击后由函数生成
  253.    */
  254.    summon snowball ~ ~ ~ {NoGravity:1b,CustomName:"maze_save"}
  255.    setblock ~ ~-1 ~ minecraft:stonebrick 1 replace
  256.    scoreboard players operation @e[r=1,c=1,name=maze_save] maze_round_rest = acq maze_round_rest
  257.    scoreboard players operation @e[r=1,c=1,name=maze_save] maze_density = acq maze_density
  258.    scoreboard players operation @e[r=1,c=1,name=maze_save] maze_endcount = acq maze_endcount
  259.    scoreboard players operation @e[r=1,c=1,name=maze_save] maze_ele_walk- = acq maze_ele_walk-
  260.    scoreboard players operation @e[r=1,c=1,name=maze_save] maze_ele_walk+ = acq maze_ele_walk+
  261.    scoreboard players operation @e[r=1,c=1,name=maze_save] maze_ele_jump- = acq maze_ele_jump-
  262.    scoreboard players operation @e[r=1,c=1,name=maze_save] maze_ele_jump+ = acq maze_ele_jump+
  263.    scoreboard players operation @e[r=1,c=1,name=maze_save] maze_ele_fall- = acq maze_ele_fall-
  264.    scoreboard players operation @e[r=1,c=1,name=maze_save] maze_ele_fall+ = acq maze_ele_fall+
  265.    scoreboard players operation @e[r=1,c=1,name=maze_save] maze_ele_custom- = acq maze_ele_custom-
  266.    scoreboard players operation @e[r=1,c=1,name=maze_save] maze_ele_custom+ = acq maze_ele_custom+
  267.    
  268.    scoreboard players tag @e[r=1,c=1,name=maze_save] add maze_corner
  269.    #scoreboard players tag @e[r=1,c=1,name=maze_save] add maze_gather
  270.    scoreboard players operation @e[r=1,c=1,name=maze_save] maze_set_hit = acq maze_set_hit
  271.    scoreboard players operation @e[r=1,c=1,name=maze_save] maze_set = acq maze_set
  272.    
  273.    tellraw @a[r=15] [{"color":"yellow","text":"\n新建造点已设立。\n(提示:玩家每次距一个建造点5格范围内时,会给该玩家提供一次建造设置提示的tellraw,但是在一个建造点12格范围内不能再次设立新的建造点)"}]
  274.    
  275.    
  276.    kill @s
  277.     //}
  278.   //删除建造点delete_save{
  279.     new func delete_save
  280.     execute @e[name=maze_save,r=5,c=1] ~ ~ ~ setblock ~ ~-1 ~ minecraft:stonebrick 0 replace minecraft:stonebrick 1
  281.     /kill @e[name=maze_save,r=5,c=1]
  282.   //}
  283.   //探测testfor(助tellraw)r{
  284.   //测距
  285.     new func testfor
  286.     #是否在旁
  287.     scoreboard players set @a[score_maze_near_min=1] maze_near 0
  288.     scoreboard players set @e[name=maze_save,score_maze_near_min=1] maze_near 0
  289.     execute @a ~ ~ ~ scoreboard players set @e[name=maze_save,r=5,c=1] maze_near 1
  290.     execute @a ~ ~ ~ execute @e[name=maze_save,r=5,c=1] ~ ~ ~ scoreboard players set @a[r=5] maze_near 1
  291.    
  292.     /*问:在设置时仍运行的命令?
  293.     */
  294.     #刚好离开
  295.     #发现tellraw可以发信息给死人
  296.     #此处的“死人消息bug”不知如何解决(不要用/kill就行了)
  297.     /*有不会修的bug
  298.     */
  299.     tellraw @a[score_maze_near=0,score_maze_near2_min=1] [{"color":"gray","text":"您已离开建造设置的"},{"hoverEvent":{"action":"show_text","value":"有效编辑位置为距离建造点5格范围内"},"color":"gray","italic":True,"text":"有效编辑位置"}]
  300.     entitydata @e[name=maze_save,score_maze_near=0,score_maze_near2_min=1] {Glowing:0b}
  301.     #判断刚好进入或刚好离开
  302.     scoreboard players set @e[score_maze_near=0,score_maze_near2_min=1] maze_near2 0
  303.     #注:可能有near2无分的
  304.     scoreboard players add @e[score_maze_near_min=1] maze_near2 1
  305.     #刚好进入
  306.     execute @a[score_maze_near2_min=1,score_maze_near2=1] ~ ~ ~ execute @e[r=5,name=maze_save] ~ ~ ~ function linyangqi-parkourmaze:tellraw
  307.     entitydata @e[name=maze_save,score_maze_near2_min=1,score_maze_near2=1] {Glowing:1b}
  308.     //我会告诉你这是一个彩蛋吗(*发帖时记得去掉,百度网盘可以发图)
  309.     replaceitem entity @a[score_maze_near2_min=23333,score_maze_near2=23333] slot.armor.head minecraft:observer 1 0 {display:{Name:"WHAT ARE YOU LOOKING FOR?THERE ARE NO EASTER EGGS HEAE!"}}
  310.     //replaceitem entity @a slot.armor.head tnt 1 0 {display:{Name:"你在看什么?这里没有彩蛋!"}}
  311.   //}
  312.   //建造前的设置(tellraw)【OK循环(exe:start)——没有point&&若有人近,给近者一次||若有人改分(stat检测),给改分者一次】(tellraw操作始终全范围,c=1):{
  313.    
  314.     new func tellraw
  315.     #这玩意叫“设置菜单”,在设置菜单上操作叫“修改设置”
  316.     execute @a[r=5] ~ ~ ~ stats entity @s set SuccessCount @s maze_stat
  317.     /*
  318.     [{"color":"yellow","text":"","extra":[进去]}]
  319.     [{"color":"gold","text":"","extra":[进去]}]
  320.     gold
  321.    
  322.     "},{"hoverEvent":{"action":"show_text","value":"嗷嗷嗷"},"text":"
  323.     "hoverEvent":{"action":"show_text","value":"嗷嗷嗷"},
  324.     "},{"clickEvent":{"action":"run_command","value":"呃呃呃"},"text":"
  325.     "clickEvent":{"action":"run_command","value":"呃呃呃"},
  326.     "},{"clickEvent":{"action":"suggest_command","value":"嘿嘿嘿"},"text":"
  327.     "clickEvent":{"action":"suggest_command","value":"嘿嘿嘿"},
  328.    
  329.    
  330.     "hoverEvent":{"action":"show_text","value":"(默认值:500)\n在开始前或暂停时设置,表示继续建造n个回合后自动建造结束。"},"italic":True,
  331.     #斜体
  332.     "italic":True,
  333.    
  334.    
  335.     有“手动刷新”
  336.     scoreboard players set @s maze_near 0
  337.    
  338.     score:{name:"*",objective:"obj"}
  339.     "score":{"name":"@s","objective":"哈哈哈"}
  340.    
  341.     #关于两个标签:
  342.     /scoreboard players tag @e[r=5,name=maze_save,tag=!maze_corner] add maze_corner
  343.     /scoreboard players tag @e[r=5,name=maze_save,tag=maze_corner] remove maze_corner
  344.     /scoreboard players tag @e[r=5,name=maze_save,tag=!maze_gather] add maze_gather
  345.     /scoreboard players tag @e[r=5,name=maze_save,tag=maze_gather] remove maze_gather
  346.    
  347.     #关于格式:
  348.     /scoreboard players set @e[r=5,name=maze_save] maze_density 分数
  349.     /scoreboard players set @e[r=5,name=maze_save] maze_ele_walk- 分数
  350.    
  351.    
  352.     <建造前或停止时才可使用>\n
  353.     "hoverEvent":{"action":"show_text","value":"<建造前或停止时才可使用>\n"},"italic":True,
  354.   unless @e[tag=maze_start]
  355.    
  356.     暂时不用的部分:
  357.     {"hoverEvent":{"action":"show_text","value":"(sendCommandFeedback的设置)"},"italic":True,"text":"\n\n是否显示[系统命令反响]:"},{"clickEvent":{"action":"run_command","value":"/gamerule sendCommandFeedback true"},"text":"【是】"},{"clickEvent":{"action":"run_command","value":"/gamerule sendCommandFeedback false"},"text":"【否】"},
  358.     */
  359.    
  360. tellraw @a[r=5,score_maze_near2_min=1,score_maze_near2=1] [{"color":"yellow","text":"","extra":[{"color":"blue","text":"\n作品:跑酷迷宫机;作者:林扬骐,来自MCBBS"},{"clickEvent":{"action":"suggest_command","value":"/scoreboard objectives setdisplay sidebar maze_"},"bold":True,"text":"\n跑酷迷宫建造设置菜单:"},{"clickEvent":{"action":"run_command","value":"/scoreboard players set @s maze_near2 0"},"text":"【点此刷新】"},{"hoverEvent":{"action":"show_text","value":"1.init是该系统中的一个函数(function),用于设立记分板目标,并更改每游戏刻执行的函数为main。\n2.设置记分板目标以后才可以正常使用整个系统\n3.(一般只有init函数文件被手动更改时,或用户使用remove后,才会使用init)"},"italic":True,"clickEvent":{"action":"run_command","value":"/function linyangqi-parkourmaze:init"},"text":"\n【[点此使用init]】"},{"hoverEvent":{"action":"show_text","value":"<建造前或停止后才可使用>\n1.remove是该系统中的一个函数(function),用于反init。\n2.(一般来说,用户只有想移除系统时才会使用remove)"},"italic":True,"clickEvent":{"action":"run_command","value":"/function linyangqi-parkourmaze:remove unless @e[tag=maze_start]"},"text":"【[点此使用remove]】"},{"color":"gray","text":"","extra":[{"hoverEvent":{"action":"show_text","value":"没错就是这样。\n另外建造时也可以修改建造设置,但建议先暂停(手动暂停、手动停止方法:敲掉建造起点脚下的苔石砖可以暂停,然后重新放置苔石砖继续,或是放置普通石砖停止)"},"italic":True,"text":"\n(有“[]”且斜体"},{"text":"的:将指针放在该文字位置 以查看帮助;有"},{"clickEvent":{"action":"run_command","value":"/reload"},"text":"“【】”"},{"text":"的:直接点击触发事件;有"},{"clickEvent":{"action":"suggest_command","value":"点什么点,这里又没有下划线"},"text":"下划线"},{"text":"的:直接点击以在输入框出现格式)\n"}]},{"bold":True,"text":"1.基础设置:\n"},{"hoverEvent":{"action":"show_text","value":"(默认值:500)\n在开始前或暂停时设置,表示继续建造n个回合后自动建造结束。"},"italic":True,"text":"[剩余回合数]:"},{"clickEvent":{"action":"suggest_command","value":"/scoreboard players set @e[r=5,name=maze_save] maze_round_rest 分数"},"underlined":True,"score":{"name":"@s","objective":"maze_round_rest"}},{"hoverEvent":{"action":"show_text","value":"(默认值:50)\n“密度”是指,一个回合内,对于每一个生成的待选关键点(_stop),若周围5格范围内(r=5)已有n个关键点,则此待选点不合格。\n只有合格的待选点才<可能>成为新的迷宫路径关键点。"},"italic":True,"text":"; [密度]:"},{"clickEvent":{"action":"suggest_command","value":"/scoreboard players set @e[r=5,name=maze_save] maze_density 分数"},"underlined":True,"score":{"name":"@s","objective":"maze_density"}},{"hoverEvent":{"action":"show_text","value":"(默认值:1)\n(建造结束时生效)\n自动设置终点数是指除手动设置的终点外,找另外的n个最后几个回合生成的关键点作为终点。\n(是的,终点可以手动设置(在合适的位置(要求建造时有路径可以达到)放錾制石砖作为终点位置))"},"italic":True,"text":"; [自动设置终点数]:"},{"clickEvent":{"action":"suggest_command","value":"/scoreboard players set @e[r=5,name=maze_save] maze_endcount 分数"},"underlined":True,"score":{"name":"@s","objective":"maze_endcount"}},{"text":";\n"},{"hoverEvent":{"action":"show_text","value":"结构难度等级:\n1.每个结构在一个结构大类中会有自己的难度等级,生成结构时,只会生成设定的等级范围内的结构(尽管在之后可能因为迷宫路线交错而使生成的路径实际难度等级改变)。\n2.设置最小/最大值的记分板目标为“maze_ele_xxxxxx-/+”\n3.设置的最小最大值范围中,若不包含结构大类拥有的结构等级(即“最小”、“最大”等级都为0,或“最小等级”大于了“最大等级”)时表示不生成该种结构大类中的结构。\n4.越高等级的结构难度越大(默认的结构等级基本都是符合正常水平的)\n5.(另外,自定义的结构也可以设置难度等级)"},"bold":True,"italic":True,"text":"2.[迷宫难度设置]:\n"},{"hoverEvent":{"action":"show_text","value":"(默认值:1-4;等级范围1-5)\n跳跃点与落脚点的高度一致的结构"},"italic":True,"text":"[水平路径结构walk]:"},{"clickEvent":{"action":"suggest_command","value":"/scoreboard players set @e[r=5,name=maze_save] maze_ele_walk- 分数"},"underlined":True,"score":{"name":"@s","objective":"maze_ele_walk-"}},{"text":"-"},{"clickEvent":{"action":"suggest_command","value":"/scoreboard players set @e[r=5,name=maze_save] maze_ele_walk+ 分数"},"underlined":True,"score":{"name":"@s","objective":"maze_ele_walk+"}},{"text":"级\n"},{"hoverEvent":{"action":"show_text","value":"(默认值:1-3;等级范围1-4)\n落脚点比跳跃点的高度更高的结构"},"italic":True,"text":"[跳跃路径结构jump]:"},{"clickEvent":{"action":"suggest_command","value":"/scoreboard players set @e[r=5,name=maze_save] maze_ele_jump- 分数"},"underlined":True,"score":{"name":"@s","objective":"maze_ele_jump-"}},{"text":"-"},{"clickEvent":{"action":"suggest_command","value":"/scoreboard players set @e[r=5,name=maze_save] maze_ele_jump+ 分数"},"underlined":True,"score":{"name":"@s","objective":"maze_ele_jump+"}},{"text":"级\n"},{"hoverEvent":{"action":"show_text","value":"(默认值:1-2;等级范围1-4)\n落脚点比跳跃点的高度更高的结构"},"italic":True,"text":"[跌落路径结构fall]:"},{"clickEvent":{"action":"suggest_command","value":"/scoreboard players set @e[r=5,name=maze_save] maze_ele_fall- 分数"},"underlined":True,"score":{"name":"@s","objective":"maze_ele_fall-"}},{"text":"-"},{"clickEvent":{"action":"suggest_command","value":"/scoreboard players set @e[r=5,name=maze_save] maze_ele_fall+ 分数"},"underlined":True,"score":{"name":"@s","objective":"maze_ele_fall+"}},{"text":"级\n"},{"hoverEvent":{"action":"show_text","value":"(默认值:?-?;等级范围?-?)\n用户自定义的结构"},"italic":True,"text":"[自定义结构custom]:"},{"clickEvent":{"action":"suggest_command","value":"/scoreboard players set @e[r=5,name=maze_save] maze_ele_custom- 分数"},"underlined":True,"score":{"name":"@s","objective":"maze_ele_custom-"}},{"text":"-"},{"clickEvent":{"action":"suggest_command","value":"/scoreboard players set @e[r=5,name=maze_save] maze_ele_custom+ 分数"},"underlined":True,"score":{"name":"@s","objective":"maze_ele_custom+"}},{"text":"级"},{"clickEvent":{"action":"run_command","value":"/function linyangqi-parkourmaze:custom/tellraw "},"hoverEvent":{"action":"show_text","value":"<自定义只允许建造前或停止后才可使用,暂停时也不能>\n(非建造时站在“工作区”的命令方块上,\n然后向正上方看,然后按下潜行键,也能显示该菜单)"},"italic":True,"text":"(【[点此展开自定义结构菜单】])"}]}]
  361.     #拐角s(默认)
  362.     execute @s[tag=maze_corner] ~ ~ ~ tellraw @a[r=5,score_maze_near2_min=1,score_maze_near2=1] [{"color":"yellow","text":"","extra":[{"hoverEvent":{"action":"show_text","value":"(默认值:是)\n将原本结构的首端或末端“扳折”出直角,成为一个“L”字形,就是拐角结构了(分为首拐与末拐)"},"italic":True,"text":"[生成拐角结构]:是"},{"clickEvent":{"action":"run_command","value":"/scoreboard players tag @e[r=5,name=maze_save,tag=maze_corner] remove maze_corner"},"text":"【更改为否】"}]}]
  363.     #
  364.     execute @s[tag=!maze_corner] ~ ~ ~ tellraw @a[r=5,score_maze_near2_min=1,score_maze_near2=1] [{"color":"yellow","text":"","extra":[{"hoverEvent":{"action":"show_text","value":"(默认值:是)\n将原本结构的首端或末端“扳折”出直角,成为一个“L”字形,就是拐角结构了(分为首拐与末拐)"},"italic":True,"text":"[生成拐角结构]:否"},{"clickEvent":{"action":"run_command","value":"/scoreboard players tag @e[r=5,name=maze_save,tag=!maze_corner] add maze_corner"},"text":"【更改为是】"}]}]
  365.     #本质密集
  366.     execute @s[tag=maze_gather] ~ ~ ~ tellraw @a[r=5,score_maze_near2_min=1,score_maze_near2=1] [{"color":"yellow","text":"","extra":[{"hoverEvent":{"action":"show_text","value":"(默认值:否)\n允许路径“更直接”地交错,于是一个区域里能够出现的路径更多了,但跑酷难度可能会大大降低"},"italic":True,"text":"[“本质上的”线路更密集]:是"},{"clickEvent":{"action":"run_command","value":"/scoreboard players tag @e[r=5,name=maze_save,tag=maze_gather] remove maze_gather"},"text":"【更改为否】"}]}]
  367.     #(默认)
  368.     execute @s[tag=!maze_gather] ~ ~ ~ tellraw @a[r=5,score_maze_near2_min=1,score_maze_near2=1] [{"color":"yellow","text":"","extra":[{"hoverEvent":{"action":"show_text","value":"(默认值:否)\n允许路径“更直接”地交错,于是一个区域里能够出现的路径更多了,但跑酷难度可能会大大降低"},"italic":True,"text":"[“本质上的”线路更密集]:否"},{"clickEvent":{"action":"run_command","value":"/scoreboard players tag @e[r=5,name=maze_save,tag=!maze_gather] add maze_gather"},"text":"【更改为是】"}]}]
  369.     /*注:说明:终点也是一种point
  370.     */
  371.     #
  372. tellraw @a[r=5,score_maze_near2_min=1,score_maze_near2=1] [{"color":"yellow","text":"","extra":[{"hoverEvent":{"action":"show_text","value":"(默认值:0;概率等级范围:0-64级)\n等级越高出现碰头块概率越大,0级表示不可能出现碰头块\n<慎用!>\n1.一个顶头块可能使一条路径的难度大大提升,能力不足可能“被封死”!\n2.不过,碰头块只会在某些结构中可能出现,而且顶头块也有可能会因其他路径填充的结构空位而“被清除”,故出现概率实际较小,“幸存者”较少。\n3.(故<并非64级就是每个关键点都有100%的概率出现碰头块>)"},"italic":True,"text":"[碰头块概率等级]:"},{"clickEvent":{"action":"suggest_command","value":"/scoreboard players set @e[r=5,name=maze_save] maze_set_hit 分数"},"underlined":True,"score":{"name":"@s","objective":"maze_set_hit"}},{"bold":True,"text":"\n3.建造后的处理:\n"},{"hoverEvent":{"action":"show_text","value":"(默认值:001000101)\n(建造结束时生效)\n1.共9位数,前4位设置关键点部分,5-8位设置终点部分、是否清除结构空位部分\n2.(前两个部分格式相同,都是:暂留设置位2位(0、0)、方块设置1位(0苔石砖、1石砖、2南瓜灯、8萤石、9海晶灯)、火把设置1位(0空气、1火把、2红石火把);最后一位是0不清除、1清除)\n3.实际上,对于方块处理,可以用fill replace自带的替换功能,把指定方块替换为其他方块"},"italic":True,"text":"[替换方块、放置火把、是否清除结构空位]:"},{"clickEvent":{"action":"suggest_command","value":"/scoreboard players set @e[r=5,name=maze_save] maze_set 分数"},"underlined":True,"score":{"name":"@s","objective":"maze_set"}},{"bold":True,"text":"\n4.对当前建造点的操作:\n"},{"hoverEvent":{"action":"show_text","value":"<建造前或停止时才可使用>\n用于快速清理不需要的建造点(_save)"},"italic":True,"clickEvent":{"action":"run_command","value":"/function linyangqi-parkourmaze:delete_save unless @e[tag=maze_start]"},"text":"【[清除此建造点]】"},{"text":" "},{"hoverEvent":{"action":"show_text","value":"<建造前或停止时才可使用>\n设置完成以后,就可以在此处开始建造迷宫了"},"italic":True,"clickEvent":{"action":"run_command","value":"/function linyangqi-parkourmaze:start unless @e[tag=maze_start]"},"text":"【[在此处开始建造 跑酷迷宫]】"}]}]
  373.   //}
  374.   //<建造前或停止后才可使用>\n
  375.   //建造前——>建造中【被调用(tellraw中op触发)】(调用重复用tag?)<注:先清除妨碍:_point、_room、_stop、_random>{
  376.   new func start
  377.   #<注:先清除妨碍:_find、_point、_room、_stop、_start>
  378.   entitydata @e[tag=maze_start] {Tags:["maze_start_custom"]}
  379.   entitydata @e[name=maze_random] {CustomName:"maze_random_custom"}
  380.   entitydata @e[name=maze_find] {CustomName:"maze_find_custom"}
  381.   entitydata @e[name=maze_point] {CustomName:"maze_point_custom"}
  382.   entitydata @e[name=maze_room] {CustomName:"maze_point_room"}
  383.   entitydata @e[name=maze_stop] {CustomName:"maze_point_stop"}
  384.   #生成start
  385.   execute @e[name=maze_save] ~ ~ ~ summon area_effect_cloud ~ ~ ~ {CustomName:"maze_point",Tags:["maze","maze_start"]}
  386.   #全分附上(可能有漏?)
  387.   execute @e[tag=maze_start] ~ ~ ~ function linyangqi-parkourmaze:score
  388.   #随机器生成
  389.   execute @e[tag=maze_start] ~ ~ ~ summon area_effect_cloud ~ ~ ~ {CustomName:"maze_random",Tags:["maze_random_0"]}
  390.   execute @e[tag=maze_start] ~ ~ ~ summon area_effect_cloud ~ ~ ~ {CustomName:"maze_random",Tags:["maze_random_1"]}
  391.   execute @e[tag=maze_start] ~ ~ ~ summon area_effect_cloud ~ ~ ~ {CustomName:"maze_random",Tags:["maze_random_2"]}
  392.   execute @e[tag=maze_start] ~ ~ ~ summon area_effect_cloud ~ ~ ~ {CustomName:"maze_random",Tags:["maze_random_3"]}
  393.   scoreboard players set @e[name=maze_random,tag=maze_0] maze_math 0
  394.   scoreboard players set @e[name=maze_random,tag=maze_1] maze_math 1
  395.   scoreboard players set @e[name=maze_random,tag=maze_2] maze_math 2
  396.   scoreboard players set @e[name=maze_random,tag=maze_3] maze_math 3
  397.   new func score
  398.    scoreboard players set @s maze_round 0
  399.    scoreboard players operation @s maze_round_rest = @e[r=1,c=1,name=maze_save] maze_round_rest
  400.    scoreboard players operation @s maze_density = @e[r=1,c=1,name=maze_save] maze_density
  401.    scoreboard players operation @s maze_endcount = @e[r=1,c=1,name=maze_save] maze_endcount
  402.    scoreboard players operation @s maze_ele_walk- = @e[r=1,c=1,name=maze_save] maze_ele_walk-
  403.    scoreboard players operation @s maze_ele_walk+ = @e[r=1,c=1,name=maze_save] maze_ele_walk+
  404.    scoreboard players operation @s maze_ele_jump- = @e[r=1,c=1,name=maze_save] maze_ele_jump-
  405.    scoreboard players operation @s maze_ele_jump+ = @e[r=1,c=1,name=maze_save] maze_ele_jump+
  406.    scoreboard players operation @s maze_ele_fall- = @e[r=1,c=1,name=maze_save] maze_ele_fall-
  407.    scoreboard players operation @s maze_ele_fall+ = @e[r=1,c=1,name=maze_save] maze_ele_fall+
  408.    scoreboard players operation @s maze_ele_custom- = @e[r=1,c=1,name=maze_save] maze_ele_custom-
  409.    scoreboard players operation @s maze_ele_custom+ = @e[r=1,c=1,name=maze_save] maze_ele_custom+
  410.    #corner
  411.    execute @e[r=1,c=1,name=maze_save,tag=maze_corner] ~ ~ ~ scoreboard players tag @e[r=1,c=1,tag=maze_start] add maze_corner
  412.    #gather
  413.    execute @e[r=1,c=1,name=maze_save,tag=maze_gather] ~ ~ ~ scoreboard players tag @e[r=1,c=1,tag=maze_start] add maze_gather
  414.    scoreboard players operation @s maze_set_hit = @e[r=1,c=1,name=maze_save] maze_set_hit
  415.    scoreboard players operation @s maze_set = @e[r=1,c=1,name=maze_save] maze_set
  416.   //}
  417. //}

  418. //建造中【循环——有_start】{
  419.   //主体{
  420.   new func round
  421.   /*
  422.   _start有tag:_building的条件(若回合未止(后判)&&还有建造的空间(即有start,在前判))
  423.   (自动停止法为调用函数)
  424.   (point当前回合无法用则取消资格,并且不算回合)
  425.   main中用的exe(_start)
  426.   ignoreEntities:1b,
  427.   */
  428.   #main中用的exe(_start)
  429.   //(在开始)回合数+1
  430.   scoreboard players add @s maze_round 1
  431.   //定位:随机选择一个_point(name为此的)(加tag:_pointsele)(并赋予_statrt用于判断是否结构镜像的分数)
  432.   scoreboard players tag @r[type=area_effect_cloud,name=maze_point] add maze_pointsele
  433.   //哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
  434.   execute @e[name=maze_point,tag=maze_pointsele] setblock ~ ~ ~ minecraft:structure_block 0 replace {ignoreEntities:1b,posX:0,posY:-7,posZ:0,mode:"LOAD",name:"parkourmaze:fall_4_1"}
  435.   #拐角的镜像
  436.   scoreboard players operation @s maze_mir = @s maze_round
  437.   scoreboard players operation @s maze_mir %= 2 maze_math
  438.   scoreboard players add @s[tag=!maze_corner] maze_mir 2
  439.   execute @s[tag=maze_used] ~ ~ ~ function linyangqi-parkourmaze:mir
  440.   #内循环(递归)
  441.   function linyangqi-parkourmaze:repeat if @e[name=maze_point,tag=maze_pointsele]
  442.   #回合后或unable都fill结构
  443.   /*(回合后全部都要清uid(reset)
  444.   */
  445.   #(回合后全部都要清uid(reset)
  446.   scoreboard players reset @e[score_maze_uid_min=0] maze_uid
  447.   scoreboard players reset @e[score_maze_uid=-1] maze_uid
  448.   //哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
  449.   #若无point则止(stop)
  450.  
  451.   //}
  452.   //内循环{
  453.   new func repeat
  454.   #round的内循环(递归)
  455.  
  456.   #方向
  457.   scoreboard players set @s maze_math 0
  458.   function linyangqi-parkourmaze:random
  459.   scoreboard players operation @s maze_direction = @s maze_math
  460.   #若start有个used:1.变镜,去used,后重定向;2.镜完,此point授unable,后去pointsele
  461.   scoreboard players add @s[tag=maze_used] maze_mir 2
  462.   execute @s[tag=maze_used] ~ ~ ~ function linyangqi-parkourmaze:mir
  463.   scoreboard players tag @e[tag=maze_used] remove maze_used
  464.  
  465.  
  466.   #拐的镜像
  467.    
  468.    #方向
  469.    execute @s[score_maze_direction_min=0,score_maze_direction=0] ~ ~ ~ execute @e[name=maze_point,tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {rotation:"NONE"}
  470.    execute @s[score_maze_direction_min=1,score_maze_direction=1] ~ ~ ~ execute @e[name=maze_point,tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {rotation:"CLOCKWISE_90"}
  471.    execute @s[score_maze_direction_min=2,score_maze_direction=2] ~ ~ ~ execute @e[name=maze_point,tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {rotation:"CLOCKWISE_180"}
  472.    execute @s[score_maze_direction_min=3,score_maze_direction=3] ~ ~ ~ execute @e[name=maze_point,tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {rotation:"CLOCKWISE_270"}
  473.   #结构
  474.   execute @e[name=maze_point,tag=maze_pointsele] ~ ~ ~ function linyangqi-parkourmaze:str_eles
  475.   #后续是1.有则选后过;2.无则重来;3.unable则过
  476.   /*注:还需要判断密度
  477.   */
  478.   //}
  479.   //镜像(除了镜像外,还会按条件处理point成为“unable”){
  480.   new func mir
  481.     #除了镜像外,还会按条件处理point成为“unable”
  482.    execute @s[score_maze_mir_min=0,score_maze_mir=0] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {mirror:"NONE"}
  483.    execute @s[score_maze_mir_min=3,score_maze_mir=3] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {mirror:"NONE"}
  484.    execute @s[score_maze_mir_min=1,score_maze_mir=2] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {mirror:"LEFT_RIGHT"}
  485.    execute @s[score_maze_mir_min=4] ~ ~ ~ entitydata @e[tag=maze_pointsele] {CustomName:"maze_unable"}
  486.   //}
  487.   //随机器{
  488.   new func random
  489.   #随机0~3的分数,结果add到_start的_math分数
  490.   #若全部random都已"_used",则_start有tag:used
  491.   scoreboard players tag @r[type=area_effect_cloud,name=maze_random,tag=!maze_used] add maze_randomsele
  492.   scoreboard players tag @e[tag=maze_start] add maze_used
  493.   execute @e[tag=maze_randomsele] ~ ~ ~ scoreboard players tag @e[tag=maze_start] remove maze_used
  494.   scoreboard players operation @e[tag=maze_start] maze_math = @e[tag=maze_randomsele,name=maze_random] maze_math
  495.   scoreboard players tag @e[type=area_effect_cloud,name=maze_random,tag=maze_randomsele] remove maze_randomsele
  496.   //}
  497.   //<重点>生成各种结构并筛选,后随机选其一{
  498.     /*
  499.     1.关于镜像:是否镜像由_pointsele的分数maze_round_rest决定,0、3为不镜像,1、2为镜像,先将回合数除2的余赋予_pointsele,若当前状态没有可选的结构则分数乘以+2(或者在没有在设置中选择“出现拐角结构”,在赋值后首先+2)。当分数不小于4时表明当前选择的point已失效,不能再使用,对_pointsele处理后重新此次回合。
  500.     2.关于旋转:在决定镜像后由随机器决定(要没有_used的_random,_random被选后赋予tag:_used),分数0/1/2/3,即对应结构顺时针(从上往下看)旋转0/90/180/270度,若当前状态没有可选的结构则重新用随机器在剩下的方向中选择,若所有方向均已选择,则表明当前没有可选的结构(后续见1.)
  501.     */
  502.    
  503.     //生成结构并筛选{
  504.    /*
  505.    注:此处以前已决定了镜像与旋转
  506.    生成各种结构单元(每个生成都有自带筛选(利用函数,检查选择器及周围方块(且当前位置有“前人”则自动过关)
  507.    (利用函数判断并决定其结果)(1.不合格)一个结构中只要有一个实体(_room或_stop)不合格,则清除此结构所有实体(无maze的_room/_stop)));(2.合格)留下的结构实体(_stop和_room)会自动加上专属的uid分数以及tag:maze
  508.    若此向无可用元素,重新定向(递归)
  509.    */
  510.    //生成的结构大类(大类中结构与筛选交错)(见ele函数系列)
  511.    new func str_eles
  512.    /*
  513.    注意1.条件:等级与拐角
  514.    注意2.:
  515.    格式请见txt:自定义结构的方式 
  516.    
  517.    在前已用exe
  518.    */
  519.    function linyangqi-parkourmaze:ele/walk if @s[score_maze_ele_walk-_min=1,score_maze_ele_walk+_min=1]
  520.    function linyangqi-parkourmaze:ele/jump if @s[score_maze_ele_jump-_min=1,score_maze_ele_jump+_min=1]
  521.    function linyangqi-parkourmaze:ele/fall if @s[score_maze_ele_fall-_min=1,score_maze_ele_fall+_min=1]
  522.    function linyangqi-parkourmaze:ele/custom if @s[score_maze_ele_custom-_min=1,score_maze_ele_custom+_min=1]
  523.    //筛选函数(激活结构方块,并检查是否合格){
  524.    //不拐角
  525.    new func check
  526.    #激活
  527.    setblock ~ ~1 ~ minecraft:redstone_block
  528.    #是否手动终点(不论密度)
  529.    execute @e[name=maze_stop,tag=!maze] ~ ~ ~ detect ~ ~-1 ~ stonebrick 3 function linyangqi-parkourmaze:findend
  530.    #密度
  531.    stats entity @e[name=maze_stop,tag=!maze] set SuccessCount @e[name=maze_stop,tag=!maze] maze_stats
  532.    execute @e[name=maze_stop,tag=!maze] ~ ~ ~ testfor @e[r=5,name=maze_point]
  533.    scoreboard players operation @e[name=maze_stop,tag=!maze] maze_stats -= @e[tag=maze_start] maze_density
  534.    kill @e[name=maze_stop,tag=!maze,score_maze_stats_min=1]
  535.    #选择器OK和方块OK
  536.    //12:40哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
  537.    #查过的_room、_stop会加上tag:maze
  538.    /*
  539.    注:【关于终点】每次筛选_stop前先检测(end手动设置是靠錾制石砖),_stop的y-2/y-3处是錾制石砖则都不合格,y-1处是錾制石砖则连同同结构的_room也合格,并立刻在终点处放结构空位作为空间*******************************//【关于终点】一个回合内只要有一个路径可以直接到达终点,就随机在能到终点的路径中选取一条(目前技术看来这种方式是性价比最高的)
  540.    */
  541.    
  542.    //拐角的结构只需在生成时由tag决定(故不用管)
  543.    #要加uid(先set0,取最大后+1)
  544.    //}
  545.    //(筛选中)若探测到手动终点(即錾制石砖)(已exe){
  546.    /*
  547.    可能此处也加上“自动终点”(?)
  548.    终点会在“有无end(无tag:maze)”的情况下分情况随机选
  549.    */
  550.    new func findend
  551.    #终点允许单向不回路
  552.    #测到就定终点(除非“有前人”,则任一活),允许一回合设多个终点(同点要随机路线后maze)
  553.    #前人则任一活(要“同uid”)
  554.    scoreboard players tag @s add maze_end
  555.    #更名为跳过检查
  556.    entitydata @s {CustomName:"maze_end"}
  557.    execute @s ~ ~ ~ detect ~ ~-1 ~ stonebrick 2 execute @r[dx=0,dy=0,dz=0,type=area_effect_cloud,name=maze_stop,tag=maze_end] ~ ~ ~ function linyangqi-parkourmaze:killmyuid
  558.    
  559.    #存活者,标记“此处有人”(裂石砖)
  560.    setblock ~ ~-1 ~ minecraft:stonebrick 2
  561.    fill ~ ~ ~ ~ ~1 ~ structure_void
  562.    /*注:后end不计入“随机选”(“随机选”仍进行),但回合后也buil并加maze,然后更名为unable(tag保留)(回合后全部都要清uid(reset))
  563.    呵呵呵呵呵呵呵呵呵
  564.    */
  565.    //}
  566.     //}
  567.     //结构生成后的处理1——随机选路线:随机选择_stop,并kill掉无关的(uid不同的)结构{
  568.    
  569.     //}
  570.     //结构生成后的处理2——碰头块:随机决定碰头块是否不填充结构空位{
  571.    /*
  572.    (用随机器,等级0~64(64=4x4x4,等级越高越有可能碰头块不填充结构空位;要求概率0级则跳过判定步骤))
  573.    (要求的概率(分数)存于_start/_save,实际的随机分数(实际随机分数0~63)存于碰头块实体_hit,当要求分数“大于”实际分数则成立(实则为_hit-_start<=-1时成立))
  574.    (注:并非满等级就100%有碰头块,因为尽管它不填充,也可能有其它回合的 非碰头块 在此格填充结构空位,从而使此“不填充”失去意义;不过等级越高,“幸存者”相对也更多)
  575.    
  576.    未成立的碰头块kill掉自身
  577.    */
  578.     //}
  579.     //结构生成后的处理3——生成结构(方块),以及对_room与_stop的后续处理{
  580.    /*
  581.    剩余的_room全部填充结构空位
  582.    _stop会在自己所在的位置生成一个
  583.    
  584.    */
  585.     //}
  586.     //killmyuid{
  587.     new func killmyuid
  588.     scoreboard players operation killuid maze_uid = @s maze_uid
  589.     scoreboard players operation @e[score_maze_uid=-1] maze_uid -= killuid maze_uid
  590.     scoreboard players operation @e[score_maze_uid_min=0] maze_uid -= killuid maze_uid
  591.     kill @e[score_maze_uid_min=0,score_maze_uid=0]
  592.     scoreboard players operation @e[score_maze_uid_min=0] maze_uid += killuid maze_uid
  593.     scoreboard players operation @e[score_maze_uid=-1] maze_uid += killuid maze_uid
  594.     #kill掉同uid的
  595.     //}
  596.     //buildmyuid{
  597.     new func buildmyuid
  598.     #合格或终点才用,用来建造路线()
  599.     scoreboard players operation builduid maze_uid = @s maze_uid
  600.     scoreboard players operation @e[score_maze_uid=-1] maze_uid -= builduid maze_uid
  601.     scoreboard players operation @e[score_maze_uid_min=0] maze_uid -= builduid maze_uid
  602.     #建造
  603.     execute @e[score_maze_uid_min=0,score_maze_uid=0,name=maze_stop] ~ ~ ~ setblock ~ ~-1 ~ minecraft:stonebrick 1
  604.     execute @e[score_maze_uid_min=0,score_maze_uid=0,name=maze_end] ~ ~ ~ setblock ~ ~-1 ~ minecraft:stonebrick 1
  605.     execute @e[score_maze_uid_min=0,score_maze_uid=0,name=maze_room] ~ ~ ~ setblock ~ ~ ~ minecraft:structure_void 0
  606.     #复位
  607.     scoreboard players operation @e[score_maze_uid_min=0] maze_uid += builduid maze_uid
  608.     scoreboard players operation @e[score_maze_uid=-1] maze_uid += builduid maze_uid
  609.     //}
  610.   //}
  611.  
  612.  
  613.   //(最后之一)(1)若有point,不管;(2)若没有point,执行结束函数:_自然结束类
  614.   //(最后改)剩余回合数(1)若为0,不管;(2)若不小于2,减一;(3)若为1,减一,然后执行结束函数_强制中断类(放块手动停也是强制类)(两种停止可能合并为一个)
  615.   //另:手动强制停止(会见main?){
  616.   //}
  617.  
  618. //}
  619. /*注:建造后的“放火把”需要注意!(不能插火把的块的编码从9倒回来)
  620. */
  621. //建造后{
  622.   /*
  623.   两种停止情况:(1)所有的point都为unable(密度也会影响)无法继续而不得不停止(自然停止);(2)回合数已到,或是手动利用放置方块停止(强制停止)
  624.   情况1:所有的point都是unable,并且留下了_start,可能有 手动设置 的end(还没有自动设置的)
  625.   情况2:不一定所有的point都是unable,但是也留下了_start,也可能有 手动设置 的end(还没有自动设置的)
  626.   (两种情况干脆合在一起,即情况2则让全部的point带上unable)
  627.   (停止要改tag(kill_start和_end,换成done的),还要tellraw)
  628.   */
  629.  
  630.  
  631. //}
  632. //自定义{
  633.   //custom/testfor{
  634.   new func custom/testfor
  635.   execute @a[rx=-90,rxm=-90,score_maze_sneak2_min=1,score_maze_sneak2=1] ~ ~ ~ detect ~ ~-1 ~ command_block -1 execute @s ~ ~ ~ detect ~1 ~-1 ~ structure_block -1 function linyangqi-parkourmaze:custom/tellraw unless @e[tag=maze_start]
  636.   scoreboard players set @a[score_maze_sneak=0,score_maze_sneak2_min=1] maze_sneak2 0
  637.   scoreboard players set @a[score_maze_sneak_min=1] maze_sneak 0
  638.  
  639.   //}
  640.   /*
  641.   //一些格式{
  642.   给
  643.   /give @s minecraft:command_block 1 0 {BlockEntityTag:{auto:0b,Command:"function linyangqi-parkourmaze:custom/workplace unless @e[tag=maze_start]"},display:{Name:"工作区域生成",Lore:["保存的结构必须是全部填充结构空位,且保存实体。","若要多个工作区,请间隔至少2个默认结构大小的距离(不论结构大小是否被人为增大或缩小)","建议放4号栏位"]}}
  644.   用:
  645.   /execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1 function linyangqi-parkourmaze:workplace_remove unless @e[tag=maze_start]
  646.  
  647.   /execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1
  648.   /execute @s ~ ~-1 ~ detect ~ ~ ~ command_block -1
  649.  
  650.   testfor @e[dx=6,dy=11,dz=1]
  651.   dx=6,dy=11,dz=1,
  652.   //}
  653.   */
  654.   //custom/tellraw{
  655.   /*
  656.   [自定义结构菜单]:
  657.   各结构元素:【[快速装备各结构元素]】<1>
  658.   工作区<2>:【[工作区生成(给命令方块)]<3>】【[清除工作区结构空位]】【碰头双向首拐例子(jump_4_1_a)】【不碰头单向不拐例子(fall_2_3)】\n
  659.   [方块实体互转]<4>:【方块转实体】【实体转方块】
  660.   [快速拐角]<5>:【首拐】【反首拐】【末拐】【反末拐】
  661.  
  662.   /function linyangqi-parkourmaze:xxx unless @e[tag=maze_start]
  663.  
  664.   关于如何自定义结构,请在 地图存档位置\data\functions\linyangqi-ParkourMaze\自定义结构的方式.txt 中查看
  665.  
  666.   注:
  667.   1.(数字表示栏位)\n9运动起点(基岩)、\n8单向运动终点(红色玻璃)、\n7双向运动终点(黄绿色玻璃)、\n6结构空位、\n5经过的空间(玻璃)、\n4碰头块(红石块)\n(都有名字和说明)
  668.   2.(保存的结构必须是全部填充结构空位,且保存实体。\n若要多个工作区,请间隔至少2个默认结构大小的距离(不论结构大小是否被人为增大或缩小))
  669.   3.(名就此,有注释(上+建议放4号栏位))
  670.   4.(站在 用于生成工作区的命令方块 上方)
  671.   5.(站在 用于生成工作区的命令方块 上方+只能有一个运动终点)
  672.   */
  673.   new func custom/tellraw
  674. tellraw @s [{"color":"gold","text":"","extra":[{"hoverEvent":{"action":"show_text","value":"(非建造时站在“工作区”的命令方块上,\n然后向正上方看,然后按下潜行键,也能显示该菜单)\n1.注:所有东西只有建造前或停止后才可使用,\n否则会出现BUG\n2.关于如何自定义结构,请在\n地图存档位置\\data\\functions\\linyangqi-ParkourMaze\\custom\\自定义结构的方式.txt 中查看\n(或pcb中,区别是txt的说明更集中,pcb中的较分散)"},"italic":True,"bold":True,"text":"\n[自定义结构菜单]:\n<注:自定义部分只允许建造前或停止后才可使用,暂停时也不能>\n"},{"bold":True,"text":"1.各结构元素:"},{"clickEvent":{"action":"run_command","value":"/function linyangqi-parkourmaze:custom/slot unless @e[tag=maze_start]"},"hoverEvent":{"action":"show_text","value":"(数字表示栏位)\n9运动起点(基岩)、\n8单向运动终点(红色玻璃)、\n7双向运动终点(黄绿色玻璃)、\n6结构空位、\n5经过的空间(玻璃)、\n4碰头块(红石块)\n(都有名字和说明)"},"italic":True,"text":"【[快速装备各结构元素]】\n"},{"bold":True,"text":"2.工作区:"},{"hoverEvent":{"action":"show_text","value":"(如果你站在命令方块上操作,则会直接运行【生成工作区域】,然后把你脚下的命令方块变成“生成工作区”的命令方块,并且立刻clear掉给出的那一个“生成工作区”命令方块)\n1.保存的结构必须是全部填充结构空位,且保存实体。\n2.若要多个工作区,请间隔至少2个默认结构大小的距离\n(不论结构大小是否被人为增大或缩小))"},"clickEvent":{"action":"run_command","value":"/function linyangqi-parkourmaze:custom/workplace_give unless @e[tag=maze_start]"},"italic":True,"text":"【[工作区生成(给命令方块)]】"},{"hoverEvent":{"action":"show_text","value":"1.站在你放置的“工作区生成”命令方块上操作\n2.有效范围为结构原始默认大小\n3.只会清除结构空位、默认位置基岩,以及关键实体,其他东西还得手动清除(应该不多吧)"},"italic":True,"clickEvent":{"action":"run_command","value":"/execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1 function linyangqi-parkourmaze:custom/workplace_romove unless @e[tag=maze_start]"},"text":"【[工作区域结构空位清除(remove)]】"},{"hoverEvent":{"action":"show_text","value":"<注:此操作会覆盖你的工作区域,\n建议重新生成一个空的工作区域来看例子>\n1.站在你放置的“工作区生成”的命令方块上操作\n2.每个例子会选取默认结构中的一种\n3.要观察结构例子的元素构造,需要使用【实体转方块】\n(结构名称见放置的结构方块)\n4.看完例子后若要继续工作,需打掉结构内非空气的方块,\n并重新激活“生成工作区域”的命令方块"},"italic":True,"bold":True,"text":"\n3.[例子]:"},{"clickEvent":{"action":"run_command","value":"/execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1 function linyangqi-parkourmaze:custom/example1 unless @e[tag=maze_start]"},"text":"【例1:碰头+双向+首拐(jump_4_1_a)】"},{"clickEvent":{"action":"run_command","value":"/execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1 function linyangqi-parkourmaze:custom/example2 unless @e[tag=maze_start]"},"text":"【例2:不碰头+单向+不拐(fall_2_3)】"},{"hoverEvent":{"action":"show_text","value":"<站在命令方块上操作(会改命令方块里面的命令,但不会自动运行,成功运行后会改回“生成工作区”的命令)>\n这部分是为了方便编写结构与查看结构而设立的。"},"text":"\n4.[方块实体互转]:","bold":true,"italic":true},{"text":"【方块转实体】","clickEvent":{"action":"run_command","value":"/execute @s ~ ~-1 ~ detect ~ ~ ~ command_block -1 blockdata ~ ~ ~ {Command:"function linyangqi-parkourmaze:custom/btoe unless @e[tag=maze_start]"}"}},{"text":"【实体转方块】","clickEvent":{"action":"run_command","value":"/execute @s ~ ~-1 ~ detect ~ ~ ~ command_block -1 blockdata ~ ~ ~ {Command:"function linyangqi-parkourmaze:custom/etob unless @e[tag=maze_start]"}"}},{"hoverEvent":{"action":"show_text","value":"<站在命令方块上操作>\n1.这部分是为了方便输入 使用默认拐角法的结构 而设立的。\n2.在只有一个运动终点时才可以使用,否则可能出现BUG\n(虽然并未设置禁止程序)"},"text":"\n5.[快速拐角]:","clickEvent":{"action":"run_command","value":""},"bold":true,"italic":true},{"text":"【首拐_a】","clickEvent":{"action":"run_command","value":"/execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1 function linyangqi-parkourmaze:custom/corner_a unless @e[tag=maze_start]"}},{"text":"【反首拐_ax】","clickEvent":{"action":"run_command","value":"/execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1 function linyangqi-parkourmaze:custom/corner_ax unless @e[tag=maze_start]"}},{"text":"【末拐_b】","clickEvent":{"action":"run_command","value":"/execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1 function linyangqi-parkourmaze:custom/corner_b unless @e[tag=maze_start]"}},{"text":"【反末拐_bx】","clickEvent":{"action":"run_command","value":"/execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1 function linyangqi-parkourmaze:custom/corner_bx unless @e[tag=maze_start]"}}]}]
  675.  
  676. /*
  677. /execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1 setblock ~ ~-1 ~ minecraft:structure_block 0 replace {ignoreEntities:1b,posX:0,posY:-7,posZ:0,mode:"LOAD",name:"parkourmaze:jump_4_1_a"}
  678. /execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1 setblock ~ ~-1 ~ minecraft:structure_block 0 replace {ignoreEntities:1b,posX:0,posY:-7,posZ:0,mode:"LOAD",name:"parkourmaze:fall_2_3"}

  679. fill ~ ~ ~ ~6 ~11 ~1 air
  680. */
  681.   //}
  682.   /*
  683.   //奇怪的说明{
  684.   maze_find:用于表示运动起点(手动放置没用,只是帮助建造结构)
  685.  
  686.   会给的东西:
  687.   1.结构空位fill(cb)与清除(cb)
  688.   2.结构方块:储存(名为parkourmaze:maze_ele_custom_1_1(暂不自动加a/b))
  689.   3.表示的方块:结构空位、玻璃、蓝玻璃(表示运动起点_find)、红玻璃(表示运动起点_stop)
  690.   注意事项(见“自定义结构的方式”):
  691.   1.运动起点一定不要再填_room(非“本质密集”时,room不允许自己位置的方块原本是结构空位,而运动起点的两格一定会填充结构空位)了,运动终点的_stop会自带一个_room,但是其上方一格仍然需要填_room
  692.   2.保证你的运动起点位置正确(红绿蓝三条有颜色的线的交点,其正上方n格都可以作为运动起点)
  693.   3.最终还会需要改结构方块的 posY:从你的运动起点脚下的格子作为第1个格子开始竖直向下数,向下数到结构区域最下一个格子,假设数了n个格子,那么设置的结构方块(当然,也有自动起点竖向校准,但是若需要校准,整个建造过程可能会更卡更慢,所以建议在改函数时就)
  694.   4.会给出结构格式的,在“自定义结构的方式.txt”中查看
  695.   //}
  696.   */
  697.   //给物品栏{
  698.     /*
  699.     replaceitem entity @s slot.hotbar.4 bedrock 1 0 {display:{Name:"运动起点_find",Lore:["哈哈哈"]}}
  700.     */
  701.     new func custom/slot
  702.     //换行:","
  703.     replaceitem entity @s slot.hotbar.8 bedrock 1 0 {display:{Name:"运动起点_find",Lore:["1.在生成工作区时作表示起点的标记,更便于各结构元素的定位","2.(在你下半身体陷入该基岩的状况下,你的位置就是运动起点)"]}}
  704.     replaceitem entity @s slot.hotbar.7 stained_glass 1 14 {display:{Name:"单向运动终点_stop(_oneway)",Lore:["1.用于表示无法原路返回的路径的运动终点","2.(表示方法与运动起点类似(见其物品备注))","3.(终点也会自动生成_room实体)"]}}
  705.     replaceitem entity @s slot.hotbar.6 stained_glass 1 5 {display:{Name:"双向运动终点_stop",Lore:["1.用于表示可以原路返回的路径的运动终点","2.(表示方法与运动起点类似(见其物品备注))","(终点也会自动生成_room实体)"]}}
  706.     replaceitem entity @s slot.hotbar.5 structure_void 1 0 {display:{Lore:["1.保存结构时结构必须整个都填满这中方块","2.(也别忘了【方块转实体】后再保存)","3.(在这个作品中,保存结构实际只为保存实体)"]}}
  707.     replaceitem entity @s slot.hotbar.4 glass 1 0 {display:{Name:"经过的空间_room",Lore:["1.用来表示一次运动需要经过的路径","(我们跑酷经过的空气,头脚经过的都算)","2.表示法:多个“点”组成“线(读得懂这句吧?)”","3.(从本质上讲,生成的_room实体是拿来“挖空”的,","哪里要空挖哪里(可以无视前两条说明(雾)))","4.注【技术类】:如果设置中未设置“本质密集”,","筛选结构时若_room(无_hit)或_stop发现","自己的位置已经是结构空位,","那么这个回合,这整个结构都是不合格的。","(故运动起点处禁止放置结构空位)"]}}
  708.     replaceitem entity @s slot.hotbar.3 redstone_block 1 0 {display:{Name:"碰头块_room(_hit)",Lore:["1.碰头块,指生成路径时可能“挖空”","也可能不“挖空”的“经过的空间”","2.“碰头块概率”是指“不挖空”的概率","(尽管可能被其他路径“挖空”)"]}}
  709.   //}
  710.   //1.工作区生成(在命令方块中?){
  711.   new func custom/workplace_give
  712.   give @s minecraft:command_block 1 0 {BlockEntityTag:{auto:0b,Command:"function linyangqi-parkourmaze:custom/workplace unless @e[tag=maze_start]"},display:{Name:"工作区域生成",Lore:["保存的结构必须是全部填充结构空位,且保存实体。","若要多个工作区,请间隔至少2个默认结构大小的距离(不论结构大小是否被人为增大或缩小)","建议放4号栏位","<生成工作区用的填充方式是keep>","(即再次激活可用来快速填充结构空位)"]}}
  713.   execute @s ~ ~-1 ~ detect ~ ~ ~ command_block -1 function linyangqi-parkourmaze:custom/workplace unless @e[tag=maze_start]
  714.   execute @s ~ ~-1 ~ detect ~ ~ ~ command_block -1 clear @s minecraft:command_block -1 1 {BlockEntityTag:{auto:0b,Command:"function linyangqi-parkourmaze:custom/workplace unless @e[tag=maze_start]"},display:{Name:"工作区域生成"}}
  715.   new func custom/workplace
  716.   #一个结构默认大小为7x(4+1+7)x2
  717.   #放命令方块中执行
  718.   setblock ~1 ~ ~ minecraft:structure_block 0 keep{mode:"SAVE",ignoreEntities:0b,showboundingbox:1b,showair:1b,posX:0,posY:1,posZ:0,sizeX:7,sizeY:12,sizeZ:2,name:"parkourmaze:maze_ele_custom_1_1"}
  719.   //{ignoreEntities:1b,posX:0,posY:结构相对纵坐标,posZ:0,mode:"LOAD",name:"parkourmaze:walk_1"}
  720.   /*
  721.  
  722.   [23:51:42] 数据标签未更改:{metadata:"",mirror:"NONE",ignoreEntities:1b,powered:0b,seed:0L,author:"linyangqi",rotation:"NONE",posX:0,mode:"SAVE",posY:1,sizeX:7,posZ:0,integrity:1.0f,showair:1b,x:30,name:"linyangqi:test",y:69,z:117,id:"minecraft:structure_block",sizeY:12,sizeZ:2,showboundingbox:1b}
  723.   */
  724.   setblock ~1 ~8 ~ minecraft:bedrock 0 keep
  725.   fill ~1 ~1 ~ ~7 ~12 ~1 structure_void 0 keep
  726.   tellraw @a [{"hoverEvent":{"action":"show_text","value":"(注意工作区域内不要有你自己的重要物品,若有,请运行remove,然后重新选地点生成工作区域)”)"},"italic":True,"color":"blue","text":"已运行【工作区域生成】"}]
  727.   #说话:(已建、一次可存在多个工作区,但找最近一个,不要紧挨着放(至少距两格,即隔一格),若范围内有重要的东西,请先转移,后重新激活命令方块)
  728.   blockdata ~ ~ ~ {Command:"function linyangqi-parkourmaze:custom/workplace unless @e[tag=maze_start]"}
  729.  
  730.   new func custom/workplace_romove
  731.   #清除工作区的结构空位?
  732.   /*站在命令方块上(auto:自触发)
  733.   function linyangqi-parkourmaze:custom/workplace unless @e[tag=maze_start]
  734.   function linyangqi-parkourmaze:custom/workplace_remove unless @e[tag=maze_start]
  735.  
  736.   */
  737.   fill ~ ~ ~ ~6 ~11 ~1 air 0 replace structure_void -1
  738.   fill ~ ~7 ~ ~ ~7 ~ air 0 replace bedrock -1
  739.   kill @e[dx=6,dy=11,dz=1,name=maze_find,tag=!maze_custom]
  740.   kill @e[dx=6,dy=11,dz=1,name=maze_room,tag=!maze_custom]
  741.   kill @e[dx=6,dy=11,dz=1,name=maze_stop,tag=!maze_custom]
  742.   tellraw @s [{"color":"blue","text":"已清除工作区域结构空位、默认位置的基岩,以及关键实体"}]
  743.   //}
  744.   //2.方块与实体互换(站在命令方块上操作,有效范围为结构原始默认大小){
  745.   /*站在命令方块上操作
  746.   /execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1
  747.  
  748.   /execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1 function linyangqi-parkourmaze:custom/btoe unless @e[tag=maze_start]
  749.   /execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1 function linyangqi-parkourmaze:custom/etob unless @e[tag=maze_start]
  750.   */
  751.   new func custom/btoe
  752.   #全称为block to entity(方块转实体)
  753.   #转实体一定要在命令方块中运行(对位),转方块也尽量命令块中

  754. kill @e[name=maze_replace]
  755. summon area_effect_cloud ~1 ~1 ~ {CustomName:"maze_replace"}
  756. summon area_effect_cloud ~1 ~1 ~1 {CustomName:"maze_replace"}
  757. summon area_effect_cloud ~2 ~1 ~ {CustomName:"maze_replace"}
  758. summon area_effect_cloud ~2 ~1 ~1 {CustomName:"maze_replace"}
  759. summon area_effect_cloud ~3 ~1 ~ {CustomName:"maze_replace"}
  760. summon area_effect_cloud ~3 ~1 ~1 {CustomName:"maze_replace"}
  761. summon area_effect_cloud ~4 ~1 ~ {CustomName:"maze_replace"}
  762. summon area_effect_cloud ~4 ~1 ~1 {CustomName:"maze_replace"}
  763. summon area_effect_cloud ~5 ~1 ~ {CustomName:"maze_replace"}
  764. summon area_effect_cloud ~5 ~1 ~1 {CustomName:"maze_replace"}
  765. summon area_effect_cloud ~6 ~1 ~ {CustomName:"maze_replace"}
  766. summon area_effect_cloud ~6 ~1 ~1 {CustomName:"maze_replace"}
  767. summon area_effect_cloud ~7 ~1 ~ {CustomName:"maze_replace"}
  768. summon area_effect_cloud ~7 ~1 ~1 {CustomName:"maze_replace"}
  769. function linyangqi-parkourmaze:custom/btoe2 unless @e[tag=maze_start]
  770. function linyangqi-parkourmaze:custom/btoe2 unless @e[tag=maze_start]
  771. function linyangqi-parkourmaze:custom/btoe2 unless @e[tag=maze_start]
  772. function linyangqi-parkourmaze:custom/btoe2 unless @e[tag=maze_start]
  773. function linyangqi-parkourmaze:custom/btoe2 unless @e[tag=maze_start]
  774. #
  775. function linyangqi-parkourmaze:custom/btoe2 unless @e[tag=maze_start]
  776. function linyangqi-parkourmaze:custom/btoe2 unless @e[tag=maze_start]
  777. function linyangqi-parkourmaze:custom/btoe2 unless @e[tag=maze_start]
  778. function linyangqi-parkourmaze:custom/btoe2 unless @e[tag=maze_start]
  779. function linyangqi-parkourmaze:custom/btoe2 unless @e[tag=maze_start]
  780. #
  781. function linyangqi-parkourmaze:custom/btoe2 unless @e[tag=maze_start]
  782. function linyangqi-parkourmaze:custom/btoe2 unless @e[tag=maze_start]
  783. kill @e[name=maze_replace]
  784. tellraw @a[r=5] [{"hoverEvent":{"action":"show_text","value":"(就算结构里一个非结构空位的方块也没有,此消息同样会发出,此消息只表示“你点击了【方块转实体】”)"},"italic":True,"color":"blue","text":"已运行【方块转实体】"}]
  785. blockdata ~ ~ ~ {Command:"function linyangqi-parkourmaze:custom/workplace unless @e[tag=maze_start]"}
  786.   /*
  787.   //修好fill的bug才能用{
  788.  
  789.   fill ~ ~ ~ ~6 ~11 ~1 command_block 0 replace glass -1 {auto:1b,Command:"summon area_effect_cloud ~ ~ ~ {Duration:2100000000,CustomName:"maze_room",Tags:["maze_custom"]}"}
  790.   fill ~ ~ ~ ~6 ~11 ~1 command_block 0 replace redstone_block -1 {auto:1b,Command:"summon area_effect_cloud ~ ~ ~ {Duration:2100000000,CustomName:"maze_room",Tags:["maze_custom","maze_hit"]}"}
  791.   fill ~ ~ ~ ~6 ~11 ~1 command_block 0 replace bedrock -1 {auto:1b,Command:"summon area_effect_cloud ~ ~ ~ {Duration:2100000000,CustomName:"maze_find",Tags:["maze_custom"]}"}
  792.   fill ~ ~ ~ ~6 ~11 ~1 command_block 0 replace stained_glass 5 {auto:1b,Command:"summon area_effect_cloud ~ ~ ~ {Duration:2100000000,CustomName:"maze_stop",Tags:["maze_custom"]}"}
  793.   fill ~ ~ ~ ~6 ~11 ~1 command_block 0 replace stained_glass 14 {auto:1b,Command:"summon area_effect_cloud ~ ~ ~ {Duration:2100000000,CustomName:"maze_stop",Tags:["maze_custom","maze_oneway"]}"}
  794.   //}
  795.   */
  796.   new func custom/btoe2
  797.   /*
  798.   execute @e[name=maze_room,tag=maze_custom] ~ ~ ~ setblock ~ ~ ~ minecraft:structure_void
  799.   execute @e[name=maze_find,tag=maze_custom] ~ ~ ~ setblock ~ ~ ~ minecraft:structure_void
  800.   execute @e[name=maze_stop,tag=maze_custom] ~ ~ ~ setblock ~ ~ ~ minecraft:structure_void
  801.   execute @s ~ ~ ~ scoreboard players tag @e[tag=maze_custom] remove maze
  802.   */
  803.   execute @e[name=maze_replace] ~ ~ ~ detect ~ ~ ~ glass -1 summon area_effect_cloud ~ ~ ~ {Duration:2100000000,CustomName:"maze_room"}
  804.   execute @e[name=maze_replace] ~ ~ ~ detect ~ ~ ~ stained_glass -1 summon area_effect_cloud ~ ~ ~ {Duration:2100000000,CustomName:"maze_room"}
  805.   execute @e[name=maze_replace] ~ ~ ~ detect ~ ~ ~ redstone_block -1 summon area_effect_cloud ~ ~ ~ {Duration:2100000000,CustomName:"maze_room",Tags:["maze_hit"]}
  806.   execute @e[name=maze_replace] ~ ~ ~ detect ~ ~ ~ bedrock -1 summon area_effect_cloud ~ ~ ~ {Duration:2100000000,CustomName:"maze_find"}
  807.   execute @e[name=maze_replace] ~ ~ ~ detect ~ ~ ~ stained_glass 5 summon area_effect_cloud ~ ~ ~ {Duration:2100000000,CustomName:"maze_stop"}
  808.   execute @e[name=maze_replace] ~ ~ ~ detect ~ ~ ~ stained_glass 14 summon area_effect_cloud ~ ~ ~ {Duration:2100000000,CustomName:"maze_stop",Tags:["maze_oneway"]}
  809.   execute @e[name=maze_replace] ~ ~ ~ setblock ~ ~ ~ minecraft:structure_void
  810.   tp @e[name=maze_replace] ~ ~1 ~
  811.  
  812.   #maze_custom标签只作在非建造时的辅助自定义的标志
  813.   /*
  814.   summon area_effect_cloud ~ ~ ~ {Duration:2100000000,CustomName:"maze_room",Tags:["maze"]}
  815.   execute @s[tag=!maze_custom] ~ ~ ~
  816.   */
  817.  
  818.   new func custom/etob
  819.   #不用站位
  820.   #全称为entity to block(实体转方块)
  821.   execute @e[dx=7,dy=12,dz=1,name=maze_room] ~ ~ ~ execute @s[tag=!maze_custom] ~ ~ ~ setblock ~ ~ ~ minecraft:glass
  822.   execute @e[dx=7,dy=12,dz=1,name=maze_room,tag=maze_hit] ~ ~ ~ execute @s[tag=!maze_custom] ~ ~ ~ setblock ~ ~ ~ minecraft:redstone_block
  823.   execute @e[dx=7,dy=12,dz=1,name=maze_find] ~ ~ ~ execute @s[tag=!maze_custom] ~ ~ ~ setblock ~ ~ ~ minecraft:bedrock
  824.   execute @e[dx=7,dy=12,dz=1,name=maze_stop,tag=!maze_oneway] ~ ~ ~ execute @s[tag=!maze_custom] ~ ~ ~ setblock ~ ~ ~ minecraft:stained_glass 5
  825.   execute @e[dx=7,dy=12,dz=1,name=maze_stop,tag=maze_oneway] ~ ~ ~ execute @s[tag=!maze_custom] ~ ~ ~ setblock ~ ~ ~ minecraft:stained_glass 14
  826.   #故一定不能在建造中或暂停时使用
  827.   kill @e[dx=7,dy=12,dz=1,name=maze_find,tag=!maze_custom]
  828.   kill @e[dx=7,dy=12,dz=1,name=maze_room,tag=!maze_custom]
  829.   kill @e[dx=7,dy=12,dz=1,name=maze_stop,tag=!maze_custom]
  830.   tellraw @a[r=5] [{"hoverEvent":{"action":"show_text","value":"(就算结构里一个实体也没有,此消息同样会发出,此消息只表示“你点击了【实体转方块】”)"},"italic":True,"color":"blue","text":"已运行【实体转方块】"}]
  831.   blockdata ~ ~ ~ {Command:"function linyangqi-parkourmaze:custom/workplace unless @e[tag=maze_start]"}
  832.   //}
  833.   //3.快速拐角(#必须在实体状态)(站在命令方块上操作,有效范围为结构原始默认大小){
  834.     /*
  835.     #自动拐角有效范围为结构原始默认大小,一个结构只有一个终点时,且状态属于[不拐的直路、首拐、末拐]才可以用对应的快速拐角
  836.     每个拐角都用了execute偏移坐标,或者你让实体在相应位置执行也可。
  837.     */
  838.     new func custom/corner_a
  839.     #首拐
  840.     #必须在实体状态
  841.     #自动拐角有效范围为结构原始默认大小,一个结构只有一个终点时,且状态属于[不拐的直路、首拐、末拐]才可以用对应的快速拐角
  842.     #
  843.     #方块状态下其实本来可以的:
  844.     #clone ~1 ~ ~ ~6 ~11 ~ ~ ~ ~1 masked move
  845.     #/fill ~1 ~ ~ ~6 ~11 ~ structure_void
  846.     execute @s ~1 ~ ~ tp @e[dx=5,dy=11,dz=0,tag=!maze_custom] ~-1 ~ ~1
  847.     tellraw @s [{"hoverEvent":{"action":"show_text","value":"(可能显示碰撞体积的状态下,会看见结构“并未成功拐角”(看见药水云还在原来的位置),实际上已经tp,“不动”只是视觉效果,可以用一次【实体转方块】验证,然后用【方块转实体】还原)"},"italic":True,"color":"blue","text":"已运行【首拐a】"}]
  848.     new func custom/corner_ax
  849.     #反首拐
  850.     #必须在实体状态
  851.     #自动拐角有效范围为结构原始默认大小,一个结构只有一个终点时,且状态属于[不拐的直路、首拐、末拐]才可以用对应的快速拐角
  852.     execute @s ~ ~ ~1 tp @e[dx=5,dy=11,dz=0,tag=!maze_custom] ~1 ~ ~-1
  853.     tellraw @s [{"hoverEvent":{"action":"show_text","value":"(可能显示碰撞体积的状态下,会看见结构“并未成功拐角”(看见药水云还在原来的位置),实际上已经tp,“不动”只是视觉效果,可以用一次【实体转方块】验证,然后用【方块转实体】还原)"},"italic":True,"color":"blue","text":"已运行【反首拐ax】"}]
  854.     new func custom/corner_b
  855.     #末拐
  856.     #必须在实体状态
  857.     #自动拐角有效范围为结构原始默认大小,一个结构只有一个终点时,且状态属于[不拐的直路、首拐、末拐]才可以用对应的快速拐角
  858.     execute @s ~1 ~ ~ execute @e[dx=5,dy=11,dz=0,name=maze_stop] ~ ~-11 ~ tp @e[dx=0,dy=22,dz=0,tag=!maze_custom] ~-1 ~ ~1
  859.     tellraw @s [{"hoverEvent":{"action":"show_text","value":"(可能显示碰撞体积的状态下,会看见结构“并未成功拐角”(看见药水云还在原来的位置),实际上已经tp,“不动”只是视觉效果,可以用一次【实体转方块】验证,然后用【方块转实体】还原)"},"italic":True,"color":"blue","text":"已运行【末拐b】"}]
  860.     new func custom/corner_bx
  861.     #反末拐
  862.     #必须在实体状态
  863.     #自动拐角有效范围为结构原始默认大小,一个结构只有一个终点时,且状态属于[不拐的直路、首拐、末拐]才可以用对应的快速拐角
  864.     execute @s ~ ~ ~1 execute @e[dx=5,dy=11,dz=0,name=maze_stop] ~ ~-11 ~ tp @e[dx=0,dy=22,dz=0,tag=!maze_custom] ~1 ~ ~-1
  865.     tellraw @s [{"hoverEvent":{"action":"show_text","value":"(可能显示碰撞体积的状态下,会看见结构“并未成功拐角”(看见药水云还在原来的位置),实际上已经tp,“不动”只是视觉效果,可以用一次【实体转方块】验证,然后用【方块转实体】还原)"},"italic":True,"color":"blue","text":"已运行【反末拐bx】"}]
  866.   //}
  867.   //4.例子{
  868.   new func custom/example1
  869.   fill ~ ~ ~ ~6 ~11 ~1 air
  870.   /execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1 setblock ~ ~-1 ~ minecraft:structure_block 0 replace {ignoreEntities:1b,posX:0,posY:-7,posZ:0,mode:"LOAD",name:"parkourmaze:jump_4_1_a"}
  871.   tellraw @s [{"color":"blue","text":"例1已生成"}]
  872.   new func custom/example2
  873.   fill ~ ~ ~ ~6 ~11 ~1 air
  874.   /execute @s ~1 ~ ~ detect ~-1 ~-1 ~ command_block -1 setblock ~ ~-1 ~ minecraft:structure_block 0 replace {ignoreEntities:1b,posX:0,posY:-7,posZ:0,mode:"LOAD",name:"parkourmaze:fall_2_3"}
  875.   tellraw @s [{"color":"blue","text":"例2已生成"}]
  876.   //}
  877. //}
  878. //结构方块测试{
  879.   /*
  880.   创造结构的方式:
  881.   1.获得结构方块(maze_ele_name,显框——颜色线处为原点)以及角落模式(默认名同,确定位置)、操作用命令方块(定:_room与stop,还有fill用法(replace)(可以c加中键点击与tab))以及结构空位
  882.   2.用角落块定位,后改内容,后改名
  883.   3.后文件中定uid与等级
  884.  
  885.   (或是用大量函数来取代,其实加载还挺快)
  886.  
  887.  
  888.   [21:14:34] 数据标签未更改:{metadata:"",mirror:"NONE",ignoreEntities:0b,powered:0b,seed:0L,author:"linyangqi",rotation:"NONE",posX:0,mode:"SAVE",posY:1,sizeX:5,posZ:0,integrity:1.0f,showair:1b,x:48,name:"linyangqi:test",y:74,z:123,id:"minecraft:structure_block",sizeY:3,sizeZ:4,showboundingbox:1b}
  889.  
  890.   [22:31:44] 数据标签未更改:{metadata:"",mirror:"NONE",ignoreEntities:0b,powered:0b,seed:0L,author:"linyangqi",rotation:"NONE",posX:0,mode:"LOAD",posY:1,sizeX:5,posZ:0,integrity:1.0f,showair:1b,x:46,name:"linyangqi:test",y:67,z:129,id:"minecraft:structure_block",sizeY:3,sizeZ:4,showboundingbox:1b}
  891.   [22:35:49] 数据标签未更改:{metadata:"",mirror:"LEFT_RIGHT",ignoreEntities:0b,powered:0b,seed:0L,author:"linyangqi",rotation:"CLOCKWISE_90",posX:0,mode:"LOAD",posY:1,sizeX:5,posZ:0,integrity:1.0f,showair:1b,x:46,name:"linyangqi:test",y:67,z:129,id:"minecraft:structure_block",sizeY:3,sizeZ:4,showboundingbox:1b}
  892.   [22:36:51] 数据标签未更改:{metadata:"",mirror:"FRONT_BACK",ignoreEntities:1b,powered:0b,seed:0L,author:"linyangqi",rotation:"CLOCKWISE_180",posX:0,mode:"LOAD",posY:1,sizeX:5,posZ:0,integrity:1.0f,showair:1b,x:46,name:"linyangqi:test",y:67,z:129,id:"minecraft:structure_block",sizeY:3,sizeZ:4,showboundingbox:1b}
  893.  
  894.   mirror:"NONE" mirror:"LEFT_RIGHT" mirror:"FRONT_BACK"
  895.   rotation:"NONE" rotation:"CLOCKWISE_90" rotation:"CLOCKWISE_180" rotation:"CLOCKWISE_270"
  896.   */
  897.  
  898.   /*
  899.   new func str_test
  900.   //setblock ~ ~1 ~ minecraft:structure_block 0 replace {metadata:"",mirror:"NONE",ignoreEntities:0b,powered:0b,seed:0L,author:"linyangqi",rotation:"NONE",posX:0,mode:"LOAD",posY:1,posZ:0,integrity:1.0f,showair:1b,x:46,name:"linyangqi:test",y:67,z:129,id:"minecraft:structure_block",showboundingbox:1b}
  901.   setblock ~ ~1 ~ minecraft:structure_block 0 replace {ignoreEntities:1b,posX:0,posY:1,posZ:0,mode:"LOAD",name:"linyangqi:test"}
  902.   setblock ~ ~2 ~ minecraft:redstone_block
  903.   fill ~ ~1 ~ ~ ~2 ~ structure_void
  904.   */

  905.  
  906. //}

  907. /*
  908. 注(提醒自己):帖子里要把function文件以及结构文件的安装方法写出哦
  909. */

  910. //结构(ele系列){
  911.   /*
  912.   //说明、格式{
  913.   (这本来是一个文件夹中的,但后来发现没必要重新来一个文件夹)
  914.   结构名称建议格式:
  915.     作者或大类或其它:此结构种类_该结构在结构大类中的等级_同等级中的编号_拐角后缀(首拐a末拐b,如果非拐角则可以省去)
  916.     (例1:parkourmaze:walk_1_1_a;例2:maze_linyangqi:walk_1_1_a;例3:maze_ele_walk:1_1_a)
  917.  
  918.   命令格式:
  919.     不拐角的:
  920.    execute @e[score_maze_ele_walk-_min=1,score_maze_ele_walk+=1,c=1,tag=maze_start] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ setblock ~ ~ ~ minecraft:structure_block 0 replace {ignoreEntities:1b,posX:0,posY:结构相对纵坐标,posZ:0,name:"parkourmaze:walk_1"}
  921.    function linyangqi-parkourmaze:check
  922.     拐角的(只是多了一个要求的tag:maze_corner还有一个结构名称的后缀):
  923.    execute @e[score_maze_ele_walk-_min=1,score_maze_ele_walk+=1,c=1,tag=maze_start] ~ ~ ~ execute @s[tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ setblock ~ ~ ~ minecraft:structure_block 0 replace {ignoreEntities:1b,posX:0,posY:结构相对纵坐标,posZ:0,name:"parkourmaze:walk_1_a"}
  924.    function linyangqi-parkourmaze:check
  925.    
  926.     3个一组:
  927.     “#i”表示此结构在结构大类中的等级
  928.     walk是结构大类,可以更换
  929.     execute @s[score_maze_ele_walk-_min=#i,score_maze_ele_walk+=#i,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_#i_1"}
  930.     function linyangqi-parkourmaze:check
  931.     execute @s[score_maze_ele_walk-_min=#i,score_maze_ele_walk+=#i,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_#i_1_a"}
  932.     function linyangqi-parkourmaze:check
  933.     execute @s[score_maze_ele_walk-_min=#i,score_maze_ele_walk+=#i,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_#i_1_b"}
  934.     function linyangqi-parkourmaze:check
  935.     //}
  936.    //穷举{
  937.    for 1 to 5
  938. print:execute @e[score_maze_ele_walk-_min=#i,score_maze_ele_walk+=#i,c=1,tag=maze_start] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ setblock ~ ~ ~ minecraft:structure_block 0 replace {ignoreEntities:1b,posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_#i_1"}
  939. print:function linyangqi-parkourmaze:check
  940. print:execute @e[score_maze_ele_walk-_min=#i,score_maze_ele_walk+=#i,c=1,tag=maze_start] ~ ~ ~ print:execute @s[tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ setblock ~ ~ ~ minecraft:structure_block 0 replace {ignoreEntities:1b,posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_#i_1_a"}
  941. print:function linyangqi-parkourmaze:check
  942. print:execute @e[score_maze_ele_walk-_min=#i,score_maze_ele_walk+=#i,c=1,tag=maze_start] ~ ~ ~ print:execute @s[tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ setblock ~ ~ ~ minecraft:structure_block 0 replace {ignoreEntities:1b,posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_#i_1_b"}
  943. print:function linyangqi-parkourmaze:check
  944.    //}
  945.    
  946.   */
  947.   //水平路径结构{
  948.   new func ele/walk
  949.   /*
  950.   若有拐角,会就在此函数中自带(由if (tag)决定)
  951.   启动程序也在“筛选”中,故此只顾setblock与function
  952.   拐角的结构
  953.  
  954.  
  955.   */
  956. execute @s[score_maze_ele_walk-_min=1,score_maze_ele_walk+=1,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_1_1"}
  957. function linyangqi-parkourmaze:check
  958. execute @s[score_maze_ele_walk-_min=1,score_maze_ele_walk+=1,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_1_1_a"}
  959. function linyangqi-parkourmaze:check
  960. execute @s[score_maze_ele_walk-_min=1,score_maze_ele_walk+=1,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_1_1_b"}
  961. function linyangqi-parkourmaze:check

  962. execute @s[score_maze_ele_walk-_min=2,score_maze_ele_walk+=2,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_2_1"}
  963. function linyangqi-parkourmaze:check
  964. execute @s[score_maze_ele_walk-_min=2,score_maze_ele_walk+=2,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_2_1_a"}
  965. function linyangqi-parkourmaze:check
  966. execute @s[score_maze_ele_walk-_min=2,score_maze_ele_walk+=2,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_2_1_b"}
  967. function linyangqi-parkourmaze:check

  968. execute @s[score_maze_ele_walk-_min=3,score_maze_ele_walk+=3,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_3_1"}
  969. function linyangqi-parkourmaze:check
  970. execute @s[score_maze_ele_walk-_min=3,score_maze_ele_walk+=3,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_3_1_a"}
  971. function linyangqi-parkourmaze:check
  972. execute @s[score_maze_ele_walk-_min=3,score_maze_ele_walk+=3,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_3_1_b"}
  973. function linyangqi-parkourmaze:check

  974. execute @s[score_maze_ele_walk-_min=4,score_maze_ele_walk+=4,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_4_1"}
  975. function linyangqi-parkourmaze:check
  976. execute @s[score_maze_ele_walk-_min=4,score_maze_ele_walk+=4,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_4_1_a"}
  977. function linyangqi-parkourmaze:check
  978. execute @s[score_maze_ele_walk-_min=4,score_maze_ele_walk+=4,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_4_1_b"}
  979. function linyangqi-parkourmaze:check

  980. execute @s[score_maze_ele_walk-_min=5,score_maze_ele_walk+=5,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_5_1"}
  981. function linyangqi-parkourmaze:check
  982. execute @s[score_maze_ele_walk-_min=5,score_maze_ele_walk+=5,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_5_1_a"}
  983. function linyangqi-parkourmaze:check
  984. execute @s[score_maze_ele_walk-_min=5,score_maze_ele_walk+=5,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:walk_5_1_b"}
  985. function linyangqi-parkourmaze:check
  986.   //}
  987.   //跳跃路径结构{
  988.   new func ele/jump
  989. execute @s[score_maze_ele_jump-_min=1,score_maze_ele_jump+=1,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:jump_1_1"}
  990. function linyangqi-parkourmaze:check
  991. execute @s[score_maze_ele_jump-_min=1,score_maze_ele_jump+=1,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:jump_1_1_a"}
  992. function linyangqi-parkourmaze:check
  993. execute @s[score_maze_ele_jump-_min=1,score_maze_ele_jump+=1,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:jump_1_1_b"}
  994. function linyangqi-parkourmaze:check

  995. execute @s[score_maze_ele_jump-_min=2,score_maze_ele_jump+=2,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:jump_2_1"}
  996. function linyangqi-parkourmaze:check
  997. execute @s[score_maze_ele_jump-_min=2,score_maze_ele_jump+=2,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:jump_2_1_a"}
  998. function linyangqi-parkourmaze:check
  999. execute @s[score_maze_ele_jump-_min=2,score_maze_ele_jump+=2,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:jump_2_1_b"}
  1000. function linyangqi-parkourmaze:check

  1001. execute @s[score_maze_ele_jump-_min=3,score_maze_ele_jump+=3,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:jump_3_1"}
  1002. function linyangqi-parkourmaze:check
  1003. execute @s[score_maze_ele_jump-_min=3,score_maze_ele_jump+=3,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:jump_3_1_a"}
  1004. function linyangqi-parkourmaze:check
  1005. execute @s[score_maze_ele_jump-_min=3,score_maze_ele_jump+=3,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:jump_3_1_b"}
  1006. function linyangqi-parkourmaze:check

  1007. execute @s[score_maze_ele_jump-_min=4,score_maze_ele_jump+=4,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:jump_4_1"}
  1008. function linyangqi-parkourmaze:check
  1009. execute @s[score_maze_ele_jump-_min=4,score_maze_ele_jump+=4,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:jump_4_1_a"}
  1010. function linyangqi-parkourmaze:check
  1011. execute @s[score_maze_ele_jump-_min=4,score_maze_ele_jump+=4,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:jump_4_1_b"}
  1012. function linyangqi-parkourmaze:check

  1013.   //}
  1014.   //跌落路径结构{
  1015.   new func ele/fall
  1016. execute @s[score_maze_ele_fall-_min=1,score_maze_ele_fall+=1,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_1_1"}
  1017. function linyangqi-parkourmaze:check
  1018. execute @s[score_maze_ele_fall-_min=1,score_maze_ele_fall+=1,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_1_1_a"}
  1019. function linyangqi-parkourmaze:check
  1020. execute @s[score_maze_ele_fall-_min=1,score_maze_ele_fall+=1,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_1_1_b"}
  1021. function linyangqi-parkourmaze:check
  1022. execute @s[score_maze_ele_fall-_min=1,score_maze_ele_fall+=1,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_1_2"}
  1023. function linyangqi-parkourmaze:check
  1024. execute @s[score_maze_ele_fall-_min=1,score_maze_ele_fall+=1,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_1_2_a"}
  1025. function linyangqi-parkourmaze:check
  1026. execute @s[score_maze_ele_fall-_min=1,score_maze_ele_fall+=1,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_1_2_b"}
  1027. function linyangqi-parkourmaze:check

  1028. execute @s[score_maze_ele_fall-_min=2,score_maze_ele_fall+=2,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_2_1"}
  1029. function linyangqi-parkourmaze:check
  1030. execute @s[score_maze_ele_fall-_min=2,score_maze_ele_fall+=2,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_2_1_a"}
  1031. function linyangqi-parkourmaze:check
  1032. execute @s[score_maze_ele_fall-_min=2,score_maze_ele_fall+=2,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_2_1_b"}
  1033. function linyangqi-parkourmaze:check
  1034. execute @s[score_maze_ele_fall-_min=2,score_maze_ele_fall+=2,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_2_2"}
  1035. function linyangqi-parkourmaze:check
  1036. execute @s[score_maze_ele_fall-_min=2,score_maze_ele_fall+=2,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_2_2_a"}
  1037. function linyangqi-parkourmaze:check
  1038. execute @s[score_maze_ele_fall-_min=2,score_maze_ele_fall+=2,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_2_2_b"}
  1039. function linyangqi-parkourmaze:check
  1040. execute @s[score_maze_ele_fall-_min=2,score_maze_ele_fall+=2,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_2_3"}
  1041. function linyangqi-parkourmaze:check
  1042. execute @s[score_maze_ele_fall-_min=2,score_maze_ele_fall+=2,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_2_3_a"}
  1043. function linyangqi-parkourmaze:check
  1044. execute @s[score_maze_ele_fall-_min=2,score_maze_ele_fall+=2,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_2_3_b"}
  1045. function linyangqi-parkourmaze:check

  1046. execute @s[score_maze_ele_fall-_min=3,score_maze_ele_fall+=3,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_3_1"}
  1047. function linyangqi-parkourmaze:check
  1048. execute @s[score_maze_ele_fall-_min=3,score_maze_ele_fall+=3,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_3_1_a"}
  1049. function linyangqi-parkourmaze:check
  1050. execute @s[score_maze_ele_fall-_min=3,score_maze_ele_fall+=3,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_3_1_b"}
  1051. function linyangqi-parkourmaze:check
  1052. execute @s[score_maze_ele_fall-_min=3,score_maze_ele_fall+=3,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_3_2"}
  1053. function linyangqi-parkourmaze:check
  1054. execute @s[score_maze_ele_fall-_min=3,score_maze_ele_fall+=3,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_3_2_a"}
  1055. function linyangqi-parkourmaze:check
  1056. execute @s[score_maze_ele_fall-_min=3,score_maze_ele_fall+=3,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_3_2_b"}
  1057. function linyangqi-parkourmaze:check

  1058. execute @s[score_maze_ele_fall-_min=4,score_maze_ele_fall+=4,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_4_1"}
  1059. function linyangqi-parkourmaze:check
  1060. execute @s[score_maze_ele_fall-_min=4,score_maze_ele_fall+=4,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_4_1_a"}
  1061. function linyangqi-parkourmaze:check
  1062. execute @s[score_maze_ele_fall-_min=4,score_maze_ele_fall+=4,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_4_1_b"}
  1063. function linyangqi-parkourmaze:check
  1064. execute @s[score_maze_ele_fall-_min=4,score_maze_ele_fall+=4,c=1] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_4_2"}
  1065. function linyangqi-parkourmaze:check
  1066. execute @s[score_maze_ele_fall-_min=4,score_maze_ele_fall+=4,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_4_2_a"}
  1067. function linyangqi-parkourmaze:check
  1068. execute @s[score_maze_ele_fall-_min=4,score_maze_ele_fall+=4,c=1,tag=maze_corner] ~ ~ ~ execute @e[tag=maze_pointsele] ~ ~ ~ blockdata ~ ~ ~ {posX:0,posY:-7,posZ:0,name:"parkourmaze:fall_4_2_b"}
  1069. function linyangqi-parkourmaze:check
  1070.   //}
  1071.   //自定义路径结构{
  1072.   new func ele/custom
  1073.   #自定义结构大类空空如也……
  1074.   //}
  1075. //}
  1076. /*
  1077. new func test
  1078. setblock ~ ~ ~ minecraft:tnt
  1079. say @a[dy=100,dx=55,dz=125]
  1080. */

机器人WBW
本帖最后由 林扬骐 于 2018-2-4 15:01 编辑

(审核后的重新at(:3_ヽ)_)
@ruhuasiyu @pineapple_  @pca006132 @PotatoMaster101 @雷鸣·翾鹗 @乾.坤 @langyo_v3 @龙腾猫跃
(另外原贴也不是很敢编辑了)

BlackCB.
林扬骐 发表于 2018-2-4 15:00
(审核后的重新at(:3_ヽ)_)
@ruhuasiyu @pineapple_  @pca006132 @PotatoMaster101 @雷鸣·翾鹗 @乾.坤 @lan ...

你偶尔诈尸?

1149670hu
顶帖,真是鬼斧神工

机器人WBW
几天没有回应(:3_ヽ)_可能需要多找几个高手
(找了一下却只找到@chyx (“我看到你的魔方了!thread-730676”)

wangduidui
不错不错

萧印
看着真心不错