本教程适用于以下情景:
1. 找到一个诅咒饰品mod,但发现配置里没有开具强制佩戴的选项?
2. 每次重进游戏/reload发现饰品栏里的饰品总是在背包掉一地?
3. 想要强制玩家戴上你的整活自定义物品?
本人就是深受(2)的毒害,压力D老师一下午获得了焚诀
环境为Forge 1.20.1,更高版本的Neoforge可以参考这位大佬的教程获得思路
在使用脚本前请确保你已经安装了kubejs以及其前置mod
以来自月之石:有罪待偿的七宗罪为例,该饰品栏位为护符
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
// server_scripts/auto_equip_curio.jsconsole.info('七宗罪物品自动装备脚本已加载 (Forge 1.20.1 版)');// 加载正确的 CuriosApi 类const CuriosApi = Java.loadClass("top.theillusivec4.curios.api.CuriosApi");// 辅助函数:将物品装备到玩家护符栏function equipToCharm(player, targetItemId) { try { // 1. 获取玩家的饰品栏管理器 (返回 LazyOptional) let lazyCurios = CuriosApi.getCuriosInventory(player); if (!lazyCurios.isPresent()) { console.warn('玩家没有 Curios 饰品栏能力'); return false; } // 2. 解包获取 ICuriosItemHandler 实例 let curiosInventory = lazyCurios.orElse(null); if (!curiosInventory) return false; // 3. 在背包中查找目标物品 let inventory = player.getInventory(); let foundSlot = -1; let foundItem = null; for (let i = 0; i < inventory.getContainerSize(); i++) { let stack = inventory.getItem(i); if (!stack.isEmpty() && stack.getId() === targetItemId) { foundSlot = i; foundItem = stack; break; } } if (foundSlot === -1) { console.warn('背包中未找到目标物品'); return false; } // 4. 获取护符栏 (charm) 的管理器 CurioStacksHandler let charmHandlerOpt = curiosInventory.getStacksHandler("charm"); if (!charmHandlerOpt.isPresent()) { console.warn('玩家没有护符栏 (charm) 槽位'); return false; } let charmHandler = charmHandlerOpt.get(); // 5. 获取 IItemHandler 接口,用于物品操作 let stacks = charmHandler.getStacks(); if (!stacks) return false; // 6. 寻找空位并尝试插入物品 let itemToEquip = foundItem.copy(); let slotCount = stacks.getSlots(); for (let i = 0; i < slotCount; i++) { if (stacks.getStackInSlot(i).isEmpty()) { let remaining = stacks.insertItem(i, itemToEquip, false); if (remaining.isEmpty()) { foundItem.setCount(0); console.info(`✓ 成功将物品放入护符栏,槽位: ${i}`); return true; } else { console.warn('插入失败,物品可能不兼容护符栏'); return false; } } } console.warn('护符栏已满,无可用空位'); return false; } catch (error) { console.error('装备过程出错:', error); if (error.stack) console.error(error.stack); return false; }}// 监听玩家登录PlayerEvents.loggedIn(event => { let player = event.player; let targetItemId = 'moonstoneoutstandingsins:seven_curse_item'; event.server.scheduleInTicks(20, () => { let inventory = player.getInventory(); for (let i = 0; i < inventory.getContainerSize(); i++) { let stack = inventory.getItem(i); if (!stack.isEmpty() && stack.getId() === targetItemId) { console.info('登录时检测到七宗罪物品,尝试自动装备...'); equipToCharm(player, targetItemId); break; } } });});// 监听物品栏变化PlayerEvents.inventoryChanged(event => { let player = event.player; let item = event.getItem(); let targetItemId = 'moonstoneoutstandingsins:seven_curse_item'; if (item.getId() !== targetItemId || item.isEmpty()) { return; } console.info('检测到七宗罪物品进入背包,准备自动装备...'); event.server.scheduleInTicks(10, () => { equipToCharm(player, targetItemId); });}); |
自己魔改则需要修改以下部分
1. 将下列代码里的物品ID换成你所想要修改的物品ID(需完整命名空间)
|
1
|
let targetItemId = 'moonstoneoutstandingsins:seven_curse_item'; |
2.将下列代码里的栏位ID替换成你所想要修改的栏位ID
|
1
|
let charmHandlerOpt = curiosInventory.getStacksHandler("charm"); |
那么,如何知道我这个栏位的ID是什么呢?
打开游戏,找到你的目标物品,输入指令/kubejs hand

(以维度意志为例)
可以看到
第一行Item.of里第一个值即为物品ID,curios:back即为饰品槽位ID(图中为背饰)
其余饰品按照这个方法即可
最后,希望这个教程可以帮到大家!本人kubejs小白,如有不足请多多包涵!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END





暂无评论内容