本篇教程由作者设定使用 CC BY-NC 协议。

前言:

Ruins在CurseForge上的下载量最近突破了1000万,可见它在外国使用量很大,功能也受到大部分人的认同。

- 我对于这个模组的态度,与MCBBS中教程贴的编写者的态度相同“看到这么好的一个MOD被埋没……这个MOD的潜力大到你想不到!”。

- 其实我更愿意称这个模组为 结构生成系统(Structure Spawning System),遗迹这个名字会让人对本模组产生一些刻板印象,实际上不只是遗迹,你可以用它生成你想生成的任何结构 “自定义副本、BOSS、宝箱、自定义交易的村民、随机NPC、带自定义LORE的RPG武器、自定义内容的宝箱、自定义刷怪笼、随机组合的巨大地牢、边打边生成的副本、带传送、召唤、可以执行自定义指令的遗迹!”等

- 为了让更多整合包、服务器作者享受到这个模组带来的功能,一篇教程肯定是有必要的,这里我为了不与MCBBS上的教程冲突,采用举例演示教学法。

- 最后,假如有说错的地方请大家指正。

本教程基于本模组1.12.2的Ruins mod version 17.2版本(1.12.2的最新版)编写,其他版本操作区别应不会太大



正文:


首先,让我们看看本模组的几个主要文件的路径地址:

主目录名\config\ruins_config 此为遗迹模板的储存文件夹,在安装模组启动一次游戏后,本目录下会生成 你的存档/服务器里存在的所有生物群系名对应的文件夹 templateparser文件夹generic文件夹,这些文件夹的功能之后会介绍 几个txt文件,基本就是模组作者的一些说明

主目录名\config\ruins.txt 此为模组的全局设置文件,你可以在这里调整遗迹生成的全局设置,如生成几率等

主目录名\saves\存档名\ruins.txt(服务端在每个世界文件夹中)此为每个世界(维度)的单独设置,覆盖上面提到的全局设置,每个世界(维度)文件夹下都会生成

主目录名\saves\存档名\RuinsPositionsFile.txt 此为该世界(维度)的遗迹生成记录(坐标、遗迹名等信息),除了有log的作用之外,还可以供本模组识别哪里有遗迹(已经被这个文件记录的坐标不会再生成遗迹)


