前言:

       虽然用户@一颗丁子 已经写了一份关于本模组的教程(自定义遗迹生成教程),但是这位用户显然没有预料到一点——那就是1.15.2的遗迹模组与1.12.2的遗迹模组虽然操作区别不大,的可遗迹模板文件的参数代码却有很大的不同,这就导致了这位用户的教程中所有关于模板文件代码的部分在MC1.15.2版本中完全不适用。

       特此另写一个1.15.2遗迹模组的补充教程(与1.12.2相同的部分不再叙述)

       (说实话,在玩过这一模组两天之后、甚至已经成功创造出了一个像样的大型遗迹时,我就已经成功的被这个模组征服了。虽然它不像暮色森林这样的老牌大型模组那样富有趣味,可只要玩家有心,完全可以制作出不亚于暮色森林模组中boss挑战遗迹那样的超大型遗迹建筑,甚至都不需要进行费时费力、占地面积巨大的遗迹建筑搭建!它对于整合包作者、服务器作者们来说绝对是神器级别的工具!可在看到百科上这个模组的热度竟然只有0.5的时候!我的心情是痛心疾首的。正如MCBBS上某大佬的模组介绍帖子,“看到这么好的一个模组被埋没……这个模组的潜力超乎你的想象!”这句话一点也不假。这或许也是因为国内喜欢创新的玩家太少太少的缘故吧……)

       注意,本教程中所有内容都是以MC1.15.2版本为基础的!

       另,百科中遗迹模组介绍正文里面提供的遗迹模板文件下载地址只有1.12.2版本及以下的下载,因此目前能借鉴1.15.2版本的地方除了本教程估计就只有1.15.2版本模组下载时自带的那些1.14.3的模板文件了……因为1.14版本的指令代码与1.15的多少是相似的。


正文:


       1.15.2版本的遗迹模组的文件路径与1.12.2版本的遗迹模组相同,因此不再叙述。不过建议玩之前把模组本身generic文件夹自带的那一堆遗迹模板文件给去掉(那是模组作者在模组对应MC版本1.14.3的时候制作的),否则你的世界可能莫名其妙的多出一大堆奇怪的东西。

       然后,显然1.15.2版本中的遗迹模板(.tml)文件中的内容与1.12.2可以说是大不相同(尤其是对应生成规则那一段的代码),特此进行说明。

       以我制作的一个简单遗迹中的rule参数表为例:

rule1={Name:"minecraft:blue_ice"}

rule2={Name:"minecraft:packed_ice"}

rule3={Name:"minecraft:ice"}

rule4={Ruins:{entity:{Items:[{Slot:1b,id:"minecraft:ice",Count:2b},{Slot:2b,id:"iceandfire:silver_nugget",Count:3b},{Slot:3b,id:"minecraft:packed_ice",Count:2b},{Slot:4b,id:"iceandfire:silver_ingot",Count:1b},{Slot:5b,id:"minecraft:packed_ice",Count:2b},{Slot:6b,id:"iceandfire:silver_nugget",Count:3b},{Slot:7b,id:"minecraft:ice",Count:2b},{Slot:9b,id:"minecraft:ice",Count:2b},{Slot:10b,id:"iceandfire:sapphire_gem",Count:1b},{Slot:11b,id:"minecraft:blue_ice",Count:2b},{Slot:12b,id:"iceandfire:silver_ingot",Count:1b},{Slot:13b,id:"iceandfire:ice_dragon_blood",Count:1b},{Slot:14b,id:"iceandfire:silver_ingot",Count:1b},{Slot:15b,id:"minecraft:blue_ice",Count:2b},{Slot:16b,id:"iceandfire:sapphire_gem",Count:1b},{Slot:17b,id:"minecraft:ice",Count:2b},{Slot:19b,id:"minecraft:ice",Count:2b},{Slot:20b,id:"iceandfire:silver_nugget",Count:3b},{Slot:21b,id:"minecraft:packed_ice",Count:2b},{Slot:22b,id:"iceandfire:silver_ingot",Count:1b},{Slot:23b,id:"minecraft:packed_ice",Count:2b},{Slot:24b,id:"iceandfire:silver_nugget",Count:3b},{Slot:25b,id:"minecraft:ice",Count:2b}]}},Properties:{waterlogged:"false",facing:"east",type:"single"},Name:"minecraft:chest"}

