diff --git a/src/main/java/com/atsuishio/superbwarfare/block/entity/ChargingStationBlockEntity.java b/src/main/java/com/atsuishio/superbwarfare/block/entity/ChargingStationBlockEntity.java index c63a34226..afe65faaf 100644 --- a/src/main/java/com/atsuishio/superbwarfare/block/entity/ChargingStationBlockEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/block/entity/ChargingStationBlockEntity.java @@ -146,16 +146,38 @@ public class ChargingStationBlockEntity extends BlockEntity implements WorldlyCo int energy = handler.getEnergyStored(); blockEntity.energy = energy; if (energy > 0) { - List entities = pLevel.getEntitiesOfClass(Entity.class, new AABB(pPos).inflate(CHARGE_RADIUS)); - entities.forEach(entity -> { - if (entity instanceof IChargeEntity chargeEntity) { - if (handler.getEnergyStored() > 0) { - handler.extractEnergy(Math.min(CHARGE_SPEED, handler.getEnergyStored()), false); - chargeEntity.charge(Math.min(CHARGE_SPEED, handler.getEnergyStored())); - } - } - }); - blockEntity.setChanged(); + blockEntity.chargeEntity(handler); + } + if (handler.getEnergyStored() > 0) { + blockEntity.chargeItemStack(handler); + } + }); + } + + private void chargeEntity(EnergyStorage handler) { + if (this.level == null) return; + + List entities = this.level.getEntitiesOfClass(Entity.class, new AABB(this.getBlockPos()).inflate(CHARGE_RADIUS)); + entities.forEach(entity -> { + if (entity instanceof IChargeEntity chargeEntity) { + if (handler.getEnergyStored() > 0) { + handler.extractEnergy(Math.min(CHARGE_SPEED, handler.getEnergyStored()), false); + chargeEntity.charge(Math.min(CHARGE_SPEED, handler.getEnergyStored())); + } + } + }); + this.setChanged(); + } + + private void chargeItemStack(EnergyStorage handler) { + ItemStack stack = this.getItem(SLOT_CHARGE); + if (stack.isEmpty()) return; + + stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(consumer -> { + if (consumer.getEnergyStored() < consumer.getMaxEnergyStored()) { + consumer.receiveEnergy(Math.min(CHARGE_SPEED, handler.getEnergyStored()), false); + handler.extractEnergy(Math.min(CHARGE_SPEED, handler.getEnergyStored()), false); + this.setChanged(); } }); } @@ -287,6 +309,28 @@ public class ChargingStationBlockEntity extends BlockEntity implements WorldlyCo if (cap == ForgeCapabilities.ENERGY) { return energyHandler.cast(); } + if (!this.remove && side != null && cap == ForgeCapabilities.ITEM_HANDLER) { + if (side == Direction.UP) { + return itemHandlers[0].cast(); + } else if (side == Direction.DOWN) { + return itemHandlers[1].cast(); + } else { + return itemHandlers[2].cast(); + } + } return super.getCapability(cap, side); } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + for (LazyOptional itemHandler : itemHandlers) itemHandler.invalidate(); + energyHandler.invalidate(); + } + + @Override + public void reviveCaps() { + super.reviveCaps(); + this.itemHandlers = SidedInvWrapper.create(this, Direction.UP, Direction.DOWN, Direction.NORTH); + } } diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 143f9815d..d0e3b6c26 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -335,8 +335,6 @@ "death.attack.laser_headshot.entity": "%1$s被%2$s用激光射穿了脑袋", "death.attack.laser_headshot.item": "%1$s的脑子被%2$s用%3$s发射的激光洞穿了", - "gui.superbwarfare.mortar_gui.button_set": "Confirm", - "entity.superbwarfare.projectile": "Bullet", "entity.superbwarfare.projectile_mortar_shell": "Mortar Shell", "entity.superbwarfare.projectile_gun_grenade": "Gun Grenade", @@ -410,6 +408,7 @@ "entity.minecraft.villager.superbwarfare.armory": "Armory", "container.superbwarfare.reforging_table": "Gun Reforge Table", + "container.superbwarfare.charging_station": "Charging Station", "config.superbwarfare.title": "SuperbWarfare:Config", "config.superbwarfare.client.reload": "Reload Config", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 314159e20..4d547e083 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -335,8 +335,6 @@ "death.attack.laser_headshot.entity": "%1$s被%2$s用激光射穿了脑袋", "death.attack.laser_headshot.item": "%1$s的脑子被%2$s用%3$s发射的激光洞穿了", - "gui.superbwarfare.mortar_gui.button_set": "确认", - "entity.superbwarfare.projectile": "子弹", "entity.superbwarfare.projectile_mortar_shell": "迫击炮弹", "entity.superbwarfare.projectile_gun_grenade": "枪榴弹", @@ -410,6 +408,7 @@ "entity.minecraft.villager.superbwarfare.armory": "军械师", "container.superbwarfare.reforging_table": "枪械重铸台", + "container.superbwarfare.charging_station": "充电站", "config.superbwarfare.title": "卓越前线", "config.superbwarfare.client.reload": "换弹配置",