[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"
非常好教程,使我心潮澎湃 对我的帮助十分大(快乐+憨笑)
页: [1]