rule5={Name:"iceandfire:dragon_ice_spikes"}

rule6={Ruins:{entity:{conditionMet:0b,auto:0b,CustomName:'{"text":"@"}',powered:0b,Command:"/summon iceandfire:ice_dragon_charge ~ ~1 ~ {direction:[0.0,0.0,0.0]}",SuccessCount:0,TrackOutput:1b,UpdateLastExecution:1b}},Properties:{conditional:"false",facing:"up"},Name:"minecraft:command_block"}

(制作此遗迹时使用到了一些冰火传说模组的方块,命令方块中的ice_dragon_charge是冰火传说中的龙霜弹实体;dragon_ice_spikes是冰火传说中的龙霜刺方块,rule4则是一个装了物品的箱子)

       最终制作出的遗迹效果:(其中的rule6参数被舍弃了,原因是1.15.2中命令方块的RUINSTRIGGER规则笔者还没成功测试出来,这与1.12.2中的RUINSTRIGGER规则添加方法完全不同。)遗迹Ruins1.15.2补充教程-第1张图片

       显然这些代码与1.12.2的教程中介绍的文件完全不一样,最显著的区别就是1.12.2中rule参数是这样的:

rule1=0,100,minecraft:ice(定义生成规则1:以0的优先级与100%的几率在位置上生成一个冰)

       而在1.12.2中,更改方块的生成几率、增加方块随机生成的种类是很容易的,比如说这样:

rule1=0,80,minecraft:ice,minecraft:stone(定义生成规则1:以0的优先级和80%的几率在位置上生成一个冰或者是石头)

       而在1.15.2中,rule参数变成了这样:

rule1={Name:"minecraft:ice"}(定义生成规则1:在位置上生成一个冰块)

       显然,由于原版的指令机制的变动,对应优先级和生成几率的两个值没有了(被原版指令机制的变动吃掉了),所以无法直接更改方块的生成几率了;并且看过了1.12.2版本教程却玩的是1.15.2版本模组的人想要让同一规则随机选取方块生成时,很容易就会把这条参数改成这样:

rule1={Name:"minecraft:ice,minecraft:stone"}

       或者是这样:

rule1={Name:"minecraft:ice","minecraft:stone"}

这两种情况都是笔者亲身经历……

       而如果改成第一种情况的话那么执行生成规则的时候就会尝试执行创建一个名为“minecraft:ice,minecraft:stone”的方块,而显然MC中根本不存在这样的方块,这就会导致rule1参数直接变成无效参数;如果改成情况2的话在执行的时候就会因为Name代码之后的代表定义名称的“”(双引号)出现了多个并且“”之外出现无效字符而导致参数无效,甚至会导致整个遗迹无法生成。

       所以如果想在1.15.2中制作出类似于可以在多个方块中随机选取一种生成的效果,就得这么改:
rule1={Name:"minecraft:ice"},{Name:"minecraft:stone"}(定义生成规则1:在位置上生成一个冰块或者石头)

       而如果想要调整方块的生成几率的话,那就把多种方块中的一种改成空气,比如这样:

rule1={Name:"minecraft:ice"},{Name:"minecraft:air"}(定义生成规则1:在位置上生成一个冰块或者空气)

       空气就是什么都没有,这就做到了方块生成几率只有50%的效果。而想要更改几率,那就可以这么写:

rule1={Name:"minecraft:ice"},{Name:"minecraft:ice"},{Name:"minecraft:ice"},{Name:"minecraft:ice"},{Name:"minecraft:air"}(定义生成规则1:在位置上生成一个冰块或者冰块或者冰块或者冰块或者空气)

       解释看起来头晕目眩不是吗?翻译成人话就是:定义生成规则1:在位置上4/5生成一个冰块,1/5生成一个空气。再进一步翻译就会变成:在位置上以80%几率生成一个冰块。

       或者也可以是这样:

