
效果:该物品以耐久值代替电量,并且能够对应的充电(由于其耐久值极高并且耐久值与电量是1:1对应的,这使玩家尝试为之附上经验修补的行为毫无意义,从而某种程度上来说没有必要禁止其被附魔)
示例代码:
StartupEvents.registry("item", (event) => {
//充电电池
event.create("chargeable_battery")
.maxDamage(160000)
//最大电量
.attachCapability(
CapabilityBuilder.ENERGY.customItemStack()
.canExtract(() => true)
.canReceive(() => true)
.receiveEnergy((item, amount, sim) => {
const receive = Math.min(80, amount, item.damageValue);
//以最大充电速度、剩余可充电电量、准备输入的电量三者的最小值作为输入电量,能够防止过充导致浪费电
if (item.damageValue > 0 && !sim) {
item.damageValue -= receive;
}
return receive;
})
.getEnergyStored((item) => {
return 160000 - item.damageValue;
})
.extractEnergy((item, amount, sim) => {
const extract = Math.min(160, amount, 160000 - item.damageValue);
//以最大放电速度、准备输出的电量、剩余电量三者的最小值作为输出电量,能够防止过度输出导致耐久变成负的
if (item.damageValue < 160000 && !sim) {
item.damageValue += extract;
}
return extract;
})
);
//一次性电池
event.create("disposable_battery")
.maxDamage(160000)
.attachCapability(
CapabilityBuilder.ENERGY.customItemStack()
.canExtract(() => true)
.getEnergyStored((be) => {
return 160000 - be.damageValue;
})
.extractEnergy((item, amount, sim) => {
const extract = Math.min(160, amount, 160000 - item.damageValue);
if (item.damageValue < 160000 && !sim) {
item.damageValue += extract;
if (item.damageValue >= 160000) {
item.shrink(1);
}
//在耐久耗尽时销毁物品
}
return extract;
})
);
});