让我们再看看一个模板文件(XX.tml)中的重要参数内容(省略部分原版英文注释)( #-后的内容为我自己添加的说明)(暂时看不懂也没有关系,后文会有说明)



# Created by Ruins mod version 17.2 Ingame Parser #-创建模板所用的模组版本

# authoring Player: YK_DZ #-创建本模板的玩家名(浪漫的作者)

requiredMods= #-本模板生成需要的模组id,多个以 , 分割,若你的模板内有模组方块,你可以自行添加模组id,默认为空,不添加也可以使用,未安装对应模组却使用模组模板会导致生成报错

weight=1 #-本模板的生成权重

dimensionsToSpawnIn= #-本模板可以生成的维度id,多个以 , 分割,留空则为全部,本参数覆盖generic文件夹的功能(后文说明)

biomesToSpawnIn= #-本模板可以生成的生物群系名,多个以 , 分割,留空则为全部,generic文件夹内的模板应将此项留空(你也可以把模板放进对应的群系文件夹来控制它的生成)

biomeTypesToSpawnIn= #-generic文件夹内的模板应将此项留空,功能未确定

biomesToNotSpawnIn= #-本模板不可以生成的生物群系名,多个以 , 分割,留空则不判断,generic文件夹内的模板应将此项留空,若 biomeTypesToSpawnIn 项留空则此项也应留空


embed_into_distance=0 #-本模板生成时埋入地下的深度,填入负数则为浮空高度(飞艇等结构)

random_height_offset=0,0 #-本模板生成时随机埋入地下的深度(最小值,最大值),填入负数则为悬空高度(飞艇等结构)

acceptable_target_blocks= #-本模板可以以哪些方块为底座生成,多个以 , 分割,留空则为全部

unacceptable_target_blocks=flowing_water,water,flowing_lava,lava #-本模板不可以以那些方块为底座生成,多个以 , 分割,留空则不判断,优先级高于上面的acceptable_target_blocks

dimensions=4,4,4 #-本模板结构的长宽高(没有需要不要修改)

allowable_overhang=0 #-本模板选定的生成表面不够大时允许悬挂的距离,推荐不要设置为0,1-5基本不影响观感

max_leveling=2 #-允许本模板选定的生成表面的最大起伏

leveling_buffer=0 #-本模板生成时清除周围多远的方块

preventRotation=0 #-避免随机朝向(设为0则模板会以随机朝向生成,1为模板设置是什么朝向就是什么朝向)

preserve_water=0 #-避免本模板结构中的空气替换生成位置的水(船/海底结构应设为2)(1为替换,2为不替换)

preserve_lava=0 #-避免本模板结构中的空气替换生成位置的岩浆(1为替换,2为不替换)

uniqueMinDistance=0 #-本模板独立的的最近生成间距(覆盖ruins.txt中的全局设置)(如设置为200则两个本结构的最近间距为200格)

spawnMinDistance=0 #-功能未明确,作者注释# min/max distances this template can be from world spawn (0 = no limit),only applies to overworld--i.e., dimension 0

spawnMaxDistance=0 #-功能未明确,作者注释# min/max distances this template can be from world spawn (0 = no limit),only applies to overworld--i.e., dimension 0

adjoining_template= #-伴随本模板生成的其他模板,格式为 模型文件位置;距离模型中心X坐标距离;允许的Y坐标浮动值;距离模型中心Z坐标距离;生成机率 具体内容下文介绍,本参数可存在多个


#- 下面的ruleX=为“生成规则”


#- rule1=0,100,minecraft:log-0 的意思是,

#- rule1=生成优先度,生成几率,方块类型-朝向为0

#- 其中的0是优先度,可以设置为0-7,数字越小越优先生成这个方块

#- 100是生成几率,设置为50则会有50%的几率生成这个方块(做出废墟破损效果等)

#- minecraft:log 是方块的名称

#- 可以设置多个方块,用 , 隔开,生成的时候则会随机选择一个方块生成

#- 如果方块名称设置为MobSpawner:Zombie这样的格式,则这个方块为僵尸刷怪笼,支持mod怪(可以用neat查看怪物ID)

#- 容器规则例子:rule1=0,100,IInventory;minecraft:lit_furnace;minecraft:coal#9#1-4

#- 这一个规则的意思是 rule1=生成顺序0,100%几率生成,方块类型是容器;箱子;内容是煤 数量是9 附加值是1 朝向是4 多个物品用+隔开

#- 如minecraft:coal#9#1-4+minecraft:coal#9#1-4则是生成了两份这样的煤

#- 附加值决定物品在容器中所处的位置

#- 容器类型:dispenser发射器;lit_furnace熔炉;chest箱子 其他MOD的容器也支持

#- 容器内的物品支持NBT(比如附魔书或者自定义lore等),后面会讲到


rule1=0,100,minecraft:log-0

rule2=0,100,minecraft:stone-6

rule3=0,100,minecraft:planks-0

rule4=0,100,minecraft:bed-10

rule5=0,100,minecraft:bed-2

rule6=0,100,minecraft:birch_door-7

rule7=0,100,IInventory;minecraft:furnace;minecraft:air#0#0#0+minecraft:coal#1#1#1+minecraft:cooked_porkchop#1#0#2-3

rule8=0,100,minecraft:birch_door-8

rule9=0,100,IInventory;minecraft:chest;minecraft:wooden_sword#{ench:[{lvl:1s,id:70s}],RepairCost:1,display:{Name:"我永远喜欢inui"}}#46#12-3

rule10=0,100,minecraft:birch_door-9

rule11=0,100,minecraft:wooden_slab-8


 #- 下面的数字代表上面的每一个“生成规则”所在的位置,不建议手动修改


layer

1,2,2,1

2,3,3,2

2,3,3,2

1,2,2,1

endlayer


layer

1,3,3,1

6,5,4,3

6,0,7,3

1,3,3,1

endlayer


layer

1,3,3,1

8,0,0,3

10,0,9,3

1,3,3,1

endlayer


layer

3,3,3,3

3,11,11,3

3,11,11,3

3,3,3,3

endlayer



看完了略显无聊的文件内容,接下来让我们通过几个实例来了解这个模组的使用方法:


一:生成一个随处可见的inui民住的火柴盒

首先你需要用某种不会出现这个火柴盒中的方块搭建一个平台(推荐无脑用基岩)

自定义遗迹生成教程-第1张图片

就像这样,接下来在这个平台上搭出火柴盒

自定义遗迹生成教程-第2张图片

箱子中有一把附魔了经验修补的,名为 我永远喜欢inui 的消耗了耐久的木剑,熔炉中则有一个木炭和一块烤好了的猪排。同时我们可以发现地板是高出地面一格的,所以我希望它结构生成时可以埋进地面一格,更美观(看来住过这个房子的人是个DD)。

接下来我们输入指令 /parseruin [你的结构名] ,并左击基岩平台任意一块基岩,这样你的结构模板就被保存到了templateparser文件夹中。你可以用 /testruin [文件路径] 来原地生成一个模板结构,例如 /testruin templateparser/inui的小木屋

自定义遗迹生成教程-第3张图片

让我们打开inui的小木屋.tml这个文件,观察文件内容(推荐使用notepad++打开文件):

rule7=0,100,IInventory;minecraft:furnace;minecraft:air#0#0#0+minecraft:coal#1#1#1+minecraft:cooked_porkchop#1#0#2-3

rule9=0,100,IInventory;minecraft:chest;minecraft:wooden_sword#{ench:[{lvl:1s,id:70s}],RepairCost:1,display:{Name:"我永远喜欢inui"}}#46#12-3

可以看到rule7和9将我们结构中的熔炉和箱子的数据都保存了下来,你可以手动修改这些数据(注意格式)。可以被保存的数据有很多,包括容器内容、牌子字符、阶梯朝向等。

为了让这火柴盒生成时埋到地面下一格,我们将embed_into_distance=0改为1

修改好参数后,我们将本模板文件移入 generic文件夹 中,这一文件夹中的模板会在任何群系/维度生成,而templateparser文件夹中的模板则不会在任何地方生成(仍可被指令调用)

最后再重启游戏,跑跑图,你会发现这个结构开始在世界上生成了。(无法保存床的颜色种类,或许是BUG)

自定义遗迹生成教程-第4张图片自定义遗迹生成教程-第5张图片

经过上面这个小型结构的创建与生成,你应该已经知道了本模组的基本操作方式。下面让我们做一些拓展。


二:埋在地下的破损的地穴怪物遗迹2021/4/2更新)


