昊想钧成 发表于 2024-3-2 21:50:16

[EWO]召唤仪式 模组Wiki翻译(最后更新:2024.3.1)




召唤仪式 模组Wiki翻译


前言

召唤仪式是一个Minecraft模组,允许整合包作者为物品或生物自定义召唤仪式。
它允许使用KubeJS和数据包添加配方。
这是一个挺有名的模组,但是在中文互联网上没有什么资料或教程,真是奇怪。

Wiki的三个部分的排序不分前后。

如果想要顺利阅读此Wiki,你需要:

[*]了解KubeJS的基本使用。
[*]带着一个能够思考的脑子。

相关链接:

[*]CurseForge:https://www.curseforge.com/minecraft/mc-mods/summoningrituals
[*]Wiki原文:https://github.com/AlmostReliable/summoningrituals/wiki/
[*]MCMOD:https://www.mcmod.cn/class/7739.html
[*]Github:https://github.com/AlmostReliable/summoningrituals

相关教程:
KubeJS 6 魔改教程 (Minecraft 1.19.2+)

[*]https://www.mcbbs.net/thread-1440019-1-1.html
[*]https://klpbbs.com/thread-131971-1-1.html

KubeJS魔改教程(Minecraft 1.16.5-1.18.2)

[*]https://www.mcbbs.net/thread-1207772-1-1.html
[*]https://klpbbs.com/thread-42003-1-1.html

【1.13-1.18】Minecraft 原版模组(数据包)入门教程

[*]https://www.mcbbs.net/thread-784662-1-1.html
[*]https://ruhuasiyu.github.io/VanillaModTutorial/

笔者能力有限,翻译难免有疏忽之处,还请见谅。

本帖最后更新于:2024.3.2
总字数:4027(23914字节)



事件

如果配方(参见配方部分)设置得当,你还可以使用以下两个事件来更加深入地为召唤仪式增加特性。需要注意的是,这些事件都需要KubeJS,数据包就无能为力了。

这两个事件使用了相同的事件对象。它们包含了如下属性:


[*]Level:仪式开始时的世界/级别。
[*]Pos:在仪式中,祭坛所处的位置。
[*]Recipe:目前正在制作的仪式配方。
                   它还包含了多个属性和方法,详细信息请参见此处:
                   https://github.com/AlmostReliable/summoningrituals-forge/blob/1.18/src/main/java/com/almostreliable/summoningrituals/recipe/AltarRecipe.java

[*]Player:正在启动仪式的玩家。
                  需要注意的是,如果召唤仪式是自动启动的,则不能被调用。
                  返回 ServerPlayer。

开始事件

这个事件会在引导物放入之后,仪式真正开始之前触发。
你可以在这个事件中检查更多的条件,并取消事件以阻止召唤仪式的正式触发。

