添加充电站的物品充电功能
This commit is contained in:
parent
b91ed662ab
commit
9112fb8368
3 changed files with 56 additions and 14 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "换弹配置",
|
||||
|
|
Loading…
Add table
Reference in a new issue