让我们先分析一下需求:


首先,她需要埋在地下很深,我们可以通过修改embed_into_distance=0这一参数来实现。

接下来,她是“破损的”,这意味着构成她的方块需要生成的不完整,且比较随机,后文会介绍如何实现。

最后,需要有一些刷怪笼、怪物和宝箱随着她一起生成,这样才像个地牢样)


实现步骤:


依旧是先将她原样建造出来

自定义遗迹生成教程-第6张图片

自定义遗迹生成教程-第7张图片

观察内部,我放置了一个红色羊毛,和两个命令方块,以及两个箱子。她们分别代表刷怪笼,随结构而生成的怪物,以及宝箱。

将她使用/parseruin 随便的地牢 这一指令保存下来(使用方法上面讲过了)。

依旧打开 \config\ruins_config\templateparser 找到刚刚保存的遗迹,编辑一下文件。


首先,我们需要让她在生成时埋在地下:

修改 embed_into_distance 参数值为 30 ,再修改 random_height_offset=0,0 到 random_height_offset=-5,5 ,让结构在生成时有随机的高度偏移量。

接着,看到rule参数部分:


rule1=0,100,minecraft:stonebrick-2

rule2=0,100,minecraft:stonebrick-1

rule3=0,100,minecraft:stonebrick-0

