Minecraft-Datapack数据包开发3-进度与成就

简介

代码已经上传:
gitee
github

成就与进度

工欲善其事必先利其器,别死记硬背,多使用自动生成网站

  1. 进度数据包生成器:https://misode.github.io/advancement/
  2. 指令生成器:https://www.digminecraft.com/generators/give_tool.php

进度JSON文件创建的位置是:data/<命名空间>/advancement/<进度名>

完成本小节所创建的文件及其项目结构如下所示,建议您先直接把这些文件创建好后再开始下面的教程

为便于理解,后续将统一称之为“进度”(名义上的成就和进度是同一个东西,只不过这里有这两种说法而已)


## 什么是进度 > 参考wiki [https://zh.minecraft.wiki/w/%E8%BF%9B%E5%BA%A6%E6%95%B0%E6%8D%AE%E6%A0%BC%E5%BC%8F#enchanted_item](https://zh.minecraft.wiki/w/%E8%BF%9B%E5%BA%A6%E6%95%B0%E6%8D%AE%E6%A0%BC%E5%BC%8F#enchanted_item) >

您在游戏中按下L后所显示的界面就是进度界面

我们通过编写进度文件,检测用户或者任意实体触发的动作(如合成物品、拾取物品、攻击实体等),从而判断应当获取什么成就,并可针对该成就为用户解锁对应的配方、提供指定经验,甚至运行function函数

进度的创建有两种方式:

  1. 一种是直接在advancement目录下创建JSON文件,假设我们创建了 advancement/test.json,那么则可以通过 <命名空间>:test来直接引语此进度
  2. 另一种则是在advancement目录下创建对应的子目录,该目录就成为一个新的进度表,假设我们创建了进度advancement/ironsmith/test.json,那么则需要 <命名空间>:ironsmith/test来引用此进度

本小节将要实现的效果:

  1. 创建一个新的进度表,名叫ironsmith
  2. 共计有4个新的进度
  3. 其中有2个叶子进度依赖于同一个父进度

根进度

和二叉树一样,任何一个全新的进度表都需要一个根进度,而剩余的节点将依附于此根进度向外生长,他们就被称为叶子进度

创建根进度文件:data/td1/advancement/ironsmith/root.json

一个进度表内有且仅有一个根进度,且根进度文件里面不能含有parent参数;

因为生成器占用的篇幅太大了,这里就不截图展示了,您可以将此JSON文件直接复制到生成器的代码框内,生成器就会自动补全;

先看前面几个关键参数

  1. display 进度图标
  2. title 进度标题
  3. description 进度描述
  4. background 进度表的背景图,该图是16x16的png图片,我这里直接使用Minecraft原版提供的铁矿石图片作为背景了,后续会讲如何自定义背景图片
  5. frame 进度的图标样式(样式选择为challenge时,达成此进度会播放音乐,且description为紫色)
  6. show_toast 达成进度后是否右上角弹出浮窗
  7. announce_to_chat 达成进度后是否聊天栏发消息
  8. hidden 是否隐藏当前进度后面的进度

然后是准则criteria

  1. 判断条件的名字随便取,我这边取get_iron_ingot
  2. 每个条件都必须提供一个触发器trigger,我这边的触发器是inventory_changed,即检测到玩家的背包物品发生变化的动作
  3. 触发器还有对应的条件conditions,我这里限定了所有玩家都可以触发此触发器,且触发条件是拥有物品minecraft:iron_ingot
  4. 所以综合上述条件,得出准测get_iron_ingot限定的最终规则是:玩家背包物品发生变化时遍历一次背包内容,当发现存在铁锭时,条件判定成功

然后是收尾部分

  1. requirements 当前进度所依赖的准则,我们直接取get_iron_ingot,因为我们仅仅提供了一个准则
  2. rewards 达成进度后提供的奖励,我这边提供了一个铁块的合成配方,包括100经验
{
   
   
  "display": {
   
   
    "icon": {
   
   
      "id": "minecraft:iron_ingot",
      "count": 1
    },
    "title": "铁匠",
    "description": "开始你的打铁生活~",
    "background": "minecraft:textures/block/iron_ore.png",
    "frame": "task",
    "show_toast": true,
    "announce_to_chat": true,
    "hidden": false
  },
  "criteria": {
   
   
    "get_iron_ingot": {
   
   
      "trigger": "minecraft:inventory_changed",
      "conditions": {
   
   
        "player"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhillerDev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值