关于curios的一些魔改想法
in server_scripts
/**
* 返回对应槽位物品列表
* @param {Internal.Player} player
* @param {string} slot
* @returns {ItemList: [{}]}
*/
function getCuriosItemList(player,slot){
let curio = player.nbt.ForgeCaps['curios:inventory']["Curios"].find(function(curio) {
return curio["Identifier"] === slot;
})
return curio ? curio.StacksHandler.Stacks.Items : [];
}
/**
* 返回是否有此物品在player的slot上,及物品数量,对应槽位号(该对应槽位的第几个),对应槽位数量
* @param {Internal.Player} player
* @param {string} slot
* @param {string} id
* @returns {{hasItem: boolean, count: number, SlotNum: number, SlotSize: number}}
*/
function CuriosPlayer(player,slot,id){
let result = {
hasItem: false,
count: 0,
SlotNum: 0,
SlotSize: 0
};
let ItemList = getCuriosItemList(player,slot)
result.SlotSize = player.nbt.ForgeCaps['curios:inventory']["Curios"].find(function(curio) {
return curio["Identifier"] === slot;
}).StacksHandler.Cosmetics.Size
ItemList.forEach(item => {if (item.id === id) {
result.hasItem = true;
result.count += item.Count;
result.SlotNum = item.Slot;
}})
return result;
}
//以下思路来源于群友落秋与curios源码
//对饰品栏插槽的直接控制
let $CuriosApi = Java.loadClass("top.theillusivec4.curios.api.CuriosApi")
/**
*
* @param {"shrink"|"grow"|"getfor"|"setfor"|"unlock"|"lock"} method
* @param {string} slot
* @param {Internal.Player} player
* @param {Number} amount
* @returns
*/
function CuriosSlotMethod(method,slot,player,amount){
switch(method)
{
case "shrink": //减去对应玩家相应数量的对应插槽
$CuriosApi.getSlotHelper().shrinkSlotType(slot, amount, player)
break;
case "grow": //添加对应玩家相应数量的对应插槽
$CuriosApi.getSlotHelper().growSlotType(slot, amount, player)
break;
case "getfor": //获取对应玩家对应插槽的数量
console.log($CuriosApi.getSlotHelper().getSlotsForType(player, slot))
return $CuriosApi.getSlotHelper().getSlotsForType(player, slot)
case "setfor": //设置对应玩家对应插槽的数量
$CuriosApi.getSlotHelper().setSlotsForType(slot, player, amount)
break;
case "unlock": //解锁对应玩家对应插槽
$CuriosApi.getSlotHelper().unlockSlotType(slot, player)
break;
case "lock": //锁定对应玩家对应插槽
$CuriosApi.getSlotHelper().lockSlotType(slot, player)
break;
}
}
SlotHelper还有其他几个方法,我认为不怎么需要便不写入其中
其实关于我自己写的那几个读nbt的方法可以替换为导包来解决且跟好,但我难的改了()