[15w43c|TML|乾坤]LootTable在新版本的一些改动及具体运用详解

声明:本帖与MCBBS帖子:http://www.mcbbs.net/thread-516745-1-1.html系同一作者,本人MCBBS账号为乾.坤,请勿混淆。
正文:大家好,我是The Minecraft Lover小组的乾坤,LootTable在43c又有了一些改进,我就来概述一下新的内容以及关于它的具体运用。



楼主 乾坤轩辕1  发布于 2015-10-28 20:02:00 +0800 CST  
二楼自占+宣传http://tieba.baidu.com/p/4081779533

楼主 乾坤轩辕1  发布于 2015-10-28 20:02:00 +0800 CST  
首先比较重要的一点是:LootTable现在可通过在存档中增加文件来代替之前修改.jar的做法:



(中文Minecraft Wiki,另外说一句,这次中文的Wiki跟进速度比以往快很多,感谢各位翻译者做出的努力)
举个例子:



在上面的路径中,大家可以看到,这些文件都位于地图文件(Test for Loot Table)\data\loot_tables\test 文件夹内,那这些文件就可以在游戏中被读取了:



/summon Zombie ~ ~ ~ {DeathLootTable:test:test1}

/blockdata ~ ~1 ~ {LootTable:test:test2}
读取的方式详见上面的Wiki截图,还有一点:
命名空间名字可以为minecraft或者是自定义的名字。如果该文件夹的名字为minecraft,minecraft就会用里面的文件来取代.jar的loot_tables里的特定可抢夺物品表(存档/data/loot_tables/minecraft路径等于.jar里的assets/minecraft/loot_tables/,同路径和名字的可抢夺物品表会取代.jar里相对的文件)比如存档里的data/loot_tables/minecraft/entities/zombie.json就会被认作预设的僵尸可抢夺物品表,地图中所有僵尸都会根据该表掉落。而存档里的data/loot_tables/除minecraft以外的命名空间/zombie.json或者是data/loot_tables/minecraft/zombie.json也不会替换掉预设的可抢夺物品表,而是需要用NBT标签来指定实体使用此自定义的可抢夺物品表。
------中文Minecraft Wiki
可见,也可通过修改存档文件达到覆盖.jar掉落表的目的,本文不再赘述。

楼主 乾坤轩辕1  发布于 2015-10-28 20:33:00 +0800 CST  
另外还有一些需要引起注意的地方:



这里重点讲一下set_damage(这个中文Wiki还未更新):


其实这个选项也是一个懒人选项,同样提供两种选择,一种是固定数值,一种是范围数值,这个选项用于设定工具的耐久值,值得一提的是,耐久值在此标签内以百分值计算,方便了懒人,1.0代表满耐久,0.0代表无耐久,min和max均为其耐久值的剩余百分比。
还有一点:


functions: 决定了对这个物品进行的特殊举动。如果没有被设置,它将不会被使用。必须顺序排放,比如looting_enchant必须放在set_count之后以正常运作。
-----中文Minecraft Wiki
而这个顺序就是排列表上的功能顺序,可参考SYL的LootTables翻译和实例讲解(http://www.mcbbs.net/thread-515099-1-3.html)及Wiki,这里有个错误例子(当时还没更新43c时我编写的):


{
"pools": [
{
"rolls": 3,
"entries": [
{
"type":"item",
"name": "minecraft:iron_ingot",
"weight": 5,
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 3
}
},
{
"function": "looting_enchant",
"count": {
"min": 1,
"max": 3
}
}
]
},
{
"type":"item",
"name": "minecraft:diamond_sword",
"weight": 1,
"conditions":
[
{
"condition": "killed_by_player"
}
],:
"functions": [
{
"function": "set_count",
"count": {
"min": 0,
"max": 1
}
},
{
"function":"enchant_with_levels",
"levels":{
"min":15,
"max":30
},
"conditions":[
{
"condition":"random_chance_with_looting",
"chance":0.02,
"looting_multiplier":0.02
}
]
}
]
}
]
}
]
}




而这里就没有按照顺序编写,导致此function失效(注意,格式编写错误会导致全部失效,而function顺序错误仅导致此function失效)
还有一个细节补充一下,大部分条件不适用于箱子调用Loot Table,比如killed_by_player,大多数标签无法使用的原因都是因为不存在玩家(生物)攻击箱子这一行为。

楼主 乾坤轩辕1  发布于 2015-10-28 20:36:00 +0800 CST  
就此,一些新版本的特性应该也讲的差不多了,现在来看看如何动手DIY这个神奇的玩意
我先来抛砖引玉:(下面是两段Loot Table代码,大家可以自己玩玩看)
仅适合实体的Loot Table:
{"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}]}]}]}






适合箱子的代码(也适用于实体):
{"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}]}]}



模拟出了一种自然生成的感觉(虽然比自然生成的好一些233)


具体内容我就不多说了,这两组代码也算是做了一个如何自定义的范例吧。

楼主 乾坤轩辕1  发布于 2015-10-28 20:39:00 +0800 CST  
接下来说说如何给Loot Table添加额外的启动条件:
实体类(玩家杀死实体以后要满足某个与杀和被杀双方无关的Scoreboard的值是否满足条件,不满足就不掉指定物品)
思路:给要被杀死的怪物一个自定义掉落物----探测是否存在这种掉落物----如果存在,即探测分数是否满足条件---若符合条件,则entitydata原掉落物品为想要玩家获得的掉落物(若不符合,则不执行)----杀死原标记掉落物---结束系统

至于箱子也有类似之处,大家可以自己想一想,我就不多说了,接下来做个总结:
Loot Table 作为可被调用的游戏文件,大大简化了地图作者的工作量,而且带来了很多新的看点,例如可以做像雪屋一样的天然建筑(Loot Table和CB配合),当然,Loot Table用途肯定不止于此,我还有很多相关内容没有研究,总之,Loot table前途一片光明,让我们继续期待Mojang的新特性(bug)吧!

楼主 乾坤轩辕1  发布于 2015-10-28 20:39:00 +0800 CST  
召唤好友:@sys75480@1041159637@pca006132@孙子兵法04@正正正正正好

楼主 乾坤轩辕1  发布于 2015-10-28 20:41:00 +0800 CST  
(其实你会发现mcbbs版的内容多了一个英文Wiki的截图,那个是因为今天百度抽风,百度相册,pc本地,微博相册,bbs图片都不能正常上传,你会发现中间少了几楼,我间隔很久才发也是因为这个,只有手机版的一部分照片可以,而那张英文wiki的死活不行,所以就算了←_←)

楼主 乾坤轩辕1  发布于 2015-10-28 20:43:00 +0800 CST  
申请精品Orz@duoduo_123dong@堕落o的风@jadeleiching2@逆流彡时光@太2天才

楼主 乾坤轩辕1  发布于 2015-10-28 20:54:00 +0800 CST  

楼主:乾坤轩辕1

字数:5692

发表时间:2015-10-29 04:02:00 +0800 CST

更新时间:2016-03-15 11:38:02 +0800 CST

评论数:170条评论

帖子来源:百度贴吧  访问原帖

 

热门帖子

随机列表

大家在看