本帖最后由 乾.坤 于 2015-11-12 21:57 编辑

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




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



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


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

虽然电路不大,甚至很小,但从图中可以看出,没有一个红石元件,全部是CB链组成的,这个的原理可以参考pca的纯CB逻辑,能够大大简化逻辑门和计分板,所以本地图也没有一个计分板,包括Tag,说了那么多,先来看看命令(右边是主逻辑串,左边是被调用的CB链):
右:
  1. /blockdata ~ ~ ~ {auto:0b}
  2. /blockdata -9996 4 -9997 {auto:1b}
  3. /blockdata -9996 4 -9998 {auto:0b}
  4. /testfor @e[type=ArmorStand,name=SP]
  5. /blockdata -9996 4 -9997 {auto:0b}
  6. /blockdata -9996 4 -9998 {auto:1b}
  7. /execute @e[type=ArmorStand,name=SP] ~ ~ ~ /testfor @e[type=ArmorStand,name=Build,r=200]
  8. /blockdata -9996 4 -9998 {auto:0b}
  9. /execute @e[type=ArmorStand,name=SP] ~ ~ ~ /spreadplayers ~ ~ 1 300 false @e[type=ArmorStand,name=SP]
  10. /summon ArmorStand ~2 ~ ~2 {CustomName:SP}
  11. /blockdata -10000 4 -9988 {auto:1b}
  12. /blockdata -9996 4 -9988 {auto:1b}
复制代码

左(被调用):

  1. /blockdata ~ ~ ~ {auto:0b}
  2. /execute @e[type=ArmorStand,name=SP] ~ ~ ~ /clone -10014 3 -10013 -10020 13 -10020 ~ ~ ~ replace force
  3. /execute @e[type=ArmorStand,name=SP] ~ ~ ~ /summon Zombie ~3 ~2 ~4 {DeathLootTable:test:test1}
  4. /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的代码:
箱子:
  1. {"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}]}]}
复制代码

僵尸:

  1. {"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