rule1={Name:"minecraft:ice"},{Name:"minecraft:ice"},{Name:"minecraft:ice"},{Name:"minecraft:blue_ice"},{Name:"minecraft:air"}(定义生成规则1:在位置上生成一个冰块或者冰块或者冰块或者蓝冰或者空气)

       翻译过来就是:在位置上3/5生成一个冰块,1/5生成一个蓝冰,1/5生成一个空气。

       这里注意一下,虽然空气就是什么都没有,但不代表生成空气方块的时候就什么都不会生成——没错,定义生成规则是可以定义生成空气方块的,不生成任何方块与生成一个空气方块虽然没什么区别,但是依然是不同的概念——最显著的区别就是,什么都不生成的话在layer生成阵列中那个位置上的数字是0,而定义生成一个空气那么那个位置的数字就是对应生成规则的数字。而空气方块的生成会替换原本处于空气方块所在位置上的方块(比如说水)这就可以做到在类似于水下的环境中在不替换周围环境的情况下制作一个类似于用于补充氧气的遗迹(比如用玻璃围成一个球形或者正方体,然后定义正方体/球体内部生成规则为空气,然后海底就会出现一个内部中空的遗迹,由外壳阻挡海水的话只要内部空间稍大一些就可以通过小范围破坏外壳进入内部中空的遗迹来达到补充氧气的效果。)

       定义生成规则为生成空气的方法:先在你想要生成空气的位置放置一个其它任意类型的方块,如石头,建立遗迹模板后在文件中把对应的 的rule规则后的Name值改成minecraft:air就可以了。

       而另一个则是关于刷怪笼的参数,如下:

