仪式物品

仪式物品

用于创建数据驱动召唤仪式的模组

基础库

仪式之物(Ritual thingy)

一个允许模组、整合包或数据包创作者添加数据驱动召唤仪式的模组。

特性

多方块结构

多方块结构目前通过 Patchouli 支持,其它多方块系统正在开发中。 通过 Patchouli 的 json 文件或使用 Patchouli API 添加多方块结构。 添加到 ritual-thingy:altar 方块标签中的方块在右键点击时会被检查是否为多方块结构。

物品条件

该模组支持玩家主手中的物品条件。其它物品条件可通过 API 添加。

生物波次

该模组支持添加多个波次,每个波次包含多组可自定义 NBT 的生物。每个波次可拥有自定义名称、Boss 栏颜色以及两种 Boss 栏运行模式(按实体数量或实体总生命值)。

物品操作

该模组支持将物品给予物品栏、将其掉落于仪式方块内部,或将其掉落于仪式方块上方。其它物品操作可通过 API 添加。


其它特性包括可自定义的延迟 Boss 栏、自定义开始与结束消息,以及自定义开始与结束音效。

格式

仪式文件应位于 data/YOUR_NAMESPACE/rituals/RITUAL_NAME.json

标记有 * 的键为必填项(但如果父标签被省略,则也可省略)

{
  "soundEvent": "block.beacon.activate", //开始时播放的音效
  "maxUses": 1, //每位玩家最大仪式使用次数。设为 0 以禁用
  "altar"*: {
    "patchouli": true, //必须设为 true
    "id"*: "ritual-thingy:test_altar", //Patchouli 祭坛的标识符
    "itemCondition": { //不包含此项以禁用物品条件
      "predicate": "ritual-thingy:mainhand", //谓词的标识符(默认为 "ritual-thingy:mainhand")
      "ingredient"*: { // 原料:使用与配方相同的格式
        "item": "minecraft:stick"
      },
      "decrement":1 //若使用了正确的物品,则从堆叠中移除该数量的物品
    },
    "dimensionCondition":{
      "dimensions":[
        "minecraft:overworld"
      ], //允许的维度列表
      "allowed":true //true 表示该列表为允许的维度,false 表示其为不允许的维度
    }
  },
  "stack": { //物品奖励,参见 [Item Stack](https://origins.readthedocs.io/en/latest/types/data_types/item_stack/)
    "item"*: "minecraft:diamond_sword" 
    "count" : 1
  },
  "startMessage": "Ritual starting", //开始时发送的消息
  "completeMessage": "Ritual ending", //结束时发送的消息
  "completeAction": "ritual-thingy:drop_offset", //物品操作的标识符(默认为 "ritual-thingy:none")
  "trial": { //省略此项以使仪式立即完成
    "waveTickDelay": 80, //试炼波次之间的延迟,单位为刻
    "beginningCountdown": 80, //试炼的倒计时,单位为刻
    "delayBossBarColor": "blue", //延迟与倒计时所用的 Boss 栏颜色
    "waves"* : [ //实体波次
      {
        "bossBarText": "Pig", //该波次的 Boss 栏文本
        "bossBarColor": "blue", //该波次的 Boss 栏颜色
        "isBoss": true, //Boss 栏是否应显示生命值而非实体数量
        "spawnRange": 4, //生物相对于被点击方块的生成范围
        "startSound": "entity.wither.shoot", //波次开始时播放的音效
        "endSound": "entity.experience_orb.pickup", //波次结束时播放的音效
        "groups": [ //单个实体组
          {//该组包含一只没有额外数据的猪
            "count": 1,
            "entityType"*: "minecraft:pig"
          }
        ]
      },
      {
        "bossBarText": "Cows",
        "bossBarColor": "blue",
        "spawnRange": 4,
        "startSound": "entity.wither.shoot",
        "endSound": "entity.experience_orb.pickup",//使用最后一波次的结束音效作为仪式本身的结束音效
        "groups": [
          {
            "count": 8,
            "entityType"*: "minecraft:cow",
            "tag": "{}" //额外的实体数据(名称、盔甲、效果、变种……)
          }
        ]
      }
    ]
  }
}

依赖

若要作为开发者使用该 API 或该模组的其它部分,请将以下内容添加到你的 build.gradle 中

repositories {
  maven {
  	url = 'https://maven.riftrealms.de/releases'
  }
  repositories {
        maven { url 'https://maven.blamejared.com' }
    }
}
dependencies {
    //将版本添加到你的 gradle.properties 中,或将 ${project.ritual_thingy_version} 替换为模组版本
    modApi "eu.ansquare.ritualthingy:ritual-thingy:${project.ritual_thingy_version}"
}

API

Ritual API 允许模组开发者添加自己的物品操作、条件以及阻止仪式开始的事件。它们会在通用初始化器中以以下格式注册:

条件

ItemConditionPredicate YOUR_CONDITION = RitualApi.registerItemCondition(new Identifier("YOUR_MOD_ID", "YOUR_CONDITION_ID"), (ingredient, player, pos) -> {
        ItemStack stack = //获取物品堆叠
        return new Pair<>(ingredient.test(stack), stack);//用原料测试该堆叠并返回它,以便可能地进行递减
    });

默认条件为

  • ritual-thingy:mainhand 检查玩家主手中的物品

操作

ItemConditionPredicate YOUR_ACTION = RitualApi.registerItemAction(new Identifier("YOUR_MOD_ID", "YOUR_ACTION_ID"), (stack, player, pos) -> {
        //执行操作
    });

默认操作为

  • ritual-thingy:none 什么都不做
  • ritual-thingy:give 将物品给予玩家
  • ritual-thingy:drop 将其掉落于仪式方块的位置
  • ritual-thingy:drop_offset 将其掉落于仪式方块上方一格(即其顶部)

阻止仪式

PreventRitualCallback.EVENT.register((player, world, hand, hitResult) -> {
            return false; //若不允许仪式发生,则返回 false
        });