Some checks failed
Deploy to Remote Server / deploy (push) Failing after 1m11s
68 lines
3.4 KiB
JavaScript
68 lines
3.4 KiB
JavaScript
const $IGun = Java.loadClass("com.tacz.guns.api.item.IGun")
|
|
const $TimelessAPI = Java.loadClass("com.tacz.guns.api.TimelessAPI")
|
|
const $AttachmentDataUtils = Java.loadClass("com.tacz.guns.util.AttachmentDataUtils")
|
|
const $EnergyCellBlockItem = Java.loadClass("appeng.block.networking.EnergyCellBlockItem")
|
|
PlayerEvents.tick(e => {
|
|
|
|
function linear(val, start, end) {
|
|
return val * (end - start) + start
|
|
}
|
|
const { player, level } = e
|
|
if (level.time % 120 != 0)
|
|
return
|
|
if ($IGun.mainhandHoldGun(player)) {
|
|
let gun = player.mainHandItem
|
|
let iGun = $IGun.getIGunOrNull(gun)
|
|
let id = iGun.getGunId(gun)
|
|
if (id == "applied_armorer:moritz_mg_emg_prototype" || id == "applied_armorer:moritz_mg_hmg22") {
|
|
let index = $TimelessAPI.getCommonGunIndex(id)
|
|
if (index.present) {
|
|
let maxAmmo = $AttachmentDataUtils.getAmmoCountWithAttachment(gun, index.get().gunData)
|
|
let multipler = index.get().gunData.getAmmoAmount() / maxAmmo * 4
|
|
let neededEnergy = (maxAmmo - iGun.getCurrentAmmoCount(gun)) * 4000 * multipler
|
|
let neededEnergyCopy = neededEnergy
|
|
let items = player.inventory.allItems.filter(item => item.item instanceof $EnergyCellBlockItem)
|
|
items.sort((a, b) => {
|
|
/**@type {Internal.EnergyCellBlockItem} */
|
|
let item = a.item
|
|
return item.getAECurrentPower(a) - item.getAECurrentPower(b)
|
|
})
|
|
items.forEach(item => {
|
|
/**@type {Internal.EnergyCellBlockItem} */
|
|
let itemClass = item.item
|
|
if (neededEnergy <= 0 || itemClass.getAECurrentPower(item) <= 0) return
|
|
if (item.count > 1) {
|
|
let copy = item.copyWithCount(1)
|
|
let extracted = itemClass.extractAEPower(copy, neededEnergy, "modulate")
|
|
neededEnergy -= extracted
|
|
player.give(copy)
|
|
item.shrink(1)
|
|
}
|
|
else {
|
|
let extracted = itemClass.extractAEPower(item, neededEnergy, "modulate")
|
|
neededEnergy -= extracted
|
|
}
|
|
})
|
|
if (neededEnergyCopy != 0) {
|
|
let oldAmmoCount = iGun.getCurrentAmmoCount(gun)
|
|
iGun.setCurrentAmmoCount(gun, linear(1 - neededEnergy / neededEnergyCopy, oldAmmoCount, maxAmmo))
|
|
let newAmmoCount = iGun.getCurrentAmmoCount(gun)
|
|
|
|
// 如果成功提取了子弹(填充了弹药),显示状态消息
|
|
if (newAmmoCount > oldAmmoCount) {
|
|
let extractedCount = Math.floor(newAmmoCount - oldAmmoCount)
|
|
let currentAmmo = Math.floor(newAmmoCount)
|
|
let maxCapacity = Math.floor(maxAmmo)
|
|
let message = Component.translate(
|
|
"message.tacz.ammo_extracted_notification",
|
|
Component.literal(extractedCount + "").color(Color.GREEN),
|
|
Component.literal(currentAmmo + " / " + maxCapacity).color(Color.YELLOW)
|
|
)
|
|
player.setStatusMessage(message)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
})
|