本帖最后由 贰逼 于 2016-8-21 18:17 编辑

Loottable(可抢夺物品列表)是1.9+中的一个新特性,主要靠调用外置json文件实现对物品奖励获取的随机.
第三章内将会向各位介绍Loottable中的技术性提示

Chm版本:http://pan.baidu.com/s/1c1U4804 (若.chm遇到问题下载压缩文件)
全部章节总索引





标准Json
Loottable使用的是标准json(1.9后json都是标准json)
所谓标准json,其实就是规范使用json:
对象使用引号:例如"functions" "type" "condition"
整型、浮点不得混为字符串:例如1.0不能写成"1.0"
字符串使用引号:例如"minecraft:stone"
字符串中转义等.

如果loottable不能成功调用,多半是因为没有使用标准json.

UTF-8编码
如果你在Loottable中使用了中文,却在游戏中调用出现了显示?????的情况,是因为minecraft使用UTF-8编码,请将中文转为unicode并替换.
(或者使用代码编辑器是保存文件时,选择UTF-8编码)

事实上所有特殊字符特殊语言,如果没有使用UTF-8编码,也许在minecraft都会出现上述情况(例如模组汉化等)


§样式代码
如果你想问能否使用样式代码,答案是当然的.
样式代码只是隐蔽了游戏内直接使用,但事实上loottable作为外部调用,和插件模组等一样是支持样式代码的.

由于UTF-8编码,需要把样式代码转为unicode再填写.

原版中的Loottable
下面的Loottable你可以直接调用(命名空间为minecraft:子文件夹/文件)

子文件夹:(转自Wiki,已全部翻译)
┗chests - 资源箱子里的物品。
  ┗abandoned_mineshaft - 废弃矿井中找到的运输矿车。
  ┗desert_pyramid - 沙漠神殿的宝藏室里的箱子。
  ┗end_city_treasure - 末地城里的箱子。
  ┗igloo_chest - 雪屋地下室里的箱子。
  ┗jungle_temple - 丛林神庙里的箱子。
  ┗nether_bridge - 下界要塞里的箱子。
  ┗simple_dungeon - 地牢里的箱子。
  ┗spawn_bonus_chest - 如果打开奖励箱选项的话,新世界生成时的奖励箱。
  ┗stronghold_corridor - 要塞台阶祭坛里的箱子。
  ┗stronghold_crossing - 要塞储存室里的箱子。
  ┗stronghold_library - 要塞图书馆里的箱子。
  ┗village_blacksmith - 村庄中的铁匠铺里的箱子。

┗entities - 实体掉落的物品。应用在箱子上会出现漏洞,可能导致部分堆叠为0。
  ┗sheep - 有色绵羊
    ┗black - 黑色
    ┗blue - 蓝色
    ┗brown - 棕色
    ┗cyan - 青色
    ┗gray - 深灰色
    ┗green - 绿色
    ┗light_blue - 浅蓝色
    ┗lime - 亮绿色
    ┗magenta - 品红
    ┗orange - 橙色
    ┗pink - 粉色
    ┗purple - 紫色
    ┗red - 红色
    ┗silver - 银色
    ┗white - 白色
    ┗yellow - 黄色
  ┗bat - 蝙蝠
  ┗blaze - 烈焰人
  ┗cave_spider - 洞穴蜘蛛
  ┗chicken - 鸡
  ┗cow - 牛
  ┗creeper - 苦力怕
  ┗elder_guardian - 远古守卫者
  ┗enderman - 末影人
  ┗endermite - 末影螨
  ┗ghast - 恶魂
  ┗giant - 巨人僵尸
  ┗guardian - 守卫者
  ┗horse - 马
  ┗magma_cube - 岩浆怪
  ┗mushroom_cow - 蘑菇牛
  ┗ocelot - 豹猫
  ┗pig - 猪
  ┗rabbit - 兔
  ┗sheep - 没毛的羊
  ┗shulker - 潜匿之贝
  ┗silverfish - 蠹虫
  ┗skeleton - 骷髅射手
  ┗skeleton_horse - 骷髅马
  ┗slime - 史莱姆
  ┗snowman - 雪傀儡
  ┗spider - 蜘蛛
  ┗squid - 墨鱼
  ┗wolf - 狼
  ┗zombie - 僵尸
  ┗zombie_horse - 僵尸马
  ┗zombie_pigman - 僵尸猪人

┗gameplay - 游戏机制
  ┗fishing - 钓鱼
    ┗fish.json - 鱼类
    ┗junk.json - 垃圾
    ┗treasure.json - 宝藏
  ┗fishing.json - 读取“fishing”文件夹里的一个json,通过幸运决定

┗empty - 不包含任何物品



检验与格式化
当你手写一个Loottable如果不确定是否符合json格式,你可以去检验与格式化:http://www.bejson.com/
格式化能让文件结构更清晰,当然需要注意此处格式化会重新把Unicode转成原字符,请特别备份.


游戏内指令方块的操作
指令方块是支持自动化调用的,具体操作可以融入逻辑中,在这里说一下指令方块操作和loottable更新机制影响:
  • 更新

如果你要使一个箱子被玩家打开出现不是特定的物品,那么你在对该容器操作前千万不要打开该容器,如果一旦loottable容器被打开,里面的loottable标签去除,转成了物品标签,此时更新也没有用.
实体中更新loottable是有效的.

  • 随机

结合一个loottable
可以检测实体掉落物,制作一个随机器.(该随机器只能通过枚举,较复杂,暂不演示)

  • 复制
clone指令可以clone一个没有打开的容器,clone后的容器依然保留loottable标签,可以放心调用.

  • 检测
如果一个已经打开的容器检测loottable标签,是不会检测成功的.

而实体可以.[groupid=546]Command Block Logic[/groupid]