大家好,我是TML的乾坤,这次来参加工机巧艺的作品是:模拟自然生成球类建筑 是一个概念性的原型机,又因为是快照版本,还有电路用到了区块价值的一些东西,导致BUG更多,这次主要是分享一下我的脑洞XD
话不多说,首先说是要生成建筑对吧,那先来看看(我都看不下去,建筑技能点-250)


长得和毒瘤差不多。。。
内部(有一只自定义掉落随机物品的僵尸,那个箱子内物品也是通过Loot table随机生成的,具体参见我的LootTable教程贴和其他触例如SYL的LootTable的教程):

大家可以看到,图中后面是一堆类似的建筑,就是用电路生成出来的,我为了让效果更加明显,故意调低了间隔距离,这个一会再谈。

(中间那个白色的就是源建筑)
==================================分割线===============================
那我们来看看电路和使用:
电路总览:

虽然电路不大,甚至很小,但从图中可以看出,没有一个红石元件,全部是CB链组成的,这个的原理可以参考pca的纯CB逻辑,能够大大简化逻辑门和计分板,所以本地图也没有一个计分板,包括Tag,说了那么多,先来看看命令(右边是主逻辑串,左边是被调用的CB链):
右:
- /blockdata ~ ~ ~ {auto:0b}
- /blockdata -9996 4 -9997 {auto:1b}
- /blockdata -9996 4 -9998 {auto:0b}
- /testfor @e[type=ArmorStand,name=SP]
- /blockdata -9996 4 -9997 {auto:0b}
- /blockdata -9996 4 -9998 {auto:1b}
- /execute @e[type=ArmorStand,name=SP] ~ ~ ~ /testfor @e[type=ArmorStand,name=Build,r=200]
- /blockdata -9996 4 -9998 {auto:0b}
- /execute @e[type=ArmorStand,name=SP] ~ ~ ~ /spreadplayers ~ ~ 1 300 false @e[type=ArmorStand,name=SP]
- /summon ArmorStand ~2 ~ ~2 {CustomName:SP}
- /blockdata -10000 4 -9988 {auto:1b}
- /blockdata -9996 4 -9988 {auto:1b}
左(被调用):
- /blockdata ~ ~ ~ {auto:0b}
- /execute @e[type=ArmorStand,name=SP] ~ ~ ~ /clone -10014 3 -10013 -10020 13 -10020 ~ ~ ~ replace force
- /execute @e[type=ArmorStand,name=SP] ~ ~ ~ /summon Zombie ~3 ~2 ~4 {DeathLootTable:test:test1}
- /execute @e[type=ArmorStand,name=SP] ~ ~ ~ /summon ArmorStand ~ ~ ~ {CustomName:Build}
主逻辑我就不重点提了,无非是逻辑嵌套,这里说一些有意思的东西:
/execute @e[type=ArmorStand,name=SP] ~ ~ ~ /testfor @e[type=ArmorStand,name=Build,r=200]
/execute @e[type=ArmorStand,name=SP] ~ ~ ~ /spreadplayers ~ ~ 1 300 false @e[type=ArmorStand,name=SP]
首先看这两条命令,第一条控制的是两个建筑物之间的最小距离(r=200),而第二条控制的是刷出建筑物的落点随机范围(1-300)这两个命令决定了最终建筑的距离,这个大家可以自己体会一下。
然后是两个Loottable的代码:
箱子:
- {"pools":[{"rolls":{"min":3,"max":5},"entries":[{"type":"item","name":"minecraft:diamond","weight":2,"functions":[{"function":"set_count","count":{"min":1,"max":3}}]},{"type":"item","name":"minecraft:cookie","weight":5},{"type":"item","name":"minecraft:enchanted_book","weight":2,"functions":[{"function":"set_nbt","tag":"{StoredEnchantments:[{lvl:3s,id:35s}]}"}]},{"type":"item","name":"minecraft:iron_pickaxe","weight":3,"functions":[{"function":"enchant_with_levels","treasure":false,"levels":{"min":10,"max":30}},{"function":"set_damage","damage":{"min":0,"max":1}}]},{"type":"item","name":"minecraft:iron_ingot","weight":6}]}]}
僵尸:
- {"pools":[{"rolls":{"min":3,"max":3},"entries":[{"type":"item","name":"minecraft:iron_ingot","weight":5,"functions":[{"function":"looting_enchant","count":{"min":1,"max":3}},{"function":"set_count","count":{"min":0,"max":2}}]},{"type":"item","name":"minecraft:diamond_sword","weight":1,"functions":[{"function":"enchant_with_levels","treasure":false,"levels":{"min":20,"max":30},"conditions":[{"condition":"random_chance_with_looting","chance":0.05,"looting_multiplier":0.03}]},{"function":"set_count","count":{"min":1,"max":1}},{"function":"set_damage","damage":{"min":0,"max":0.25}}],"conditions":[{"condition":"killed_by_player","inverse":false}]}]}]}
总而言之就是做到了每个建筑都不相同,符合MC自然生成的规律
还有最后一个CB是用来控制循环的,要想停止刷出,就将这个cb的need redstone开启即可.

=============================分割线================================
好了,作品主要已经交代完了,接下来说几句题外话,其实这个原型机拓展空间很大,例如可以加入探测生物群系生成等,这样可以做到很接近那些原版自然建筑(如雪屋只在雪原生成,这个可通过STATS指令比对方块做到,但可能有简便的做法),这个SYL,PCA他们告诉我国外有个叫GameMode4的原版地图,似乎是有这些功能,应该非常强大,大家可以去了解一下(我没去看,要翻墙)
好了就这些吧,谢谢大家的浏览!下载链接:http://pan.baidu.com/s/1nt2DEyP @kongbaiyo @lzs1234 @pca006132 @握地师兄 @34105401 @MsYqgzt @ouqianwei @zhjjhz @PotatoMaster101 @宇来自RR网 @ghyzhi10086
============================分割线===============
来自群组:The Minecraft Lover
