19游戏网 > 游戏攻略>正文

我的世界1.12新成就系统JSON格式详解

来源:19游戏网编辑:网络转载更新时间:2017-04-06

  我的世界1.12新成就系统JSON格式详解。那下面给大家分享的则是关于我的世界1.12快照版17w13a新成就系统的JSON格式的介绍哦~那 有感兴趣的玩家不妨进来看看下面的介绍吧!希望对大家有所帮助。

  游戏园我的世界官方群:325049520  256070479 欢迎各路喜爱我的世界的小伙伴们加入讨论!

  玩服务器的小伙伴们可以加入:141931866 群一起联机玩游戏哦!

  如果你是腐竹的话可以给我们投稿你的服务器哦~投稿地址点我进入

  如果你有心仪的作品或者心得分享的话,欢迎来游戏园投稿,大家可以点击>>>投稿<<<进行投稿哦~ 有奖品哦~

》》》答题祝福赢我的世界中国版邀请码《《《

  简介

  1.12开始,成就(achievement,现在改叫advancement)已经从代码中分离出来,成为独立的json文件了。这让地图作者,modder和服主可以按照他们的喜好修改和添加advancement。

  advancement有众多的选项,可以使用从玩家的物品栏到所在的生物群系的触发器。还可以设置达成后的奖励,例如解锁配方,获得物品或者经验。一个新指令/advancement也被加入来配合这些文件。

  advancement使用json格式 http://json.org/ 在外部文件里保存advancement的信息。

  JSON结构

  以下是advancement文件里的所有可能键值(key)

  JSON

  {

  "criteria": {

  "custom_trigger_name": {

  "trigger": "namespace:trigger_name",

  "conditions": {

  "slots": {

  "occupied": 1,

  "occupied": {"min":1,"max":1},

  "full": 1,

  "full": {"min":1,"max":1},

  "empty": 1,

  "empty": {"min":1,"max":1}

  },

  "items": [

  {

  "item": "minecraft:stone",

  "count": 1,

  "count": {"min":1,"max":1},

  "data": 1,

  "data": {"min":1,"max":1},

  "potion": "minecraft:invisibility",

  "enchantments": [

  {

  "enchantment": "minecraft:sharpness",

  "levels": 1,

  "levels": {"min":1,"max":1}

  }

  ]

  }

  ],

  "item": {

  "item": "minecraft:stone",

  "count": 1,

  "count": {"min":1,"max":1},

  "data": 1,

  "data": {"min":1,"max":1},

  "potion": "minecraft:invisibility",

  "enchantments": [

  {

  "enchantment": "minecraft:sharpness",

  "levels": 1,

  "levels": {"min":1,"max":1}

  }

  ]

  },

  "levels": 1,

  "levels": {"min":1,"max":1},

  "recipe": "minecraft:chest",

  "position": {

  "x": 1,

  "x": {"min":1,"max":1},

  "y": 1,

  "y": {"min":1,"max":1},

  "z": 1,

  "z": {"min":1,"max":1}

  },

  "biome": "minecraft:void",

  "block": "minecraft:stone",

  "state": {

  "state_name": "state_value"

  },

  "entity": {

  "type": "minecraft:creeper"

  },

  "distance": 1,

  "distance": {"min":1,"max":1},

  "parents": [

  {

  "type": "minecraft:creeper"

  }

  ],

  "child": {

  "type": "minecraft:creeper"

  },

  "potion": "minecraft:invisibility",

  "level": 1,

  "level": {"min":1,"max":1}

  }

  }

  },

  "requirements": [["generic_trigger_name"]],

  "parent": "namespace:path/to/parent_advancement",

  "display": {

  "icon": "minecraft:stone_pickaxe",

  "title": "Display title",

  "frame": "task",

  "background": "minecraft:path/to/texture.png"

  },

  "rewards": {

  "recipes": ["namespace:path/to/recipe"],

  "loot": ["namespace:path/to/loot_table"],

  "experience": 1

  }

  }

  常见的类型:range

  advancement大部分的特性都使用了"range"类型,这个类型会将数值(比如物品栏里有的物品数量)和指定的范围作比较。

  指定数字

  若要判断是否为一个制定的数,只需直接让range为那个数。以下是检查被比较的数是否恰好为3.

  "occupied": 3

  指定范围

  若要判断是否介于两个数之间,range就应当为一个包含了"min" 和 "max"这两个数的object。以下是检查被比较的数是否在1和3之间。

  注意: min和max是包含的,min <= X <= max

  "occupied": {

  "min": 1,

  "max": 3

  }

  你也可单独指定上限或者下限,这将忽视对另一个界限的检测。比如这样可以检测是否有至少3个有东西的格子。玩家即使有7个有东西的格子也符合要求。

  "occupied": {

  "min": 3

  }

  相反,这样可以检测是否有至多2个有东西的格子。玩家的物品栏即使有0个有东西的格子也符合要求。

  "occupied": {

  "max": 2

  }

  常见的类型:item object

  一个item object包括了几个数据来和输入的一堆叠(stack)物品作比较。无论在何地使用,item object的一切的选项都可以使用。

  item

  "item"这个字符串指定了一个物品id。这是检查物品是不是红石粉的方法。

  "item_object": {

  "item": "minecraft:redstone"

  }

  data

  "data"这个range指定了物品的损害值/数据值(damage/data value)。这是检查物品是不是平滑的花岗岩(Polished Granite)。

  "item_object": {

  "item": "minecraft:stone",

  "data": 2

  }

  count

  "count"这个range指定了在单独的一个堆叠里的物品个数。这个不能用于检查物品栏中所有物品个数的总和。以下是检查某个堆叠里是否至少有16个物品。

  "item_object": {

  "count": {

  "min": 16

  }

  }

  potion

  "potion"字符串可以检查物品的NBT中是否有它指定的游戏自带药水效果。也就是物品的Potion tag。wiki的这里https://minecraft.gamepedia.com/Potion#Item_data 包含了这些id。

  "item_object": {

  "potion": "minecraft:invisibility"

  }

  物品不一定是药水。只需要有Potion这个NBTtag。比如这个物品也是符合的。

  /give @p minecraft:stone 1 0 {Potion:"minecraft:invisibility"}

  enchantments

  "enchantments"这个list检查物品的附魔。(也就是除了书以外的物品的 ench 标签或者书的StoredEnchantments 标签)如果只指定了一个空object,就是检查玩家的物品栏里是否存在任何一个有附魔的东西。

  "item_object": {

  "enchantments": [

  {

  }

  ]

  }

  enchantments是附魔物件的列表(list of enchantment object)。以下将会介绍enchantment的标签属性:

  enchantment

  "enchantment"字符串指定了要检查的附魔id。这是检查锋利附魔的方法。

  "item_object": {

  "enchantments": [

  {

  "enchantment": "minecraft:sharpness"

  }

  ]

  }

  levels

  "levels"这个range指定了附魔等级的范围。以下是检查玩家是否有三级或以上的附魔物品的方法。

  "item_object": {

  "enchantments": [

  {

  "levels": {

  "min": 3

  }

  }

  ]

  }

  也可以和ID组合,这就是检查有没有锋利5的方法。

  "item_object": {

  "enchantments": [

  {

  "enchantment": "minecraft:sharpness"

  "levels": 5

  }

  ]

  }

  常见的类型:entity object

  一个entity object包含了一些用来和传入的实体比较的数据。只要是使用entity object,以下的选项都可用。

  这一大段现在由于MC-115067 https://bugs.mojang.com/browse/MC-115067 统统用不了。

  type

  "type"字符串指定了要判断是不是它的实体id。比如以下是检查传入的是不是爬行者的方式。

  "entity_object": {

  "type": "minecraft:creeper"

  }

  修改advancements

  Criteria(及子准则)

  一个advancement必须通过"criteria"这个物件(object)来指定一组准则来激活advancement。每个物件要带有一个你起的名字,这将会用于 "requirements" 这个list或者 /advancement 指令。每当玩家符合了任何一个准则,这件事就会被记录。使得玩家可以先后完成这些准则而不必同时完成。

  每一个准则应当包含一个触发器,由"trigger"字符串指定。

  如果没有"requirements" ,默认需要完成所有的规则以获得advancement。

  以下的advancement需要"custom_test_name"和 "take_damage" 这两个准则都成功来获得。(名字可以是任何你喜欢的名字)玩家可以喂养动物,在这之后受伤来完成advancement(或者相反的顺序)。

  鉴于没有"requirements",两个准则必须都满足。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:bred_animals"

  },

  "take_damage": {

  "trigger": "minecraft:player_damaged"

  }

  }

  }

  这些准则的自定义名字只能在这个文件里被使用,而不能在其他的文件里被调用。

  Triggers(准则的属性)

  有些trigger使用更小一些的判据,这些由 "conditions"这个物件(object, 准则物件的属性之一)指定。使用哪些conditions由trigger的种类决定,而且不是所有的trigger都有/必须有conditions。

  以下是所有能用的trigger,和对应的额外数据。

  bred_animals

  brewed_potion

  construct_beacon

  enchanted_item

  enter_block

  impossible

  inventory_changed

  location

  player_damaged

  player_killed_entity

  recipe_unlocked

  summoned_entity

  used_ender_eye

  bred_animals

  喂养动物

  这个触发器在玩家成功喂了两个动物(让它们交配)后触发。比如说,以下是玩家喂了两个在一起的动物。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:bred_animals"

  }

  }

  }

  这个有两个condition:"parents" and "child"

  parents

  "parents"这个list允许你指定一list的entity objects用来和(动物的)父母比对。对每一个list中的object,父母双方都会和它比较,父母中任何一个匹配了都会让这一个object成功。

  对于原版游戏,除了马和驴子以外,能够交配的必定具有同样的实体id。所以在这一里指定多个实体id在大多数时候会使得这个无法达成。

  这个是检查父母中是否至少有一个是牛的方法。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:bred_animals",

  "conditions": {

  "parents": [

  {

  "type": "minecraft:cow"

  }

  ]

  }

  }

  }

  }

  这个是检查父母中是否有一个是牛,另一个是羊的方法。当然在原版你做不到这一点。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:bred_animals",

  "conditions": {

  "parents": [

  {

  "type": "minecraft:cow"

  },

  {

  "type": "minecraft:sheep"

  }

  ]

  }

  }

  }

  }

  child

  "child"这个entity object会和新生的小动物比对。

  这个是检查小动物是不是牛的方法。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:bred_animals",

  "conditions": {

  "child": {

  "type": "minecraft:cow"

  }

  }

  }

  }

  }

  你也可以同时指定父母和孩子。比如说,以下就是检查父母中是否有马和驴,而且孩子还要是骡。(虽然这样使得检查父母的工作没有意义了,因为骡子只能由马和驴杂交来出生)

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:bred_animals",

  "conditions": {

  "parents": [

  {

  "type": "minecraft:horse"

  },

  {

  "type": "minecraft:donkey"

  }

  ],

  "child": {

  "type": "minecraft:mule"

  }

  }

  }

  }

  }

  brewed_potion

  这个触发器在玩家从酿造台输出栏中拿出任何物品时触发。注意:这不意味着玩家必须酿造过这瓶药水。把药水从随着药水一起出现的酿造台里拿出来(比如末地船里的那个)或者把药水放进输出栏再拿出来都能满足这个触发器。

  比如说,这个示例将会在玩家从药水输出栏取出任何物品时激活。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:brewed_potion"

  }

  }

  }

  这只有一个condition:"potion"

  potion

  "potion"字符串可以检查取出的物品的NBT中是否有它指定的游戏自带药水效果。wiki的这里https://minecraft.gamepedia.com/Potion#Item_data 包含了这些id。

  这个示例只会在玩家从酿造台输出栏取出一个长效隐形药水时触发。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:brewed_potion",

  "conditions": {

  "potion": "minecraft:long_invisibility"

  }

  }

  }

  }

  construct_beacon

  这个触发器每当玩家接收到一个来自于信标的药水效果更新触发,而不是在你修建金字塔时。信标不需要有任何的药水效果,但玩家必须在信标生效范围里。信标也不需要放在一个金字塔上!

  比如说,接下来的这个示例将会在玩家离信标足够近时触发,不论信标是否提供效果或者有金字塔在下面。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:construct_beacon"

  }

  }

  }

  这只有一个condition:"level"。

  level

  "level"这个range指定了信标的层数,最高是4。比如说这个检查信标在玩家受到药水更新时是否至少有两层。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:construct_beacon",

  "conditions": {

  "level": {"min": 2}

  }

  }

  }

  }

  而这个是检查在玩家受到信标的药水更新时信标下面是不是没有金字塔(没有金字塔就触发)。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:construct_beacon",

  "conditions": {

  "level": 0

  }

  }

  }

  }

  enchanted_item

  这个触发器在玩家再附魔台附魔物品时触发。玩家不需要把附好魔的物品拿走,因为它是在你选择附什么魔的时候触发的。这个就是检查玩家附魔的示例。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:enchanted_item"

  }

  }

  }

  item

  "item"这个item object用来和附魔的物品对比。注意这个检查是在附魔之前检查的,也就是说你无法用 (item object中的)"enchantments"来检查这次附了什么魔。以下的示例是检查附魔的物品是不是钻石镐。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:enchanted_item",

  "conditions": {

  "item": {

  "item": "minecraft:diamond_pickaxe"

  }

  }

  }

  }

  }

  levels

  "levels"这个range指定了在附魔时消耗的等级。比如说再有15个书架的情况下,第三个附魔选项需要30级但只消耗3级。这个condition(限制条件)检查的是消耗的3级。也就是说你无法知道在附魔之前玩家是不是30的等级,但你可以通过命令方块辅助你检查这一点。

  这个示例将在你消耗3级附魔时触发。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:enchanted_item",

  "conditions": {

  "levels": 3

  }

  }

  }

  }

  enter_block

  这个触发器在你的碰撞箱和一个方块重叠时激活,包括空气。也就是说,下面这个永远是激活的,因为你总在方块里。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:enter_block"

  }

  }

  }

  这有两个condition: "block" 和 "state"。

  block

  "block"这个字符串指定了检查有没有玩家在里面的方块id。比如说,接下来的示例检查玩家是不是在"minecraft:tallgrass"方块里面。也就是草,蕨和两格高草。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:enter_block",

  "conditions": {

  "block": "minecraft:tallgrass"

  }

  }

  }

  }

  state

  "state"这个object包含了一列自定义的键值(Block state, 方块状态)。对于"minecraft:tallgrass",方块状态"type"决定了这个方块是哪种植物。使用这个 condition必须有"block"。接下来这个示例检查方块是不是蕨。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:enter_block",

  "conditions": {

  "block": "minecraft:tallgrass",

  "state": {

  "type": "fern"

  }

  }

  }

  }

  }

  impossible

  这个触发器永远不会激活。在原版中激活它的唯一方法就是使用 /advancement指令。这个极大地补充了命令机制,因为它使得更复杂的要求可以通过命令做到。

  比如,如下的advancement,假设他的文件位于"custom:missions":

  {

  "criteria": {

  "mission1": {

  "trigger": "minecraft:impossible"

  },

  "mission2": {

  "trigger": "minecraft:impossible"

  }

  }

  }

  【此处影射电影《碟中谍》(Mission Impossible)】

  那么就能用以下的指令分别地完成每一个指定的准则,完成整个advancement,但只对于有"winner"的玩家。

  /advancement grant @a[tag=winner] custom:missions mission1

  /advancement grant @a[tag=winner] custom:missions mission2

  这个trigger没有condition。

  inventory_changed

  这个触发器在玩家的物品栏更新时触发,比如增减物品栏里的东西。注意用右键或者左键拖动物品来分散物品将只被当作一次操作。下面这个将会触发任何物品栏里的东西的增减:

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:inventory_changed"

  }

  }

  }

  这个trigger有2个condition:"slots"和"items"。

  slots

  "slots"这个object包含了物品栏的普通信息。可以有三个range:"occupied"、"full"和 "empty"。护甲栏和副手参与检查。

  "occupied"这个range和非空栏位(包括装满的栏位)个数比较

  "full" 这个range和装满的栏位个数比较(比如说一个钻石镐或者64个石头)

  "empty"这个range和空栏位个数比较。

  举个例子,下面这个将会在玩家在物品栏更新时刚好有10个空物品栏的情况下激活。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:inventory_changed",

  "conditions": {

  "slots": {

  "empty": 10

  }

  }

  }

  }

  }

  items

  "items"这个由item object组成的list中的每一项都会在玩家物品栏里寻找和自己对应的格子。每一项都必须找到对应的格子才算达成。下面这个检查玩家是否在物品栏更新时拥有石头和泥土。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:inventory_changed",

  "conditions": {

  "items": [

  {

  "item": "minecraft:stone",

  "data": 0

  },

  {

  "item": "minecraft:dirt"

  }

  ]

  }

  }

  }

  }

  position

  positions物件有"x", "y"和"z" range来检查玩家的位置。

  你不需要检查所有轴的坐标。比如只填写y, 则只检查y坐标的数值,而对x和z坐标没有限制。

  以下这个例子会检查玩家是否在y=62或更低

  {

  "criteria": {

  "below_sea_level": {

  "trigger": "minecraft:location",

  "conditions": {

  "position": {

  "y": {

  "max": 62.0

  }

  }

  }

  }

  }

  }

  biome

  biome字串指定了玩家需要待在的生物群系(biome)。

  biome id列表

  生物群系id(id = 名称),填写时请在前面加上"minecraft:", 如"minecraft:desert_hills":

  "ocean" = "Ocean"

  "plains" = "Plains"

  "desert" = "Desert"

  "extreme_hills" = "Extreme Hills"

  "forest" = "Forest"

  "taiga" = "Taiga"

  "swampland" = "Swampland"

  "river" = "River"

  "hell" = "Hell"

  "sky" = "The End"

  "frozen_ocean" = "FrozenOcean"

  "frozen_river" = "FrozenRiver"

  "ice_flats" = "Ice Plains"

  "ice_mountains" = "Ice Mountains"

  "mushroom_island" = "MushroomIsland"

  "mushroom_island_shore" = "MushroomIslandShore"

  "beaches" = "Beach"

  "desert_hills" = "DesertHills"

  "forest_hills" = "ForestHills"

  "taiga_hills" = "TaigaHills"

  "smaller_extreme_hills" = "Extreme Hills Edge"

  "jungle" = "Jungle"

  "jungle_hills" = "JungleHills"

  "jungle_edge" = "JungleEdge"

  "deep_ocean" = "Deep Ocean"

  "stone_beach" = "Stone Beach"

  "cold_beach" = "Cold Beach"

  "birch_forest" = "Birch Forest"

  "birch_forest_hills" = "Birch Forest Hills"

  "roofed_forest" = "Roofed Forest"

  "taiga_cold" = "Cold Taiga"

  "taiga_cold_hills" = "Cold Taiga Hills"

  "redwood_taiga" = "Mega Taiga"

  "redwood_taiga_hills" = "Mega Taiga Hills"

  "extreme_hills_with_trees" = "Extreme Hills+"

  "savanna" = "Savanna"

  "savanna_rock" = "Savanna Plateau"

  "mesa" = "Mesa"

  "mesa_rock" = "Mesa Plateau F"

  "mesa_clear_rock" = "Mesa Plateau"

  "void" = "The Void"

  "mutated_plains" = "Sunflower Plains" ("plains")

  "mutated_desert" = "Desert M" ("desert")

  "mutated_extreme_hills" = "Extreme Hills M" ("extreme_hills")

  "mutated_forest" = "Flower Forest" ("forest")

  "mutated_taiga" = "Taiga M" ("taiga")

  "mutated_swampland" = "Swampland M" ("swampland")

  "mutated_ice_flats" = "Ice Plains Spikes" ("ice_flats")

  "mutated_jungle" = "Jungle M" ("jungle")

  "mutated_jungle_edge" = "JungleEdge M" ("jungle_edge")

  "mutated_birch_forest" = "Birch Forest M" ("birch_forest")

  "mutated_birch_forest_hills" = "Birch Forest Hills M" ("birch_forest_hills")

  "mutated_roofed_forest" = "Roofed Forest M" ("roofed_forest")

  "mutated_taiga_cold" = "Cold Taiga M" ("taiga_cold")

  "mutated_redwood_taiga" = "Mega Spruce Taiga" ("redwood_taiga")

  "mutated_redwood_taiga_hills" = "Redwood Taiga Hills M" ("redwood_taiga_hills")

  "mutated_extreme_hills_with_trees" = "Extreme Hills+ M" ("extreme_hills_with_trees")

  "mutated_savanna" = "Savanna M" ("savanna")

  "mutated_savanna_rock" = "Savanna Plateau M" ("savanna_rock")

  "mutated_mesa" = "Mesa (Bryce)" ("mesa")

  "mutated_mesa_rock" = "Mesa Plateau F M" ("mesa_rock")

  "mutated_mesa_clear_rock" = "Mesa Plateau M" ("mesa_clear_rock")

  以下两个准则会在玩家到沙漠和平原后被激活。

  {

  "criteria": {

  "visit_desert": {

  "trigger": "minecraft:location",

  "conditions": {

  "biome": "minecraft:desert"

  }

  },

  "visit_plains": {

  "trigger": "minecraft:location",

  "conditions": {

  "biome": "minecraft:plains"

  }

  }

  }

  }

  player_damaged

  当玩家受到任意数值的伤害(包括0), 甚至是阻挡了伤害时会被激活。

  {

  "criteria": {

  "visit_desert": {

  "trigger": "minecraft:player_damaged"

  }

  }

  }

  这触发器有11个conditions: "is_projectile", "is_explosion", "bypasses_armor", "bypasses_invulnerability", "bypasses_magic", "is_fire", "is_magic", "dealt", "taken", "blocked", 和 "source_entity"。能用这些条件筛选玩家受到的伤害(造成伤害的实体,伤害方法等)。

  is_projectile

  这个布尔值(boolean)检查伤害是否来自弹射物(projectile, 检查projectile标签)。弹射物包括: 烈焰人火球 ,末影龙火球,恶魂火球,羊驼的口水,箭(所有),射出的火焰弹,丢出的蛋,丢出的雪球,凋灵之首。

  以下这个例子检查玩家受到伤害不是来自弹射物

  {

  "criteria": {

  "visit_desert": {

  "trigger": "minecraft:player_damaged",

  "conditions": {

  "damage": {

  "is_projectile": false

  }

  }

  }

  }

  }

  is_explosion

  这个布尔值检查伤害是不是因为爆炸受到的(检查explosion标签)。伤害来源包括: 爬行者,TNT,矿车TNT,地狱幽灵火球,床(在地狱睡时会爆炸),凋灵,凋灵之首。

  以下这个例子检查伤害来源是否是爆炸,比如说是否因为TNT爆炸造成伤害。

  {

  "criteria": {

  "visit_desert": {

  "trigger": "minecraft:player_damaged",

  "conditions": {

  "damage": {

  "is_explosion": true,

  "source_entity": {

  "type": "minecraft:tnt"

  }

  }

  }

  }

  }

  }

  bypasses_armor

  这个布尔值检查伤害能否被阻挡(检查unblockable标签)。伤害来源包括: 火焰,窒息(方块及世界边界),实体挤压(范围内太多实体),溺水,饥饿,掉落,撞墙(飞行时),虚空(掉落虚空及/kill命令),重新计算血量(比如超出了上限),魔法伤害,凋零伤害。

  以下这个例子检查伤害是否不能被阻挡,伤害值是掉落虚空造成的伤害的值。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:player_damaged",

  "conditions": {

  "damage": {

  "bypasses_armor": true,

  "dealt": 4.0

  }

  }

  }

  }

  }

  bypasses_invulnerability

  检查伤害是否能伤害无敌的玩家(创造模式)。伤害来源只有虚空伤害(包括掉落虚空及/kill命令)。

  以下例子检查伤害是否不来自虚空或/kill命令。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:player_damaged",

  "conditions": {

  "damage": {

  "bypasses_invulnerability": false

  }

  }

  }

  }

  }

  bypasses_magic

  检查伤害是否绝对(猜测是不能被装备/效果削弱,然而不确定),即检查damageIsAbsolute标签。伤害来源只有饥饿。

  以下这例子检查玩家是否受到饥饿伤害。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:player_damaged",

  "conditions": {

  "damage": {

  "bypasses_magic": true

  }

  }

  }

  }

  }

  is_fire

  检查伤害是否来自火焰(检查fire标签)。伤害来源包括: 站在火焰方块里,整个人着火,在熔岩里,在岩浆块上,恶魂火球,烈焰人火球。

  以下这例子检查伤害是否不来自火焰

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:player_damaged",

  "conditions": {

  "damage": {

  "is_fire": false

  }

  }

  }

  }

  }

  is_magic

  检查伤害是否来自魔法(检查magicDamage标签)。伤害来源包括: 闪电,瞬间伤害,中毒,守卫者的部分射线伤害(部分算作生物伤害mob damage),唤魔者的尖牙攻击,无主的凋灵之首(unowned wither skulls, 透过/summon命令生成的, 因为凋灵发射的凋灵之首算作生物伤害 mob damage)

  以下这例子会检查伤害是否来自"魔法伤害"

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:player_damaged",

  "conditions": {

  "damage": {

  "is_magic": false

  }

  }

  }

  }

  }

  dealt

  这个range检查原始伤害值(在计算装备/效果削减/盾牌阻挡的伤害量前)的量,也就是说和玩家的防护效果及装备对此没影响。

  这例子会检查无主的箭可以对玩家造成的伤害,即使实际伤害被削减了或被盾牌阻挡了也不会改变这个值。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:player_damaged",

  "conditions": {

  "damage": {

  "dealt": {

  "min": 4.0

  },

  "source_entity": {

  "type": "minecraft:arrow"

  }

  }

  }

  }

  }

  }

  taken

  这个range检查实际伤害值,也就是玩家实际受到的伤害(在计算装备/效果削减/盾牌阻挡的伤害量后),故此可以和dealt的数值不同。

  以下这例子会检查玩家是否受到5点或以上的伤害。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:player_damaged",

  "conditions": {

  "damage": {

  "taken": {

  "min": 5.0

  }

  }

  }

  }

  }

  }

  blocked

  这个布尔值检查伤害是否被完全阻挡(bypasses_armor(unblockable)不会是true)。

  以下这个例子检查玩家是否不能阻挡箭的伤害。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:player_damaged",

  "conditions": {

  "damage": {

  "blocked": false,

  "source_entity": {

  "type": "minecraft:arrow"

  }

  }

  }

  }

  }

  }

  source_entity

  这个entity object检查对玩家造成伤害的实体。

  如果是投射物的伤害,则需要视乎该投射物有没有"主人",也就是射出此投射物的实体。如果有,则算作该主人造成的伤害,否则则算作该投射物的伤害。

  如果是中毒这类伤害,则不会被算作是实体造成的伤害(即使是由女巫扔出的药水)。

  以下这个例子检查玩家是否被僵尸伤害。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:player_damaged",

  "conditions": {

  "damage": {

  "source_entity": {

  "type": "minecraft:zombie"

  }

  }

  }

  }

  }

  }

  player_killed_entity

  当玩家击杀别的实体时会被触发(不包括玩家)。

  这个trigger有1个condition: entity。

  entity

  这个entity object会检查被杀死的实体。

  以下这个例子检查玩家是否击杀了一头牛

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:player_killed_entity",

  "conditions": {

  "entity": {

  "type": "minecraft:cow"

  }

  }

  }

  }

  }

  recipe_unlocked

  当玩家解锁指定合成配方(recipe, 不确定官方译名)时会被触发。

  这trigger有一个必须的condition: recipe,指定该合成配方的文件位置。

  注意这只会在收到合成配方时检查。如果玩家在这advancement存在前已经解锁了指定的合成配方,这advancement将不会理会该合成配方(也就是说那玩家无法得到这advancement)。因此你需要删除玩家解锁了的指定合成配方(使用/recipe命令)才能让该玩家能得到此advancement。

  这例子会检查玩家是否解锁"minecraft:redstone"(红石)的合成配方(即使是作为另外一个advancement的奖励)。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:recipe_unlocked",

  "conditions": {

  "recipe": "minecraft:redstone"

  }

  }

  }

  }

  summoned_entity

  当玩家以指定方法生成指定实体时会被触发。方法包括: 生成凋灵(放置方块),生成雪傀儡(放置方块),生成铁傀儡(放置方块),重新生成末影龙(放置水晶)。生成末影龙时,所有能够看到末影龙血量条的玩家都算作满足这条件。

  以下这例子检查玩家有没有以以上方法生成实体

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:summoned_entity"

  }

  }

  }

  这trigger有1个condition: entity。

  entity

  这个entity object会检查生成的实体。

  以下这例子会检查生成了的实体是否末影龙。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:summoned_entity",

  "conditions": {

  "entity": {

  "type": "minecraft:ender_dragon"

  }

  }

  }

  }

  }

  used_ender_eye

  当玩家使用末影之眼的时候触发。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:used_ender_eye"

  }

  }

  }

  这trigger有1个condition: distance。

  distance

  这个range检查最近的要塞(stronghold)的中心点与玩家的x坐标与z坐标距离,不理会y坐标距离。

  计算公式为: $sqrt((player.x - stronghold.x)^2 + (player.Z - stronghold.Z)^2)$

  比如玩家在(40, 64, 10),最近的要塞在(120, 25, 400),distance就是 sqrt((40-120)^2+(10-400)^2)=398

  以下这例子检查玩家距离最近的要塞398格或以内使用末影之眼。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:used_ender_eye",

  "conditions": {

  "distance": {

  "max": 398

  }

  }

  }

  }

  }

  Requirements

  Requirements是一个list,结构为析取範式(disjunctive normal form, DNF),来容许使用布尔逻辑(boolean logic)来决定是否给予指定advancement。这list里有list(list of list),内层list为准则名称的list(list of string)。

  里层的list为与(and),外层为或(or)。必须有两层list。

  如果不指定requirements,则需要满足所有准则。使用这个则可以使用或(or)。

  以下这个advancement需要满足trigger_1及trigger_2才会获得此advancement。(trigger_1 and trigger_2)

  {

  "criteria": {

  "trigger_1": {

  "trigger": "minecraft:player_damaged"

  },

  "trigger_2": {

  "trigger": "minecraft:used_ender_eye"

  }

  },

  "requirements": [

  ["trigger_1", "trigger_2"]

  ]

  }

  以下这个advancement则当trigger_1或trigger_2满足时即可获得。(trigger_1 or trigger_2)

  {

  "criteria": {

  "trigger_1": {

  "trigger": "minecraft:player_damaged"

  },

  "trigger_2": {

  "trigger": "minecraft:used_ender_eye"

  }

  },

  "requirements": [

  ["trigger_1"],

  ["trigger_2"]

  ]

  }

  display

  可选对象display控制显示在Advancements菜单里的信息。如果这个对象不存在,那么此advancement将会被隐藏。

  当这个对象存在时,其中必须包含一个title字串和一个icon字串。icon作为图像显示在Advancements目录里,当鼠标移动到icon上时,title的内容会被显示。这里是个例子:

  例子:

  title字串可以为任何文字,但icon字串只能是一个物品ID。

  如果这个json内没有parent字段(即为整个选项卡的root项目),那么可以提供一个可选字串background。这将作为所有icon的背景显示。它的值应为一个可被解析到的图片地址。例如这个advancement将会显示金块(来自其方块材质)于背景:

  {

  "display": {

  "title": "Stew",

  "icon": "minecraft:mushroom_stew",

  "background": "minecraft:textures/blocks/gold_block.png"

  },

  "criteria": {

  "trigger_1": {

  "trigger": "minecraft:inventory_changed"

  }

  }

  }

  还有一个可选字串frame接受两个可能的值:task和challenge。如果没有被定义,那么默认的值为task。这将改变icon的外框的样式。以下的advancement将会使之使用challenge的外框:

  {

  "display": {

  "title": "Stew",

  "icon": "minecraft:mushroom_stew",

  "background": "minecraft:textures/blocks/gold_block.png",

  "frame": "challenge"

  },

  "criteria": {

  "trigger_1": {

  "trigger": "minecraft:inventory_changed"

  }

  }

  }

  parent

  parent字串指定另一个advancement的文件路径,使之作为此advancement的前置项目存在。这决定了显示于Advancements目录里面的树状图结构。注意,前置advancement并不要求一定在它们的子advancement前完成。

  为了让advancement显示在成就树中,display字串必须存在。

  给出如下advancement:

  {

  "display": {

  "title": "Take damage",

  "icon": "minecraft:diamond_sword"

  },

  "parent": "minecraft:custom/root",

  "criteria": {

  "trigger_1": {

  "trigger": "minecraft:player_damaged"

  }

  }

  }

  上述advancement直接属于"minecraft:custom/root"的分支。这里是实际的显示效果:

  你也可以让多个advancement拥有共同的parent:

  Rewards

  reward物件能指定玩家完成advancement时获得的奖励。

  可以同时有多个奖励:

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:player_damaged"

  }

  },

  "rewards": {

  "recipes": ["minecraft:redstone", "minecraft:ladder"],

  "loot": ["minecraft:entities/creeper", "minecraft:chests/simple_dungeon"],

  "experience": 500

  }

  }

  recipes

  这列表指定了玩家完成此advancement时会获得的合成配方(recipe)。是物件名称的字串列表(list of string)。

  以下这例子会给予红石及梯子的合成配方。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:player_damaged"

  }

  },

  "rewards": {

  "recipes": ["minecraft:redstone", "minecraft:ladder"]

  }

  }

  loot

  由于MC-115065(的关系,这奖励没法运作。

  指定执行的可掠夺物品表(loot table),以给予玩家物品。

  这例子会执行"minecraft:entities/creeper"及"minecraft:chests/simple_dungeon"的可掠夺物品表。(给予苦力怕死亡时的掉落及地牢箱子的物品)

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:player_damaged"

  }

  },

  "rewards": {

  "loot": ["minecraft:entities/creeper", "minecraft:chests/simple_dungeon"]

  }

  }

  experience

  这数字(不是range)指定了给予玩家的经验数量(不是等级)。

  {

  "criteria": {

  "custom_test_name": {

  "trigger": "minecraft:player_damaged"

  }

  },

  "rewards": {

  "experience": 500

  }

  }

  PS:在此非常感谢我的世界玩家Skylinerw的分享。

  以上就是我的世界1.12新成就系统JSON格式详解。更多精彩尽在游戏园我的世界专区。

  

