
KubeJS Goety
用于Goety模组的KubeJS集成。允许通过JavaScript脚本自定义Goety仪式需求、酿造系统和配方系统。
KubeJS Goety
用于 Goety 模组的 KubeJS 集成。允许通过 JavaScript 脚本自定义 Goety 仪式需求、酿造系统和配方系统。
功能
- ✅ 使用 GoetyEvents 事件系统
- ✅ 创建和修改仪式类型,支持完全自定义的仪式条件检查逻辑
- ✅ 酿造系统配置(容量修饰符、催化剂、增幅物)
- ✅ 配方系统配置(仪式配方、酿造配方、粉碎配方等)
- ✅ 服务端脚本支持(server_scripts)
- ✅ 无需修改 Goety 模组本身
需求
- Minecraft 1.20.1
- Forge 47.1.65+
- KubeJS 2001.6+
- Goety 2.5.38+
安装
- 将模组放入
mods文件夹 - 确保已安装 KubeJS 和 Goety 模组
- 启动游戏
仪式系统配置
GoetyEvents.modifyRitual 和 GoetyEvents.registerRitual
使用 GoetyEvents 事件系统自定义 Goety 仪式需求。
创建脚本文件
在您世界存档目录中创建一个脚本文件:
你的世界存档/
└── kubejs/
└── server_scripts/
└── goety_rituals.js
修改现有仪式条件
GoetyEvents.modifyRitual(event => {
// event.modify(ritualId, modifier)
// - ritualId: 要修改的仪式 ID (字符串)
// - modifier: 接收仪式对象的修改器函数
// 使用配置风格修改
event.modify('storm', ritual => {
ritual.blocks = ['8x #minecraft:copper_ores', '3x minecraft:lightning_rod'];
ritual.setWeather('thunder'); // 需要雷雨天气
ritual.setMinY(128); // 高度 >= 128
ritual.setRequireSkyVisible(true); // 需要天空可见
});
// 使用自定义函数修改
event.modify('magic', ritual => {
ritual.setRequirement((tileEntity, pos, level) => {
// 自定义检查逻辑
// 如果满足条件则返回 true,否则返回 false
return true;
});
});
});
创建新的仪式类型
GoetyEvents.registerRitual(event => {
// event.create(ritualId, builder)
// - ritualId: 仪式的唯一标识符 (字符串)
// - builder: 接收仪式对象的构建器函数
// 创建简单仪式(仅需要方块)
event.create('diamond_ritual', ritual => {
ritual.blocks = ['5x minecraft:diamond_block', '3x minecraft:emerald_block'];
});
// 创建复杂仪式(需要特殊条件和完成效果)
event.create('thunder_ritual', ritual => {
ritual.blocks = ['minecraft:lightning_rod'];
ritual.setWeather('thunder'); // 需要雷雨天气
ritual.setRequireSkyVisible(true); // 需要天空可见
ritual.setJeiIcon('minecraft:lightning_rod'); // 设置 JEI 显示图标(可选)
// 设置仪式完成时的回调函数(可选)
// 注意:此回调在配方完成时触发,即仪式成功执行并产生结果后
ritual.setOnFinish((world, darkAltarPos, tileEntity, castingPlayer, activationItem) => {
// 获取坐标
let x = darkAltarPos.getX ? darkAltarPos.getX() : darkAltarPos.x;
let y = darkAltarPos.getY ? darkAltarPos.getY() : darkAltarPos.y;
let z = darkAltarPos.getZ ? darkAltarPos.getZ() : darkAltarPos.z;
// 使用指令播放声音(服务端)
let server = world.getServer ? world.getServer() : null;
if (server) {
server.runCommandSilent(`playsound minecraft:entity.lightning_bolt.thunder weather @a ${x} ${y} ${z} 1 1`);
}
});
});
});
禁用内置仪式
要禁用内置仪式,使用 modifyRitual 使条件检查始终返回 false:
GoetyEvents.modifyRitual(event => {
event.modify('storm', ritual => {
ritual.requirement = () => false; // 始终返回 false 以禁用仪式
});
});
配置选项
ritual 对象支持以下配置选项:
ritual.range(整数): 扫描范围 (默认 16)ritual.blocks(数组/字符串): 方块需求配置- 支持的格式:
'9x minecraft:stone','/pattern/','#tag','@mod' - 正则表达式示例:
'16x /prismarine/'匹配所有包含 prismarine 的方块
- 支持的格式:
ritual.setDimension(dimensionId, containsMatch)(字符串, 布尔值): 维度限制dimensionId: 维度 ID,例如 'minecraft:the_nether' 或 'aether'containsMatch: false (精确匹配,默认) 或 true (模糊匹配)
ritual.setWeather(weather)(字符串): 天气需求 ('thunder'/'rain'/'clear')ritual.setTimeOfDay(timeOfDay)(字符串): 时间需求 ('day'/'night')ritual.setBiome(biomeValue, type)(对象, 字符串): 生物群系需求biomeValue: 生物群系值 (可以是字符串或数组),或方法名 (当 type='func' 时)type: 'id' (生物群系 ID,默认),'tags' (标签),'func' (方法调用)- 方法调用:
ritual.setBiome('coldEnoughToSnow', 'func')调用biome.coldEnoughToSnow(pos)方法 - 支持 Biome 类中的任何布尔方法,通过反射调用
ritual.setMinY(y)(整数): 最小高度需求ritual.setMaxY(y)(整数): 最大高度需求ritual.setRequireSkyVisible(boolean)(布尔值): 是否要求天空可见ritual.setRequireAltarWaterlogged(boolean)(布尔值): 是否要求祭坛含水ritual.setJeiIcon(item)(字符串/对象): JEI 显示图标 (物品 ID 或物品对象,可选,默认为黑曜石)ritual.setOnFinish(callback)(函数): 配方完成时触发的回调函数 (即仪式成功执行并产生结果后),接收参数 (world, darkAltarPos, tileEntity, castingPlayer, activationItem)ritual.setRequirement(function)(函数): 自定义检查函数 (会覆盖所有配置)
本地化(可选)
如果您创建了新的仪式类型并希望在 JEI 或游戏中显示英文名称,您需要添加本地化文件:
使用 KubeJS 资源包
在您世界存档目录中创建资源包结构:
你的世界存档/
└── kubejs/
└── assets/
└── goety/
└── lang/
└── en_us.json
在 en_us.json 中添加:
{
"jei.goety.craftType.diamond_ritual": "Diamond Ritual",
"jei.goety.craftType.flame_ritual": "Flame Ritual"
}
本地化键名格式:
- 键名:
jei.goety.craftType.<ritualId> - 其中
<ritualId>是您创建仪式时使用的 ID
注意:
- 如果您不添加本地化,仪式名称将显示为仪式 ID (例如
diamond_ritual) - 本地化是可选的,不影响仪式功能
- 您可以只添加需要的语言文件
酿造系统配置
GoetyEvents.registerBrew
配置 Goety 的酿造系统,包括容量修饰符、催化剂和增幅物。
创建脚本文件
在您世界存档目录中创建一个脚本文件:
你的世界存档/
└── kubejs/
└── server_scripts/
└── goety_brews.js
注册容量修饰符
GoetyEvents.registerBrew(event => {
// event.addCapacity(item, level)
// - item: 物品 ID (字符串) 或物品对象
// - level: 等级 (0-7)
event.addCapacity('minecraft:nether_wart', 0);
event.addCapacity('mymod:magic_crystal', 6);
});
注册增幅物
GoetyEvents.registerBrew(event => {
// event.addAugmentation(item, modifier, level)
// - item: 物品 ID (字符串) 或物品对象
// - modifier: 增幅类型 (字符串)
// - 'capacity' - 容量
// - 'duration' - 持续时间
// - 'amplifier' - 效果放大器
// - 'aoe' - 效果范围
// - 'linger' - 滞留效果
// - 'quaff' - 饮用效果
// - 'velocity' - 速度
// - 'aquatic' - 水生
// - 'fire_proof' - 防火
// - level: 等级 (整数)
event.addAugmentation('minecraft:redstone', 'duration', 0);
event.addAugmentation('mymod:time_crystal', 'duration', 3);
event.addAugmentation('mymod:power_crystal', 'amplifier', 2);
});
完整示例
GoetyEvents.registerBrew(event => {
// 容量修饰符
event.addCapacity('mymod:magic_crystal', 6);
event.addCapacity('mymod:magic_dust', 5);
// 增幅物
event.addAugmentation('mymod:time_crystal', 'duration', 3);
event.addAugmentation('mymod:power_crystal', 'amplifier', 2);
event.addAugmentation('mymod:range_crystal', 'aoe', 1);
});
注意:
- 添加容量修饰符和增幅物 → 使用
GoetyEvents.registerBrew - 添加催化剂(酿造配方) → 使用
event.recipes.goety.brewing(详见下方配方系统)
配方系统配置
ServerEvents.recipes
使用 KubeJS 标准配方事件来配置 Goety 的配方系统。
创建脚本文件
在您世界存档目录中创建一个脚本文件:
你的世界存档/
└── kubejs/
└── server_scripts/
└── goety_recipes.js
仪式配方
ServerEvents.recipes(event => {
// event.recipes.goety.ritual(result, ritualType, ingredients)
// - result: 输出物品 (OutputItem)
// - ritualType: 仪式类型 ID,根据功能选择:
// - 'goety:craft' - 合成物品 (最常用)
// - 'goety:enchant' - 附魔
// - 'goety:summon' - 召唤实体
// - 'goety:summon_tamed' - 召唤已驯服实体
// - 'goety:convert' - 转化实体
// - 'goety:teleport' - 传送
// - ingredients: 材料数组 (InputItem[])
// 合成仪式
event.recipes.goety.ritual('minecraft:emerald', 'goety:craft', [
'minecraft:gold_ingot',
'minecraft:gold_ingot',
'minecraft:diamond'
])
.activationItem('minecraft:ender_pearl')
.craftType('forge') // 锻造仪式
.soulCost(5)
.duration(20);
// 召唤仪式
event.recipes.goety.ritual('goety:jei_dummy/none', 'goety:summon', [
'minecraft:rotten_flesh',
'minecraft:bone'
])
.activationItem('minecraft:ender_pearl')
.craftType('necroturgy')
.soulCost(10)
.entityToSummon('minecraft:zombie')
.summonLife(6000);
});
酿造配方
ServerEvents.recipes(event => {
// event.recipes.goety.brewing(ingredient, effect)
// - ingredient: 材料物品 (InputItem)
// - effect: 效果 ID (字符串,例如 'minecraft:regeneration')
event.recipes.goety.brewing('minecraft:golden_apple', 'minecraft:regeneration')
.soulCost(15)
.capacityExtra(0)
.duration(30); // 30 秒
// 需要特定实体的酿造配方
event.recipes.goety.brewing('minecraft:nether_star', 'minecraft:resistance')
.soulCost(50)
.entityType('minecraft:ender_dragon'); // 需要末影龙
});
配置优先级:
- 您可以使用
event.recipes.goety.brewing添加新的催化剂配方或调整现有效果的灵魂消耗 (.soulCost()) - 如果同时使用了
config/goety-brews.toml和 KubeJS 脚本,则 KubeJS 脚本具有更高优先级,会覆盖配置文件设置 - 建议使用 KubeJS 脚本,因为它更灵活且易于版本控制
粉碎配方
ServerEvents.recipes(event => {
// event.recipes.goety.pulverize(ingredient)
// - ingredient: 材料物品 (InputItem)
// 产出方块的粉碎配方
event.recipes.goety.pulverize('minecraft:cobblestone')
.blockResult('minecraft:gravel');
// 产出物品的粉碎配方
event.recipes.goety.pulverize('minecraft:gravel')
.itemResult('minecraft:flint');
});
诅咒灌注配方
ServerEvents.recipes(event => {
// event.recipes.goety.cursed_infuser_recipes(result, ingredient)
// - result: 输出物品 ID (字符串)
// - ingredient: 材料物品 (InputItem)
event.recipes.goety.cursed_infuser_recipes('minecraft:emerald', 'minecraft:iron_sword')
.cookingTime(100); // 5 秒 (100 ticks)
});
火盆配方
ServerEvents.recipes(event => {
// event.recipes.goety.brazier(result, ingredients)
// - result: 输出物品 (OutputItem)
// - ingredients: 材料数组 (InputItem[])
event.recipes.goety.brazier('minecraft:emerald', [
'minecraft:soul_sand',
'minecraft:soul_sand',
'minecraft:soul_sand',
'minecraft:lapis_lazuli'
])
.soulCost(10);
});
移除配方
ServerEvents.recipes(event => {
// 移除现有配方
event.remove({ type: 'goety:ritual', craftType: 'magic' });
event.remove({ type: 'goety:brewing', effect: 'minecraft:poison' });
event.remove({ type: 'goety:pulverize', ingredient: 'minecraft:cobblestone' });
});
贡献
欢迎提交 Issue 和 Pull Request!
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。