rule2={Ruins:{entity:{MaxNearbyEntities:2s,RequiredPlayerRange:64s,SpawnCount:4s,SpawnData:{id:"iceandfire:dread_thrall"},MaxSpawnDelay:30s,Delay:0s,SpawnRange:4s,MinSpawnDelay:10s,SpawnPotentials:[{Entity:{id:"iceandfire:dread_thrall"},Weight:1}]}},Name:"iceandfire:dread_spawner"}

       (这行rule生成参数是对应冰火传说模组的悚域刷怪笼的,这玩意在游戏中除了硬度远高于正常刷怪笼和外观、粒子效果不同之外与普通刷怪笼相同)

       这行参数……其实笔者本身也没有完全掌握,但还是了解了一部分代码的:“MaxNearbyEntities:2s”这行参数中的数字指的是刷怪笼附近生物的最大值(也就是刷怪笼附近如果生物超过这个值那么刷怪笼就不会产生生物);“SpawnRange:4s”是生物的生成范围,这行参数同时也就是上一条范围内生物的最大值的检测范围;“RequiredPlayerRange:64s”则是玩家在多大范围内时会生成生物。而这行代码中所包含的两个“id"iceandfire:dread_thrall"”则是它生成的生物,iceandfire:dread_thrall是生物ID(冰火传说模组中的悚怖尸奴)。

       同时你还可以通过复制Rule代码的方式自己增加更多的Rule生成规则然后在layer生成行中调整,这一用法通常用于需要生成带有不同nbt数据的方块而在游戏中正常的创造模式无法直接调整需要在模板文件中进行代码层面的调整的方块,最典型的就是刷怪笼这类方块,具体用法如下(比较繁琐并且有可能看不懂,这么做需要足够的空间想象能力):

       比如说你想要制作一个带有多种生成不同怪物的刷怪笼的遗迹的话,可以先放置好所有刷怪笼(原版刷怪笼的默认生成生物是猪,并且一旦确定生成的生物后就不可更改了),然后保存遗迹模板,离开游戏进入你刚刚保存的遗迹模板文件中;然后找到对应刷怪笼的rule参数,会发现这里面有两个生物id参数(“SpawnData:{id:<生物id>}”与“SpawnPotentials:[{Entity:{id:<生物id>},Weight:1}]”)。这两个参数中的“<生物id>”决定刷怪笼生成的生物,注意两个生物id必须保持相同,否则会导致所有使用到此生成规则或它之后的(数字大于等于此生成规则)生成规则全部无效(别问我怎么知道的,因为我自己就碰到过……),并且同时复制这个刷怪笼生成规则时两个参数中每一个都必须存在并格式正确,否则后果与两个值所代表的生物不同是一样的。也就是说如果你想改变一个刷怪笼的生成生物,你就得改两个值。而复制然后创造新rule的代码是怎么用的呢?很简单,先调整好你的第一个刷怪笼生成规则(调整好你想要的生物)然后复制它,黏贴在rule参数行的最后(注意rule参数行和layer生成阵列之间必须有一行空行)然后自己修改rule后面的数字,改成之前所使用的rule参数中没出现过的数字就可以了,你甚至可以把这个值改成10000,只要这个数值所代表的rule参数没有已经被使用就可以了,然后再在你复制出的新rule规则里修改刷怪笼所生成的生物id,同样注意两个生物id都得改掉;然后再翻到layer阵列中(注意layer生成阵列的排列方式是y轴由低到高,最前面的一个是y轴比你创建模板文件时模板平台的y轴大1的平面,之后的一个是大2的平面,以此类推……),找到你想要单独改变生成的生物种类的那一个(或者几个)刷怪笼所对应的位置上的数值(便捷一些的寻找方法:你想改变生成生物种类的刷怪笼所在的位置上的数值一定是你所创建的第一个生成刷怪笼的rule参数的数值),然后改成生成你想要生成的生物种类的刷怪笼所对应的rule参数数值就可以了。

       关于命令方块:

       目前没有发现1.15.2版本中的命令RUINSTRIGGER规则如何使用。

       注意:由testruin指令生成的遗迹生成时是以调用指令的玩家所在的位置为基点的,具体生成位置为:【x=<玩家的x坐标>,y=<玩家的y坐标+embed_into_distance值+random_height_offset设定范围内的随机值>,z=<玩家的z坐标>】,也就是说如果你设定了一个埋深为30,随机埋深为-5~5的地牢遗迹,那么这个遗迹被指令调用生成时就会生成在你所在的位置的下方25~35格的位置(所以站在地面上用指令生成地下遗迹就得开旁观模式穿墙去地下找生成出的结构。)


附加内容:

       如果你发现你设定的生成规则出了问题,且暂时无法发现问题出在什么地方,想要把这个生成规则用另一个替换,其实这很简单:只要在layer水平生成阵列中找到这一规则对应的数字然后改成其他的数字就行了。比如我自己制作的那个简单遗迹,对应命令方块的生成规则(rule6)出了问题,我想把这个规则用另一个(rule1)替换掉,那么就可以这样:

       首先找到rule6生成规则所在的layer:

layer

0,0,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0,0

0,0,0,0,6,0,0,0,0

0,0,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0,0

endlayer

       然后把这其中对应rule6的数字(6)改成对应rule1的数字(1)就行了

layer

0,0,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0,0

0,0,0,0,1,0,0,0,0

0,0,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0,0

endlayer

       通过这个办法,你也可以先造好一个遗迹的模板平台,然后把需要的方块全都摆到模板平台上,保存遗迹模板,然后直接出游戏去在.tml文件里面进行遗迹建筑,这对于一些包含大量浮空方块的遗迹就很方便了。不过如果你打算这么干的话就需要自行复制layer阵列了,注意一下复制的时候头上和尾巴上的layer和endlayer也要带上;并且根据需要更改遗迹的长宽高参数值。

       比如说这一遗迹的长宽高参数

dimensions=9,9,9

       其中三个数值中的第一个是对应高的数值;第二个在layer阵列中对应的是行数,即有多少横行;第三个是列数,即每横行中有多少个数字。


       未完待续……