添加充电站的物品充电功能

This commit is contained in:
17146 2024-12-07 00:44:32 +08:00
parent b91ed662ab
commit 9112fb8368
3 changed files with 56 additions and 14 deletions

View file

@ -146,16 +146,38 @@ public class ChargingStationBlockEntity extends BlockEntity implements WorldlyCo
int energy = handler.getEnergyStored();
blockEntity.energy = energy;
if (energy > 0) {
List<Entity> 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<Entity> 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);
}
}

View file

@ -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": "SuperbWarfareConfig",
"config.superbwarfare.client.reload": "Reload Config",

View file

@ -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": "换弹配置",