1.18版本的事件监听器
onEvent('summoningrituals.start', event => {

1.19版本的事件监听器
SummoningRituals.start(event => {

示例代码:
onEvent('summoningrituals.start', event => {
// you can access the properties mentioned above by using event.level or event.getLevel()
//你可以使用event.level 或event.getLevel() 来使用上述的属性。

// lets a lightning strike hit the altar when starting the ritual
//在启动仪式时让闪电击中祭坛.
    event.level.spawnLightning(event.pos.x, event.pos.y, event.pos.z, true);

// keep in mind the invoking player can be nullish in case the ritual was started by automation
//请注意,如果召唤仪式是自动启动的,则不能调用Player(玩家)
    if (!event.player) return;

// if the player does not have at least 3 levels, cancel the craft
//如果玩家的经验小于3级,则取消仪式
    if (event.player.getXpLevel() < 3) {
      event.cancel();
    }
});

结束事件

这个事件在仪式完成并且完成输出后触发。
它可以被用来应用与在仪式完成后,给予玩家更多的效果或处理成就或阶段。
(当然你整点花活也不是不行)

1.18版本的事件监听器
onEvent('summoningrituals.complete', event => {
1.19版本的事件监听器
SummoningRituals.complete(event => {
示例代码:
onEvent('summoningrituals.complete', event => {
// you can access the properties mentioned above by using event.level or event.getLevel()
//你可以使用event.level 或event.getLevel() 来使用上述的属性

// keep in mind the invoking player can be nullish in case the ritual was started by automation
//请注意,如果召唤仪式是自动启动的,则不能调用Player(玩家)
    if (!event.player) return;

// give the invoking player 10 levels
//给玩家10级的经验。
    event.player.addXPLevels(10);
});


名词解释

召唤仪式模组允许玩家为物品和生物自定义召唤配方。
它与KubeJS模组联动,可以通过JS文件添加新的配方,同时还有两个新的事件可以进一步增加模组的功能。
祭坛方块是完全自动化的,这意味着祭坛上的物品并不一定需要玩家亲手摆放。它可以接收来自漏斗或各种模组的管道运输过来的物品。其中,最重要的是引导物,它决定了召唤仪式的开始。

术语

引导物(Catalyst)
引导物是最后放入祭坛以启动召唤仪式的物品。因此,即使玩家手中的引导物堆积成山,能放入祭坛的有且只能有一个。
如果祭坛中的物品不符合任意的一个召唤仪式,那么引导物会从祭坛中弹出。
输出
召唤仪式的输出方式有两种:生物输出与物品输出。
它们都可以支持NBT,因此你可以生成有着特殊属性的物品与生物。

偏离量
输出了偏离量决定相对于祭坛的位置,并根据此移动输出物品的原点。
在默认情况下,所有的输出都会在祭坛的正上方生成。一般而言,对于物品这是没问题的。但是对于生物而言,这看上去有点奇怪。那我们该怎么做呢?例如,当偏离量设置为3,2,-5时,输出物品的原点将会在X轴上平移三个方块,在Y轴上平移2个方块,在Z轴上平移-5个方块。

输出半径
输出的输出半径决定了在设置偏离量后的原点周围的随机传播距离。当生物输出时,每一个生物都会单独处理,而物品则会以四个唯一单位进行分组。
在默认情况下,所有输出的输出半径都被设置为1,0,1,这意味着它们会在水平轴上有所扩散。

输入
输入一般而言仅仅指物品的输入。它们决定了在召唤仪式中放置在祭坛里的物品。在仪式结束后,它们会被消耗掉。

祭品
祭品指的是生物输入,和上文的输入有着很大区别。它们不能被放置在祭坛里,因此必须放置在祭坛周围的献祭区域中。同样的,它们在仪式结束后会被消耗掉。

献祭区域
献祭区域决定了祭坛周围可以放置生物当作祭品的区域。
在默认情况下,默认区域是3,2,3,但实际上区域范围是5*3*5,因为祭坛的中心是原点



配方

在默认情况下,召唤仪式模组并不会新增任何的配方。这是一个面向开发者/整合包作者的模组,你需要自己添加配方。
你可以使用KubeJS或数据包来添加配方,因为所有的配方都是基于Json的。

KubeJS

这一部分将会介绍如何使用KubeJS来添加新的配方。是的,这个模组可以无缝与KubeJS联动。

开始创建一个配方
如果要创建一个配方,你必须在recipes事件中使用函数event.recipes.summoningrituals.altar。此函数接受一个参数,即引导物,引导物可以是任意IngredientJS表示的物品,这就意味这标签也是被允许的。引导物的最大数量是1。

1.18版本
onEvent('recipes', event => {
// starts the altar recipe builder with an Iron Ingot as Catalyst
//将铁锭作为启动召唤仪式配方的引导物
    event.recipes.summoningrituals.altar("iron_ingot")
      // more code
                //更多代码
});
1.19版本
ServerEvents.recipes(event => {
// starts the altar recipe builder with an Iron Ingot as Catalyst
//将铁锭作为启动召唤仪式配方的引导物
    event.recipes.summoningrituals.altar("iron_ingot")
      // more code
                //更多代码
});

输出定义
召唤仪式的配方支持两种输出方式:生物输出与物品输出。
它们之间并不相互排斥,相反,一个配方可以同时拥有两种输出类型。

物品输出
如果要输出简单的物品,可以在召唤仪式配方中增加如下函数。
// adds 3 Gold Ingots as output
//新增三个金锭作为输出
.itemOutput('3x gold_ingot')
// adds a single Diamond as output
//新增单独一个钻石作为输出
.itemOutput('diamond')
// adds 2 Stone Swords with specific NBT as output
//新增两把带有特定NBT的石剑作为输出。
.itemOutput(Item.of('stone_sword', 2, { foo: 'bar' }))
// omitting the namespace uses minecraft by default, for modded items, use this
//如果是Minecraft原版的物品则可以默认省略命名空间。但如果是模组里的物品,则使用以下方法。
.itemOutput('5x quark:limestone')
这些函数可以链接起来同时使用,为召唤仪式配方添加更多输出。
一般来说,它们都接受各种ItemStackJS实例。
如果你想要调整物品输出的偏离量或输出半径,则需要使用如下的物品输出构建器。

.itemOutput(
    SummoningOutput.item(Item.of('stone_sword', 2, { Damage: 5 }))
      .offset(5, 2, 3)
      .spread(3, 0, 3)
)

生物输出
除了物品输出外,召唤仪式还支持生物输出。以下是一个关于添加生物的简单函数,但是由于KubeJS并没有实体封装器,因此,你需要生物输出构建器来实现更多高级信息。
// adds a single Pig as output
//新增单独一只猪作为输出
.mobOutput('pig')
// adds a single Blizz from Thermal as output
//新增来自模组热力膨胀中的暴雪人作为输出
.mobOutput('thermal:blizz')
生物输出构建器还支持调整输出生物的数量,偏离量和输出半径,同时还支持NBT。
.mobOutput(
    SummoningOutput.mob('blaze')
      .count(3)
      .offset(5, 2, 3)
      .spread(3, 0, 3)
      // gives all three blazes 50 health
                //将3只烈焰人设定为50滴血。
      .data({ Health: 50, Attributes: [{ Name: 'generic.max_health', Base: 50 }] })
)

输入定义
此处的输入指的是放置在召唤祭坛上并在召唤仪式中被消耗的物品。它们可以是任意IngredientJS表示的物品,这就意味这标签也是被允许的。
// adds 64 Stone as input、
//新增64个圆石作为输入
.input('64x minecraft:stone')
// adds 2 Stone Swords with specific NBT as input
//新增两把带有特定NBT的石剑作为输入
.input(Item.of('stone_sword', 2, { Damage: 5 }).strongNBT())
// adds 10 Amethyst Shards as input
//新增10个紫水晶碎片作为输入。
.input(Item.of('amethyst_shard', 10))
// adds a single Glass Block from the glass tag as input
//新增一个带有Glass标签的一个玻璃方块作为输入
.input(Ingredient.of('#forge:glass'))
// the input function also supports varargs if you prefer that
//输入项也可以支持列表,如果你喜欢的话。
.input('stone', '2x apple', 'thermal:blizz_powder')

祭品定义
祭品指的是在召唤仪式开始时会被杀死的生物。你也可以称呼它为生物输入。当祭品因为召唤仪式而被杀死时会直接死亡,而不会掉落任何战利品。它们只有处于祭献区域内时才会被用于召唤仪式。
// adds 3 Pigs as sacrifice
//新增三只猪作为祭品
.sacrifice('pig', 3)
// adds a single Sheep as sacrifice
//新增一只羊作为祭品
.sacrifice('sheep')
// adds a single Blizz from Thermal as sacrifice
//新增来自模组热力膨胀中的暴雪人作为祭品
.sacrifice('thermal:blizz')

祭献区域
祭献区域可以根据配方进行修改,这是可以配置的。在默认情况下,将会使用默认的祭献区域(5*3*5)
// this is the general format
//这是默认的格式
.sacrificeRegion(width, height)
// sets the sacrifice region to 7x3x7 around the altar
//将祭献区域修改为7*3*7
.sacrificeRegion(5, 2)

调整配方时间
配方时间定义里完成仪式所需要的时间(按照ticks计数,20ticks = 1秒)。这段时间将会出现在加入引导物和产生输出之间的持续时间。
在默认情况下,这段时间将会是100ticks(5秒)。
// sets the recipe time to 200 ticks (10 seconds)
//设置配方时间为10秒
.recipeTime(200)

设置配方条件

祭坛底下的方块
仪式能否正常的进行取决于祭坛底下的方块。它还支持方块的状态,因此你也可以设置类似于燃烧的熔炉或者朝特定方向旋转的方块。

在默认情况下,祭坛底下可以是任意方块,因此,它不会显示于JE或者REI上。
// sets the required block below to Stone
//设置祭坛底下需要石头
.blockBelow('minecraft:stone')
// sets the required block below to a lit Furnace, unlit won't work
//设置祭坛底下时燃烧着的熔炉,否则它不会生效
.blockBelow('minecraft:furnace', { lit: true })
时间
玩家可以定义召唤仪式什么时候可以进行。有效的值是“day”和“night“,不区分大小写。
在默认情况下,在任意时间都可以进行。

.dayTime('day')
// this works too
//这样写也能正常运行!很酷吧
.dayTime('nIGhT')

天气
玩家可以定义召唤仪式什么天气条件下可以进行。有效的值是”clear”,”rain”和”thunder”,字符串不区分大小写。
在默认情况下,在任意天气下都可以进行。
.weather('clear')
.weather('rain')
.weather('thunder')

示例代码
event.recipes.summoningrituals
    .altar(Ingredient.of("#forge:ingots"))
    .itemOutput('3x gold_ingot')
    .itemOutput('diamond')
    .mobOutput('wolf')
    .mobOutput(
      SummoningOutput.mob('blaze')
            .count(5)
            .offset(0, 3, 0)
            .spread(4, 0, 4)
            .data({ Health: 50, Attributes: [{ Name: 'generic.max_health', Base: 50 }] })
    )
    .input('64x minecraft:stone')
    .input('5x prismarine_shard')
    .input('10x amethyst_shard')
    .input(Ingredient.of('#forge:glass'))
    .sacrifice('pig', 3)
    .sacrifice('sheep')
    .sacrifice('cow')
    .sacrificeRegion(3, 3)
    .recipeTime(200)
    .blockBelow('minecraft:furnace', { lit: true })
    .dayTime('day')
.weather('clear');


数据包

这一部分不会解释如何创建数据包或者数据包怎么加载。请阅读Minecraft Wiki或在前言中的教程以了解如何让创建数据包。

基本格式
最重要的是,配方的类型必须被填写为“summoningrituals:altar”
以下是一份关于配方的简单示例:
{
    "type": "summoningrituals:altar",
    "catalyst": { "tag": "forge:ingots" },
    "outputs": [
      { "item": "minecraft:gold_ingot", "count": 3 },
      { "item": "minecraft:diamond" },
      { "mob": "minecraft:wolf" },
      {
            "mob": "minecraft:blaze",
            "count": 5,
            "data": "{Attributes:[{Base:50.0d,Name:\"generic.max_health\"}],Health:50.0d}",
            "offset": { "x": 0, "y": 3, "z": 0 },
            "spread": { "x": 4, "y": 0, "z": 4 }
      }
    ],
    "inputs": [
      { "ingredient": { "item": "minecraft:stone" }, "count": 64 },
      { "ingredient": { "item": "minecraft:prismarine_shard" }, "count": 5 },
      { "ingredient": { "item": "minecraft:amethyst_shard" }, "count": 10 },
      { "tag": "forge:glass" }
    ],
    "sacrifices": {
      "mobs": [{ "mob": "minecraft:pig", "count": 3 }, { "mob": "minecraft:sheep" }, { "mob": "minecraft:cow" }],
      "region": { "x": 3, "y": 3, "z": 3 }
    },
    "recipe_time": 200,
    "block_below": { "block": "minecraft:furnace", "properties": { "lit": "true" } },
    "day_time": "DAY",
    "weather": "CLEAR"
}
本例子使用了如下配方:

定义引导物
引导物可以是任意Ingredient表示的物品,这就意味这标签也是被允许的。引导物的最大数量是1。
// any ingot as catalyst
//任意的锭作为引导物
"catalyst": { "tag": "forge:ingots" }
// iron ingot as catalyst
//铁锭作为引导物
"catalyst": { "item": "minecraft:iron_ingot" }
输出定义
召唤仪式的配方支持两种输出方式:生物输出与物品输出。
它们之间并不相互排斥,相反,一个配方可以同时拥有两种输出类型。
输出需要在Json数组中分组:
"outputs": [
// your item and mob outputs here
//这里是你的生物输出与物品输出
]
物品输出:
如果你的物品输出比较简单,你可以使用以下代码:
// adds 3 Gold Ingots as output
//新增三个金锭作为输出
{ "item": "minecraft:gold_ingot", "count": 3 }
// adds a single Diamond as output
//新增单独一个钻石作为输出
{ "item": "minecraft:diamond" }
如果你想要调整物品输出的偏离量,输出半径和NBT,可以使用以下附加属性:
{
    "item": "minecraft:iron_sword",
    "count": 8,
    "nbt": "{Damage:0}",
    "offset": { "x": 0, "y": 3, "z": 0 },
    "spread": { "x": 4, "y": 0, "z": 4 }
}
生物输出
你可以使用以下代码以添加一个生物作为输出。
// adds a single pig as output
//新增单独一只猪作为输出
{ "mob": "minecraft:pig" }
// adds a single Blizz from Thermal as output
//新增来自模组热力膨胀中的暴雪人作为输出
{ "mob": "thermal:blizz" },

如果你还想调整输出生物的数量,偏离量,传播范围与NBT:
{
    "mob": "minecraft:blaze",
    "count": 5,
    "data": "{Attributes:[{Base:50.0d,Name:\"generic.max_health\"}],Health:50.0d}",
    "offset": { "x": 0, "y": 3, "z": 0 },
    "spread": { "x": 4, "y": 0, "z": 4 }
}

输入定义
输入指的是放置在召唤祭坛上并在召唤仪式中被消耗的物品。它们可以是任意Ingredient的物品,这就意味这标签也是被允许的。
输入需要在Json数组中分组:
"inputs": [
// your inputs here
//这里是你的输入
]
你可以使用以下代码以添加物品作为输入。
// adds 64 Stone as input
//新增64个圆石作为输入
{ "ingredient": { "item": "minecraft:stone" }, "count": 64 }
// adds a single Stone as input
{ "item": "minecraft:stone" }
// adds 10 Amethyst Shards as input      
//新增10个紫水晶碎片作为输入。
{ "ingredient": { "item": "minecraft:amethyst_shard" }, "count": 10 }
// adds a single Glass Block from the glass tag as input
//新增一个带有Glass标签的一个玻璃方块作为输入
{ "tag": "forge:glass" }
// adds 10 Glass Blocks from the glass tag as input
//新增十个带有Glass标签的一个玻璃方块作为输入
{ "ingredient": { "tag": "forge:glass" }, "count": 10 }

祭品定义
祭品指的是在召唤仪式开始时会被杀死的生物。你也可以称呼它为生物输入。当祭品因为召唤仪式而被杀死时会直接死亡,而不会掉落任何战利品。它们只有处于祭献区域内时才会被用于召唤仪式。

祭品需要在一个Json对象内Json数组中分组:
// this JSON object holds all information regarding sacrifices
// optional | if not present, the ritual will not require sacrifices
//此 JSON 对象保存有关祭品的所有信息
//如果这些不存在,则默认召唤仪式不需要祭品

"sacrifices": {
    "mobs": [
      // this JSON array holds the sacrifices
//此Json数组中是你的祭品
    ]
}
你可以使用以下代码以添加生物作为祭品。
// adds 3 Pigs as sacrifice
//新增三只猪作为祭品
{ "mob": "minecraft:pig", "count": 3 }
// adds a single Sheep as sacrifice
//新增一只羊作为祭品
{ "mob": "minecraft:sheep" }
// adds a single Blizz from Thermal as sacrifice
//新增来自模组热力膨胀中的暴雪人作为祭品
{ "mob": "thermal:blizz" }
祭献区域
祭献区域可以根据配方进行修改,这是可以配置的。在默认情况下,将会使用默认的祭献区域(5*3*5)
"sacrifices": {
    "mobs": [],
    "region": { "x": 3, "y": 3, "z": 3 }
}
调整配方时间
配方时间定义里完成仪式所需要的时间(按照ticks计数,20ticks = 1秒)。这段时间将会出现在加入引导物和产生输出之间的持续时间。
在默认情况下,这段时间将会是100ticks(5秒)
// sets the recipe time to 200 ticks (10 seconds)      
//设置配方时间为10秒
"recipe_time": 200

设置配方条件

祭坛底下的方块
仪式能否正常的进行取决于祭坛底下的方块。它还支持方块的状态,因此你也可以设置类似于燃烧的熔炉或者朝特定方向旋转的方块。

在默认情况下,祭坛底下可以是任意方块,因此,它不会显示于JE或者REI上。
// sets the required block below to Stone
//设置祭坛底下需要石头
"block_below": { "block": "minecraft:stone" }
// sets the required block below to a lit Furnace, unlit won't work
//设置祭坛底下时燃烧着的熔炉,否则它不会生效
"block_below": { "block": "minecraft:furnace", "properties": { "lit": "true" } }

时间
玩家可以定义召唤仪式什么时候可以进行。有效的值是“day”和“night“,不区分大小写。
在默认情况下,在任意时间都可以进行。
"day_time": "day"
// this works too
//这样写也不是不行
"day_time": "nIGhT"

天气
玩家可以定义召唤仪式什么天气条件下可以进行。有效的值是”clear”,”rain”和”thunder”,字符串不区分大小写。
在默认情况下,在任意天气下都可以进行。
"weather": "clear"
"weather": "rain"
"weather": "thunder"



Wudji 发表于 2024-3-3 12:57:17

非常好教程,使我心潮澎湃

Han_Jiang 发表于 2024-8-17 23:05:39

对我的帮助十分大(快乐+憨笑)
页: [1]
查看完整版本: [EWO]召唤仪式 模组Wiki翻译(最后更新:2024.3.1)