可以看到,这是保存建筑方块的三条rule。值为100的参数是这一方块的生成几率,将其修改的更低(如80),这一结构生成时外观就会变成残破的了。

继续看到刚刚那个红色羊毛对应的rule:

rule6=0,100,minecraft:wool-14

刚刚我们用她代替刷怪笼,现在让我们使用模组自带的刷怪笼用参数 MobSpawner:XXX ,用它来替换红色羊毛这一方块类型,像这样 rule6=0,100,MobSpawner:Zombie ,你可以用任何实体ID替换XXX,你可以使用neat在游戏内查看实体ID。像这样写,红色羊毛的位置在生成时就会变成僵尸刷怪笼了。

再来找到命令方块对应的rule:

rule5=0,100,CommandBlock:/summon Zombie 2:@-5

rule7=0,100,CommandBlock:/summon Zombie 2:@-4

可以看到,模组将我刚刚打在命令方块内的命令保存下来了,她的前面还有个参数 CommandBlock: ,拥有这个参数的命令方块会在生成时带上她后面的指令,而假如我们添加一个RUINSTRIGGER规则在她后面,那么这个命令方块在生成时就会执行她对应的指令一次,然后自行消失。我们添加这个规则,像这样 rule5=0,100,CommandBlock:RUINSTRIGGER /summon Zombie 2:@-5 。为了区分命令方块生成的怪物,我们修改一下生成指令,给它带个帽子、加个名字,像这样 /summon minecraft:zombie ~ ~1 ~ {CustomName:"inui",CustomNameVisible:1b,CanPickUpLoot:1b,HandItems:[{id:"minecraft:iron_sword",Count:1b,Damage:0s,tag:{ench:[{id:32,lvl:1}]}},{}],ArmorItems:[{},{},{},{id:"minecraft:leather_helmet",Count:1b,Damage:0s,tag:{Unbreakable:1,display:{color:2349482}}}]} (好吧这指令是有点长,不用在意,用百科的命令生成器做的)这样就可以生成出特别的怪物了。

最后看到箱子对应的rule:

rule4=0,100,ChestGenHook:chests/simple_dungeon:5-5

rule8=0,100,ChestGenHook:chests/simple_dungeon:5-4

它也有一个独特的参数 ChestGenHook: ,这是模组提供的战利品(Loot)参数,当你保存了一个空箱子时,模组会自动将这个箱子作为战利品箱,调用这个参数。 chests/simple_dungeon 对应的是原版的地牢战利品表,模组可以调用全部原版战利品表。具体编辑原版战利品表的方式不多介绍,你可以使用LootTweaker模组进行编辑,这里则是原版战利品表的相关信息。最后的 5-5 参数对应箱子里会生成多少个战利品,写 5-8 则生成5-8个。


修改完这些参数后,我们保存文件,将她移入 generic文件夹 中,重启游戏,跑跑图(地下),你会发现地牢已经开始生成了。

自定义遗迹生成教程-第8张图片自定义遗迹生成教程-第9张图片

经过这个地牢的生成,你应该已经懂得了刷怪笼参数命令方块参数的使用和战利品表的调用。

下面让我们开始接触 组合遗迹 吧。


三:一座层层下移的倒三角战斗塔

#施工中#


四:废弃的带城墙城堡遗迹

#施工中#


2021/3/6:我永远喜欢inuitoko

2021/4/2:这次写的字更多了,会不会看的有点烦呢,还有我永远喜欢inui