Make exopack smelter not start new job when no power is present, and make exopack power changes notify smelters

This commit is contained in:
DBotThePony 2023-07-09 22:57:59 +07:00
parent 5800ddc9ad
commit 2ac990c82d
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 13 additions and 2 deletions

View File

@ -431,6 +431,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
private val cache = RecipeManager.createCheck(RecipeType.SMELTING) private val cache = RecipeManager.createCheck(RecipeType.SMELTING)
override fun computeNextJob(): JobContainer<MachineItemJob> { override fun computeNextJob(): JobContainer<MachineItemJob> {
if (!exoPackEnergy.batteryLevel.isPositive) return JobContainer.noEnergy()
val level = ply.level() as? ServerLevel ?: return JobContainer.failure() val level = ply.level() as? ServerLevel ?: return JobContainer.failure()
val recipe = cache.getRecipeFor(input, level) val recipe = cache.getRecipeFor(input, level)
@ -470,7 +471,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
/** /**
* [IMatteryEnergyStorage] instance, representing Exopack battery charge * [IMatteryEnergyStorage] instance, representing Exopack battery charge
*/ */
val exoPackEnergy = ProfiledEnergyStorage(BatteryBackedEnergyStorage(ply, synchronizer, Decimal.ZERO, ExopackConfig.ENERGY_CAPACITY, false)) val exoPackEnergy = ProfiledEnergyStorage(BatteryBackedEnergyStorage(ply, synchronizer, Decimal.ZERO, ExopackConfig.ENERGY_CAPACITY, false, onChange = { for (v in smelters) v.notify(MachineJobEventLoop.IdleReason.POWER) }))
val exoPackChargeSlots = MatteryContainer(4) val exoPackChargeSlots = MatteryContainer(4)

View File

@ -25,7 +25,8 @@ class BatteryBackedEnergyStorage(
synchronizer: FieldSynchronizer, synchronizer: FieldSynchronizer,
initialCharge: Decimal, initialCharge: Decimal,
maxCharge: Decimal, maxCharge: Decimal,
val isAndroid: Boolean val isAndroid: Boolean,
val onChange: Runnable? = null
) : IMatteryEnergyStorage, INBTSerializable<CompoundTag?>, ContainerSingleItem { ) : IMatteryEnergyStorage, INBTSerializable<CompoundTag?>, ContainerSingleItem {
override val energyFlow: FlowDirection override val energyFlow: FlowDirection
get() = FlowDirection.INPUT get() = FlowDirection.INPUT
@ -41,6 +42,8 @@ class BatteryBackedEnergyStorage(
} else if (ply is ServerPlayer && !isAndroid) { } else if (ply is ServerPlayer && !isAndroid) {
ExopackBatterySlotTrigger.trigger(ply, value) ExopackBatterySlotTrigger.trigger(ply, value)
} }
onChange?.run()
}) })
override fun getItem(slot: Int): ItemStack { override fun getItem(slot: Int): ItemStack {
@ -105,6 +108,7 @@ class BatteryBackedEnergyStorage(
ply.awardStat(StatNames.POWER_CONSUMED, drained.toInt() * 10) ply.awardStat(StatNames.POWER_CONSUMED, drained.toInt() * 10)
} }
onChange?.run()
return drained return drained
} }
} }
@ -119,6 +123,8 @@ class BatteryBackedEnergyStorage(
if (ply is ServerPlayer && isAndroid) { if (ply is ServerPlayer && isAndroid) {
ply.awardStat(StatNames.POWER_CONSUMED, drained.toInt() * 10) ply.awardStat(StatNames.POWER_CONSUMED, drained.toInt() * 10)
} }
onChange?.run()
} }
return drained return drained
@ -137,6 +143,7 @@ class BatteryBackedEnergyStorage(
} }
if (howMuch.isZero) { if (howMuch.isZero) {
onChange?.run()
return received return received
} }
} }
@ -146,6 +153,7 @@ class BatteryBackedEnergyStorage(
if (!simulate) { if (!simulate) {
battery = new battery = new
onChange?.run()
} }
return received return received
@ -167,6 +175,7 @@ class BatteryBackedEnergyStorage(
} }
set(value) { set(value) {
battery = value battery = value
onChange?.run()
} }
override var maxBatteryLevel: Decimal override var maxBatteryLevel: Decimal
@ -185,5 +194,6 @@ class BatteryBackedEnergyStorage(
} }
set(value) { set(value) {
maxBattery = value maxBattery = value
onChange?.run()
} }
} }