19游戏网整理报道

上一篇:舞力全开2017好玩吗

下一篇:疯狂之源配置怎么样?具体配置要求一览

相关文章

-=Minecraft|我的世界-手把手教你开服=-:[3]

我的世界怎么换皮肤

我的世界皮肤怎么用

我的世界开服!!!

iPhone版《我的世界》评测:只属于自己的天地

《我的世界》TMI让角色恒死的方法

《我的世界》CS爆破系统原理

《我的世界》等级检测器制作方法

《我的世界》枪械系统实现方法

《我的世界》1.7.2更新内容

猜你喜欢

口袋妖怪最强进化V3.0最终版图文攻略(全)

王者荣耀最强上分英雄排名玩的好就能上王者

剑网三成就党攻略那些容易快速完成的成就

梦幻西游2奇遇任务维摩诘经变图文详细攻略

绝地求生大逃杀在哪玩?steam购买下载方法介绍

王者荣耀S5赛季露娜连招改版之后真废了吗

奴隶少女希尔薇详细攻略

魔兽世界抑魔金获取方法及用法介绍

王者荣耀赵云大型攻略出装、技能及实战全教程

剑网三最全面抓马攻略套马的汉子才威武!

我的世界相关新手卡
我的世界热门文章
一周热门文章

健康游戏忠告:抵制不良游戏 拒绝盗版游戏 注意自我保护 谨防受骗上当 适度游戏益脑 沉迷游戏伤身 合理安排时间 享受健康生活

Copyright ◎ 2019 19yxw All Rights Reserved Powered By 19yxw QQ:3618073693