Matter decomposer rebalanced values

This commit is contained in:
DBotThePony 2023-07-25 19:39:10 +07:00
parent 325ee5da2e
commit c226a988c3
Signed by: DBot
GPG Key ID: DCC23B5715498507
16 changed files with 137 additions and 166 deletions

View File

@ -10,7 +10,7 @@ import net.minecraft.world.level.Level
import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.block.state.BlockState
import net.minecraftforge.common.ForgeConfigSpec import net.minecraftforge.common.ForgeConfigSpec
import ru.dbotthepony.mc.otm.config.ConciseBalanceValues import ru.dbotthepony.mc.otm.config.EnergyBalanceValues
import ru.dbotthepony.mc.otm.block.matter.MatterBottlerBlock import ru.dbotthepony.mc.otm.block.matter.MatterBottlerBlock
import ru.dbotthepony.mc.otm.block.entity.MatteryPoweredBlockEntity import ru.dbotthepony.mc.otm.block.entity.MatteryPoweredBlockEntity
import ru.dbotthepony.mc.otm.block.entity.WorkerState import ru.dbotthepony.mc.otm.block.entity.WorkerState
@ -33,7 +33,6 @@ import ru.dbotthepony.mc.otm.core.util.WriteOnce
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue
import ru.dbotthepony.mc.otm.core.math.defineDecimal import ru.dbotthepony.mc.otm.core.math.defineDecimal
import ru.dbotthepony.mc.otm.graph.matter.MatterNode
import ru.dbotthepony.mc.otm.graph.matter.SimpleMatterNode import ru.dbotthepony.mc.otm.graph.matter.SimpleMatterNode
class MatterBottlerBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : class MatterBottlerBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
@ -294,7 +293,7 @@ class MatterBottlerBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
private var _EXTRACTION_TICKS: DecimalConfigValue by WriteOnce() private var _EXTRACTION_TICKS: DecimalConfigValue by WriteOnce()
private var _CAPACITY: DecimalConfigValue by WriteOnce() private var _CAPACITY: DecimalConfigValue by WriteOnce()
var ENERGY_VALUES: ConciseBalanceValues by WriteOnce() var ENERGY_VALUES: EnergyBalanceValues by WriteOnce()
private set private set
fun registerConfig(builder: ForgeConfigSpec.Builder) { fun registerConfig(builder: ForgeConfigSpec.Builder) {

View File

@ -3,7 +3,6 @@ package ru.dbotthepony.mc.otm.block.entity.matter
import com.mojang.serialization.Codec import com.mojang.serialization.Codec
import com.mojang.serialization.codecs.RecordCodecBuilder import com.mojang.serialization.codecs.RecordCodecBuilder
import net.minecraft.core.BlockPos import net.minecraft.core.BlockPos
import net.minecraft.nbt.CompoundTag
import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Inventory
import net.minecraft.world.entity.player.Player import net.minecraft.world.entity.player.Player
import net.minecraft.world.inventory.AbstractContainerMenu import net.minecraft.world.inventory.AbstractContainerMenu
@ -17,20 +16,20 @@ import ru.dbotthepony.mc.otm.block.entity.Job
import ru.dbotthepony.mc.otm.block.entity.MatteryWorkerBlockEntity import ru.dbotthepony.mc.otm.block.entity.MatteryWorkerBlockEntity
import ru.dbotthepony.mc.otm.capability.FlowDirection import ru.dbotthepony.mc.otm.capability.FlowDirection
import ru.dbotthepony.mc.otm.capability.MatteryCapability import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.capability.UpgradeType
import ru.dbotthepony.mc.otm.capability.energy.BlockEnergyStorageImpl import ru.dbotthepony.mc.otm.capability.energy.BlockEnergyStorageImpl
import ru.dbotthepony.mc.otm.capability.energy.ProfiledEnergyStorage import ru.dbotthepony.mc.otm.capability.energy.ProfiledEnergyStorage
import ru.dbotthepony.mc.otm.capability.energy.WorkerEnergyStorage import ru.dbotthepony.mc.otm.capability.energy.WorkerEnergyStorage
import ru.dbotthepony.mc.otm.capability.matter.MatterStorageImpl import ru.dbotthepony.mc.otm.capability.matter.MatterStorageImpl
import ru.dbotthepony.mc.otm.capability.matter.ProfiledMatterStorage import ru.dbotthepony.mc.otm.capability.matter.ProfiledMatterStorage
import ru.dbotthepony.mc.otm.config.ConciseBalanceValues import ru.dbotthepony.mc.otm.config.EnergyBalanceValues
import ru.dbotthepony.mc.otm.config.MachinesConfig
import ru.dbotthepony.mc.otm.container.HandlerFilter import ru.dbotthepony.mc.otm.container.HandlerFilter
import ru.dbotthepony.mc.otm.container.MatteryContainer import ru.dbotthepony.mc.otm.container.MatteryContainer
import ru.dbotthepony.mc.otm.container.UpgradeContainer
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue
import ru.dbotthepony.mc.otm.core.math.defineDecimal import ru.dbotthepony.mc.otm.core.math.defineDecimal
import ru.dbotthepony.mc.otm.core.math.getDecimal
import ru.dbotthepony.mc.otm.core.math.set
import ru.dbotthepony.mc.otm.core.nbt.set
import ru.dbotthepony.mc.otm.core.util.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
import ru.dbotthepony.mc.otm.data.DecimalCodec import ru.dbotthepony.mc.otm.data.DecimalCodec
import ru.dbotthepony.mc.otm.data.minRange import ru.dbotthepony.mc.otm.data.minRange
@ -103,7 +102,7 @@ class MatterDecomposerBlockEntity(pos: BlockPos, state: BlockState)
val toDust: Boolean, val toDust: Boolean,
var matterValue: Decimal, var matterValue: Decimal,
ticks: Double, ticks: Double,
) : Job(ticks, BASE_CONSUMPTION) { ) : Job(ticks, MachinesConfig.MATTER_DECOMPOSER.powerConsumption) {
companion object { companion object {
val CODEC: Codec<DecomposerJob> by lazy { val CODEC: Codec<DecomposerJob> by lazy {
RecordCodecBuilder.create { RecordCodecBuilder.create {
@ -117,14 +116,15 @@ class MatterDecomposerBlockEntity(pos: BlockPos, state: BlockState)
} }
} }
val energy = ProfiledEnergyStorage(WorkerEnergyStorage(this, ENERGY_VALUES)) override val upgrades = UpgradeContainer(this::setChangedLight, 4, UpgradeType.REPLICATOR)
val energy = ProfiledEnergyStorage(WorkerEnergyStorage(this, upgrades.transform(MachinesConfig.MATTER_DECOMPOSER)))
val energyConfig = ConfigurableEnergy(energy) val energyConfig = ConfigurableEnergy(energy)
init { init {
savetables.stateful(::energy, ENERGY_KEY) savetables.stateful(::energy, ENERGY_KEY)
} }
val matter = ProfiledMatterStorage(MatterStorageImpl(::setChangedLight, FlowDirection.OUTPUT, ::CAPACITY)) val matter = ProfiledMatterStorage(MatterStorageImpl(::setChangedLight, FlowDirection.OUTPUT, upgrades.matterCapacity(MachinesConfig.MATTER_DECOMPOSER::matterCapacity)))
val matterNode = SimpleMatterNode(matter = matter) val matterNode = SimpleMatterNode(matter = matter)
init { init {
@ -185,7 +185,13 @@ class MatterDecomposerBlockEntity(pos: BlockPos, state: BlockState)
val matter = MatterManager.get(copy) val matter = MatterManager.get(copy)
stack.count-- stack.count--
return JobContainer.success(DecomposerJob((level?.random?.nextDouble() ?: 1.0) <= 0.2, matter.matter, matter.complexity)) return JobContainer.success(
DecomposerJob(
(level?.random?.nextDouble() ?: 1.0) <= 0.2 * upgrades.failureMultiplier,
matter.matter,
matter.complexity * MachinesConfig.MATTER_DECOMPOSER.workTimeMultiplier
)
)
} }
} }
@ -205,36 +211,8 @@ class MatterDecomposerBlockEntity(pos: BlockPos, state: BlockState)
override fun tick() { override fun tick() {
super.tick() super.tick()
val grid = matterNode.graph as MatterGraph? ?: return
if (!matter.storedMatter.isZero) { if (!matter.storedMatter.isZero) {
val diff = matter.extractMatter(matter.storedMatter, true) matter.extractMatter(matterNode.graph.receiveMatter(matter.storedMatter, false), false)
val diff2 = grid.receiveMatter(diff, true)
matter.extractMatter(diff2, false)
grid.receiveMatter(diff2, false)
}
}
companion object {
val CAPACITY get() = _CAPACITY.get()
val BASE_CONSUMPTION get() = _BASE_CONSUMPTION.get()
private var _CAPACITY: DecimalConfigValue by WriteOnce()
private var _BASE_CONSUMPTION: DecimalConfigValue by WriteOnce()
var ENERGY_VALUES: ConciseBalanceValues by WriteOnce()
private set
fun registerConfig(builder: ForgeConfigSpec.Builder) {
builder.push(MNames.MATTER_DECOMPOSER)
ENERGY_VALUES = BlockEnergyStorageImpl.makeConfigEntry(builder, capacity = Decimal(400_000), throughput = Decimal(2_000))
_CAPACITY = builder.defineDecimal("matterCapacity", Decimal(500), Decimal.ONE_TENTH)
_BASE_CONSUMPTION = builder.defineDecimal("baseConsumption", Decimal(240), Decimal.ONE)
builder.pop()
} }
} }
} }

View File

@ -24,7 +24,7 @@ import ru.dbotthepony.mc.otm.capability.matter.IMatterStorage
import ru.dbotthepony.mc.otm.capability.matter.IPatternState import ru.dbotthepony.mc.otm.capability.matter.IPatternState
import ru.dbotthepony.mc.otm.capability.matter.MatterStorageImpl import ru.dbotthepony.mc.otm.capability.matter.MatterStorageImpl
import ru.dbotthepony.mc.otm.capability.matter.ProfiledMatterStorage import ru.dbotthepony.mc.otm.capability.matter.ProfiledMatterStorage
import ru.dbotthepony.mc.otm.config.ConciseBalanceValues import ru.dbotthepony.mc.otm.config.EnergyBalanceValues
import ru.dbotthepony.mc.otm.container.HandlerFilter import ru.dbotthepony.mc.otm.container.HandlerFilter
import ru.dbotthepony.mc.otm.container.MatteryContainer import ru.dbotthepony.mc.otm.container.MatteryContainer
import ru.dbotthepony.mc.otm.container.UpgradeContainer import ru.dbotthepony.mc.otm.container.UpgradeContainer
@ -33,7 +33,6 @@ import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue
import ru.dbotthepony.mc.otm.core.math.defineDecimal import ru.dbotthepony.mc.otm.core.math.defineDecimal
import ru.dbotthepony.mc.otm.core.registryName import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.core.util.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
import ru.dbotthepony.mc.otm.graph.matter.MatterGraph
import ru.dbotthepony.mc.otm.graph.matter.MatterNode import ru.dbotthepony.mc.otm.graph.matter.MatterNode
import ru.dbotthepony.mc.otm.matter.IMatterValue import ru.dbotthepony.mc.otm.matter.IMatterValue
import ru.dbotthepony.mc.otm.matter.MatterManager import ru.dbotthepony.mc.otm.matter.MatterManager
@ -308,7 +307,7 @@ class MatterReconstructorBlockEntity(blockPos: BlockPos, blockState: BlockState)
private var _ONLY_ANVIL: ConfigValue<Boolean> by WriteOnce() private var _ONLY_ANVIL: ConfigValue<Boolean> by WriteOnce()
private var _ALLOW_TO_SKIP_ANVIL: ConfigValue<Boolean> by WriteOnce() private var _ALLOW_TO_SKIP_ANVIL: ConfigValue<Boolean> by WriteOnce()
var ENERGY_VALUES: ConciseBalanceValues by WriteOnce() var ENERGY_VALUES: EnergyBalanceValues by WriteOnce()
private set private set
fun registerConfig(builder: ForgeConfigSpec.Builder) { fun registerConfig(builder: ForgeConfigSpec.Builder) {

View File

@ -22,7 +22,7 @@ import ru.dbotthepony.mc.otm.capability.energy.BlockEnergyStorageImpl
import ru.dbotthepony.mc.otm.capability.energy.ProfiledEnergyStorage import ru.dbotthepony.mc.otm.capability.energy.ProfiledEnergyStorage
import ru.dbotthepony.mc.otm.capability.energy.WorkerEnergyStorage import ru.dbotthepony.mc.otm.capability.energy.WorkerEnergyStorage
import ru.dbotthepony.mc.otm.capability.matter.* import ru.dbotthepony.mc.otm.capability.matter.*
import ru.dbotthepony.mc.otm.config.ConciseBalanceValues import ru.dbotthepony.mc.otm.config.EnergyBalanceValues
import ru.dbotthepony.mc.otm.container.HandlerFilter import ru.dbotthepony.mc.otm.container.HandlerFilter
import ru.dbotthepony.mc.otm.container.MatteryContainer import ru.dbotthepony.mc.otm.container.MatteryContainer
import ru.dbotthepony.mc.otm.container.UpgradeContainer import ru.dbotthepony.mc.otm.container.UpgradeContainer
@ -213,7 +213,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
private var _DRAIN_MULT: DecimalConfigValue by WriteOnce() private var _DRAIN_MULT: DecimalConfigValue by WriteOnce()
private var _MATTER_CAPACITY: DecimalConfigValue by WriteOnce() private var _MATTER_CAPACITY: DecimalConfigValue by WriteOnce()
var ENERGY_VALUES: ConciseBalanceValues by WriteOnce() var ENERGY_VALUES: EnergyBalanceValues by WriteOnce()
private set private set
fun registerConfig(builder: ForgeConfigSpec.Builder) { fun registerConfig(builder: ForgeConfigSpec.Builder) {

View File

@ -12,7 +12,7 @@ import ru.dbotthepony.mc.otm.block.entity.JobContainer
import ru.dbotthepony.mc.otm.block.entity.JobStatus import ru.dbotthepony.mc.otm.block.entity.JobStatus
import ru.dbotthepony.mc.otm.block.entity.ItemJob import ru.dbotthepony.mc.otm.block.entity.ItemJob
import ru.dbotthepony.mc.otm.block.entity.MachineJobEventLoop import ru.dbotthepony.mc.otm.block.entity.MachineJobEventLoop
import ru.dbotthepony.mc.otm.config.ConciseBalanceValues import ru.dbotthepony.mc.otm.config.EnergyBalanceValues
import ru.dbotthepony.mc.otm.block.entity.MatteryWorkerBlockEntity import ru.dbotthepony.mc.otm.block.entity.MatteryWorkerBlockEntity
import ru.dbotthepony.mc.otm.capability.energy.BlockEnergyStorageImpl import ru.dbotthepony.mc.otm.capability.energy.BlockEnergyStorageImpl
import ru.dbotthepony.mc.otm.capability.MatteryCapability import ru.dbotthepony.mc.otm.capability.MatteryCapability
@ -187,7 +187,7 @@ class MatterScannerBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
private val BASE_CONSUMPTION get() = _BASE_CONSUMPTION.get() private val BASE_CONSUMPTION get() = _BASE_CONSUMPTION.get()
private var _BASE_CONSUMPTION: DecimalConfigValue by WriteOnce() private var _BASE_CONSUMPTION: DecimalConfigValue by WriteOnce()
var ENERGY_VALUES: ConciseBalanceValues by WriteOnce() var ENERGY_VALUES: EnergyBalanceValues by WriteOnce()
private set private set
fun registerConfig(builder: ForgeConfigSpec.Builder) { fun registerConfig(builder: ForgeConfigSpec.Builder) {

View File

@ -21,7 +21,7 @@ import ru.dbotthepony.mc.otm.block.entity.MatteryPoweredBlockEntity
import ru.dbotthepony.mc.otm.capability.MatteryCapability import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.capability.energy.WorkerEnergyStorage import ru.dbotthepony.mc.otm.capability.energy.WorkerEnergyStorage
import ru.dbotthepony.mc.otm.capability.energy.extractEnergyExact import ru.dbotthepony.mc.otm.capability.energy.extractEnergyExact
import ru.dbotthepony.mc.otm.config.ConciseBalanceValues import ru.dbotthepony.mc.otm.config.EnergyBalanceValues
import ru.dbotthepony.mc.otm.config.MachinesConfig import ru.dbotthepony.mc.otm.config.MachinesConfig
import ru.dbotthepony.mc.otm.container.ItemFilter import ru.dbotthepony.mc.otm.container.ItemFilter
import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.core.TranslatableComponent
@ -48,7 +48,7 @@ abstract class AbstractStorageImportExport<T>(
blockType: BlockEntityType<*>, blockType: BlockEntityType<*>,
blockPos: BlockPos, blockPos: BlockPos,
blockState: BlockState, blockState: BlockState,
energyValues: ConciseBalanceValues = MachinesConfig.STORAGE_INTERFACES energyValues: EnergyBalanceValues = MachinesConfig.STORAGE_INTERFACES
) : MatteryPoweredBlockEntity(blockType, blockPos, blockState) { ) : MatteryPoweredBlockEntity(blockType, blockPos, blockState) {
val energy = WorkerEnergyStorage(::setChangedLight, energyValues) val energy = WorkerEnergyStorage(::setChangedLight, energyValues)

View File

@ -1,7 +1,6 @@
package ru.dbotthepony.mc.otm.block.entity.storage package ru.dbotthepony.mc.otm.block.entity.storage
import net.minecraft.core.BlockPos import net.minecraft.core.BlockPos
import net.minecraft.server.level.ServerLevel
import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Inventory
import net.minecraft.world.entity.player.Player import net.minecraft.world.entity.player.Player
import net.minecraft.world.inventory.AbstractContainerMenu import net.minecraft.world.inventory.AbstractContainerMenu
@ -14,7 +13,6 @@ import ru.dbotthepony.mc.otm.capability.energy.transferChecked
import ru.dbotthepony.mc.otm.config.MachinesConfig import ru.dbotthepony.mc.otm.config.MachinesConfig
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.graph.storage.StorageNode import ru.dbotthepony.mc.otm.graph.storage.StorageNode
import ru.dbotthepony.mc.otm.graph.storage.StorageGraph
import ru.dbotthepony.mc.otm.menu.storage.StoragePowerSupplierMenu import ru.dbotthepony.mc.otm.menu.storage.StoragePowerSupplierMenu
import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.registry.MBlockEntities
@ -65,7 +63,7 @@ class StoragePowerSupplierBlockEntity(blockPos: BlockPos, blockState: BlockState
var demand = Decimal.ZERO var demand = Decimal.ZERO
var i = 0 var i = 0
val available = energy.batteryLevel.coerceAtMost(MachinesConfig.STORAGE_POWER_SUPPLIER.throughput) val available = energy.batteryLevel.coerceAtMost(MachinesConfig.STORAGE_POWER_SUPPLIER.energyThroughput)
for (demanding in cell.graph.powerDemandingNodes) { for (demanding in cell.graph.powerDemandingNodes) {
val received = demanding.receiveEnergy(available, true) val received = demanding.receiveEnergy(available, true)

View File

@ -14,12 +14,11 @@ import net.minecraftforge.common.ForgeConfigSpec
import net.minecraftforge.common.util.INBTSerializable import net.minecraftforge.common.util.INBTSerializable
import net.minecraftforge.common.util.LazyOptional import net.minecraftforge.common.util.LazyOptional
import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity
import ru.dbotthepony.mc.otm.config.ConciseBalanceValues import ru.dbotthepony.mc.otm.config.EnergyBalanceValues
import ru.dbotthepony.mc.otm.config.VerboseBalanceValues import ru.dbotthepony.mc.otm.config.VerboseEnergyBalanceValues
import ru.dbotthepony.mc.otm.capability.FlowDirection import ru.dbotthepony.mc.otm.capability.FlowDirection
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.math.defineDecimal import ru.dbotthepony.mc.otm.core.math.defineDecimal
import ru.dbotthepony.mc.otm.core.nbt.map
import ru.dbotthepony.mc.otm.core.nbt.mapPresent import ru.dbotthepony.mc.otm.core.nbt.mapPresent
import ru.dbotthepony.mc.otm.core.nbt.set import ru.dbotthepony.mc.otm.core.nbt.set
@ -166,13 +165,13 @@ sealed class BlockEnergyStorageImpl(
const val MAX_INPUT_KEY = "max_input" const val MAX_INPUT_KEY = "max_input"
const val MAX_OUTPUT_KEY = "max_output" const val MAX_OUTPUT_KEY = "max_output"
fun makeConfigEntry(builder: ForgeConfigSpec.Builder, name: String? = null, capacity: Decimal = DEFAULT_MAX_CAPACITY, throughput: Decimal = DEFAULT_MAX_IO, configurator: ForgeConfigSpec.Builder.() -> Unit = {}): ConciseBalanceValues { fun makeConfigEntry(builder: ForgeConfigSpec.Builder, name: String? = null, capacity: Decimal = DEFAULT_MAX_CAPACITY, throughput: Decimal = DEFAULT_MAX_IO, configurator: ForgeConfigSpec.Builder.() -> Unit = {}): EnergyBalanceValues {
if (name != null) if (name != null)
builder.push(name) builder.push(name)
val obj = object : ConciseBalanceValues { val obj = object : EnergyBalanceValues {
override val capacity: Decimal by builder.defineDecimal("capacity", capacity, Decimal.ONE) override val energyCapacity: Decimal by builder.defineDecimal("capacity", capacity, Decimal.ONE)
override val throughput: Decimal by builder.defineDecimal("throughput", throughput, Decimal.ONE) override val energyThroughput: Decimal by builder.defineDecimal("throughput", throughput, Decimal.ONE)
} }
configurator.invoke(builder) configurator.invoke(builder)
@ -199,23 +198,23 @@ open class WorkerEnergyStorage(
constructor( constructor(
listener: () -> Unit, listener: () -> Unit,
values: ConciseBalanceValues values: EnergyBalanceValues
) : this(listener, values::capacity, values::throughput, values::throughput) ) : this(listener, values::energyCapacity, values::energyThroughput, values::energyThroughput)
constructor( constructor(
listener: BlockEntity, listener: BlockEntity,
values: ConciseBalanceValues values: EnergyBalanceValues
) : this(listener::setChanged, values::capacity, values::throughput, values::throughput) ) : this(listener::setChanged, values::energyCapacity, values::energyThroughput, values::energyThroughput)
constructor( constructor(
listener: () -> Unit, listener: () -> Unit,
values: VerboseBalanceValues values: VerboseEnergyBalanceValues
) : this(listener, values::capacity, values::receive, values::extract) ) : this(listener, values::energyCapacity, values::maxEnergyReceive, values::maxEnergyExtract)
constructor( constructor(
listener: BlockEntity, listener: BlockEntity,
values: VerboseBalanceValues values: VerboseEnergyBalanceValues
) : this(listener::setChanged, values::capacity, values::receive, values::extract) ) : this(listener::setChanged, values::energyCapacity, values::maxEnergyReceive, values::maxEnergyExtract)
constructor( constructor(
listener: BlockEntity, listener: BlockEntity,
@ -251,23 +250,23 @@ open class GeneratorEnergyStorage(
constructor( constructor(
listener: () -> Unit, listener: () -> Unit,
values: ConciseBalanceValues values: EnergyBalanceValues
) : this(listener, values::capacity, values::throughput, values::throughput) ) : this(listener, values::energyCapacity, values::energyThroughput, values::energyThroughput)
constructor( constructor(
listener: BlockEntity, listener: BlockEntity,
values: ConciseBalanceValues values: EnergyBalanceValues
) : this(listener::setChanged, values::capacity, values::throughput, values::throughput) ) : this(listener::setChanged, values::energyCapacity, values::energyThroughput, values::energyThroughput)
constructor( constructor(
listener: () -> Unit, listener: () -> Unit,
values: VerboseBalanceValues values: VerboseEnergyBalanceValues
) : this(listener, values::capacity, values::receive, values::extract) ) : this(listener, values::energyCapacity, values::maxEnergyReceive, values::maxEnergyExtract)
constructor( constructor(
listener: BlockEntity, listener: BlockEntity,
values: VerboseBalanceValues values: VerboseEnergyBalanceValues
) : this(listener::setChanged, values::capacity, values::receive, values::extract) ) : this(listener::setChanged, values::energyCapacity, values::maxEnergyReceive, values::maxEnergyExtract)
constructor( constructor(
listener: BlockEntity, listener: BlockEntity,
@ -303,23 +302,23 @@ open class CapacitorEnergyStorage(
constructor( constructor(
listener: () -> Unit, listener: () -> Unit,
values: ConciseBalanceValues values: EnergyBalanceValues
) : this(listener, values::capacity, values::throughput, values::throughput) ) : this(listener, values::energyCapacity, values::energyThroughput, values::energyThroughput)
constructor( constructor(
listener: BlockEntity, listener: BlockEntity,
values: ConciseBalanceValues values: EnergyBalanceValues
) : this(listener::setChanged, values::capacity, values::throughput, values::throughput) ) : this(listener::setChanged, values::energyCapacity, values::energyThroughput, values::energyThroughput)
constructor( constructor(
listener: () -> Unit, listener: () -> Unit,
values: VerboseBalanceValues values: VerboseEnergyBalanceValues
) : this(listener, values::capacity, values::receive, values::extract) ) : this(listener, values::energyCapacity, values::maxEnergyReceive, values::maxEnergyExtract)
constructor( constructor(
listener: BlockEntity, listener: BlockEntity,
values: VerboseBalanceValues values: VerboseEnergyBalanceValues
) : this(listener::setChanged, values::capacity, values::receive, values::extract) ) : this(listener::setChanged, values::energyCapacity, values::maxEnergyReceive, values::maxEnergyExtract)
constructor( constructor(
listener: BlockEntity, listener: BlockEntity,

View File

@ -2,9 +2,8 @@ package ru.dbotthepony.mc.otm.capability.matter
import net.minecraft.nbt.CompoundTag import net.minecraft.nbt.CompoundTag
import net.minecraftforge.common.util.INBTSerializable import net.minecraftforge.common.util.INBTSerializable
import net.minecraftforge.common.util.LazyOptional import ru.dbotthepony.mc.otm.config.EnergyBalanceValues
import ru.dbotthepony.mc.otm.config.ConciseBalanceValues import ru.dbotthepony.mc.otm.config.VerboseEnergyBalanceValues
import ru.dbotthepony.mc.otm.config.VerboseBalanceValues
import ru.dbotthepony.mc.otm.capability.FlowDirection import ru.dbotthepony.mc.otm.capability.FlowDirection
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.nbt.set import ru.dbotthepony.mc.otm.core.nbt.set
@ -27,14 +26,14 @@ open class MatterStorageImpl @JvmOverloads constructor(
constructor( constructor(
listener: Runnable?, listener: Runnable?,
direction: FlowDirection, direction: FlowDirection,
values: ConciseBalanceValues values: EnergyBalanceValues
) : this(listener, direction, values::capacity, values::throughput, values::throughput) ) : this(listener, direction, values::energyCapacity, values::energyThroughput, values::energyThroughput)
constructor( constructor(
listener: Runnable?, listener: Runnable?,
direction: FlowDirection, direction: FlowDirection,
values: VerboseBalanceValues values: VerboseEnergyBalanceValues
) : this(listener, direction, values::capacity, values::receive, values::extract) ) : this(listener, direction, values::energyCapacity, values::maxEnergyReceive, values::maxEnergyExtract)
val maxReceive get() = maxReceiveSupplier.invoke() val maxReceive get() = maxReceiveSupplier.invoke()
val maxExtract get() = maxExtractSupplier.invoke() val maxExtract get() = maxExtractSupplier.invoke()

View File

@ -15,27 +15,13 @@ abstract class AbstractConfig(private val configName: String, private val type:
protected val builder = ForgeConfigSpec.Builder() protected val builder = ForgeConfigSpec.Builder()
private var registered = false private var registered = false
fun verboseValues(name: String, storage: Decimal, receive: Decimal, extract: Decimal = receive): VerboseBalanceValues {
builder.push(name)
val obj = object : VerboseBalanceValues {
override val capacity: Decimal by builder.defineDecimal("capacity", storage, minimum = Decimal.ONE)
override val receive: Decimal by builder.defineDecimal("receive", receive, minimum = Decimal.ONE)
override val extract: Decimal by builder.defineDecimal("extract", extract, minimum = Decimal.ONE)
}
builder.pop()
return obj
}
fun batteryValues(name: String, storage: Decimal, receive: Decimal, extract: Decimal = receive, initialBatteryLevel: Decimal = Decimal.ZERO): BatteryBalanceValues { fun batteryValues(name: String, storage: Decimal, receive: Decimal, extract: Decimal = receive, initialBatteryLevel: Decimal = Decimal.ZERO): BatteryBalanceValues {
builder.push(name) builder.push(name)
val obj = object : BatteryBalanceValues { val obj = object : BatteryBalanceValues {
override val capacity: Decimal by builder.defineDecimal("capacity", storage, minimum = Decimal.ONE) override val energyCapacity: Decimal by builder.defineDecimal("capacity", storage, minimum = Decimal.ONE)
override val receive: Decimal by builder.defineDecimal("receive", receive, minimum = Decimal.ONE) override val maxEnergyReceive: Decimal by builder.defineDecimal("receive", receive, minimum = Decimal.ONE)
override val extract: Decimal by builder.defineDecimal("extract", extract, minimum = Decimal.ONE) override val maxEnergyExtract: Decimal by builder.defineDecimal("extract", extract, minimum = Decimal.ONE)
override val initialBatteryLevel: Decimal by builder.defineDecimal("initialBatteryLevel", initialBatteryLevel, minimum = Decimal.ZERO) override val initialBatteryLevel: Decimal by builder.defineDecimal("initialBatteryLevel", initialBatteryLevel, minimum = Decimal.ZERO)
} }
@ -44,12 +30,12 @@ abstract class AbstractConfig(private val configName: String, private val type:
return obj return obj
} }
fun conciseValues(name: String, storage: Decimal, throughput: Decimal, configurator: ForgeConfigSpec.Builder.() -> Unit = {}): ConciseBalanceValues { fun conciseValues(name: String, storage: Decimal, throughput: Decimal, configurator: ForgeConfigSpec.Builder.() -> Unit = {}): EnergyBalanceValues {
builder.push(name) builder.push(name)
val obj = object : ConciseBalanceValues { val obj = object : EnergyBalanceValues {
override val capacity: Decimal by builder.defineDecimal("capacity", storage, minimum = Decimal.ONE) override val energyCapacity: Decimal by builder.defineDecimal("capacity", storage, minimum = Decimal.ONE)
override val throughput: Decimal by builder.defineDecimal("throughput", throughput, minimum = Decimal.ONE) override val energyThroughput: Decimal by builder.defineDecimal("throughput", throughput, minimum = Decimal.ONE)
} }
configurator.invoke(builder) configurator.invoke(builder)
@ -58,13 +44,22 @@ abstract class AbstractConfig(private val configName: String, private val type:
return obj return obj
} }
fun workerValues(name: String, storage: Decimal, throughput: Decimal, workTimeMultiplier: Double? = 1.0, powerConsumption: Decimal, configurator: ForgeConfigSpec.Builder.() -> Unit = {}): WorkerBalanceValues { fun workerValues(
name: String,
energyStorage: Decimal,
energyThroughput: Decimal,
workTimeMultiplier: Double? = 1.0,
powerConsumption: Decimal,
matterCapacity: Decimal? = null,
configurator: ForgeConfigSpec.Builder.() -> Unit = {}
): WorkerBalanceValues {
builder.push(name) builder.push(name)
val obj = object : WorkerBalanceValues { val obj = object : WorkerBalanceValues {
override val capacity: Decimal by builder.defineDecimal("capacity", storage, minimum = Decimal.ONE) override val energyCapacity: Decimal by builder.defineDecimal("capacity", energyStorage, minimum = Decimal.ONE)
override val throughput: Decimal by builder.defineDecimal("throughput", throughput, minimum = Decimal.ONE) override val energyThroughput: Decimal by builder.defineDecimal("throughput", energyThroughput, minimum = Decimal.ONE)
override val powerConsumption: Decimal by builder.defineDecimal("powerConsumption", powerConsumption, minimum = Decimal.ONE) override val powerConsumption: Decimal by builder.defineDecimal("powerConsumption", powerConsumption, minimum = Decimal.ONE)
override val matterCapacity: Decimal by (if (matterCapacity == null) GetterSetter.box(Decimal.ZERO) else builder.defineDecimal("matterCapacity", matterCapacity, minimum = Decimal.ONE))
override val workTimeMultiplier: Double by (if (workTimeMultiplier == null) GetterSetter.box(1.0) else builder.defineInRange("workTimeMultiplier", workTimeMultiplier, 0.0)) override val workTimeMultiplier: Double by (if (workTimeMultiplier == null) GetterSetter.box(1.0) else builder.defineInRange("workTimeMultiplier", workTimeMultiplier, 0.0))
} }

View File

@ -2,22 +2,23 @@ package ru.dbotthepony.mc.otm.config
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
interface ConciseBalanceValues { interface EnergyBalanceValues {
val capacity: Decimal val energyCapacity: Decimal
val throughput: Decimal val energyThroughput: Decimal
} }
interface WorkerBalanceValues : ConciseBalanceValues { interface WorkerBalanceValues : EnergyBalanceValues {
val workTimeMultiplier: Double val workTimeMultiplier: Double
val powerConsumption: Decimal val powerConsumption: Decimal
val matterCapacity: Decimal
} }
interface BatteryBalanceValues : VerboseBalanceValues { interface VerboseEnergyBalanceValues {
val energyCapacity: Decimal
val maxEnergyReceive: Decimal
val maxEnergyExtract: Decimal
}
interface BatteryBalanceValues : VerboseEnergyBalanceValues {
val initialBatteryLevel: Decimal val initialBatteryLevel: Decimal
} }
interface VerboseBalanceValues {
val capacity: Decimal
val receive: Decimal
val extract: Decimal
}

View File

@ -1,10 +1,8 @@
package ru.dbotthepony.mc.otm.config package ru.dbotthepony.mc.otm.config
import net.minecraftforge.common.ForgeConfigSpec.ConfigValue
import ru.dbotthepony.mc.otm.block.entity.matter.MatterReconstructorBlockEntity import ru.dbotthepony.mc.otm.block.entity.matter.MatterReconstructorBlockEntity
import ru.dbotthepony.mc.otm.block.entity.matter.MatterBottlerBlockEntity import ru.dbotthepony.mc.otm.block.entity.matter.MatterBottlerBlockEntity
import ru.dbotthepony.mc.otm.block.entity.matter.MatterDecomposerBlockEntity import ru.dbotthepony.mc.otm.block.entity.matter.MatterDecomposerBlockEntity
import ru.dbotthepony.mc.otm.block.entity.matter.MatterRecyclerBlockEntity
import ru.dbotthepony.mc.otm.block.entity.matter.MatterReplicatorBlockEntity import ru.dbotthepony.mc.otm.block.entity.matter.MatterReplicatorBlockEntity
import ru.dbotthepony.mc.otm.block.entity.matter.MatterScannerBlockEntity import ru.dbotthepony.mc.otm.block.entity.matter.MatterScannerBlockEntity
import ru.dbotthepony.mc.otm.block.entity.tech.AndroidStationBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.AndroidStationBlockEntity
@ -23,17 +21,24 @@ object MachinesConfig : AbstractConfig("machines") {
MatterBottlerBlockEntity.registerConfig(builder) MatterBottlerBlockEntity.registerConfig(builder)
MatterReplicatorBlockEntity.registerConfig(builder) MatterReplicatorBlockEntity.registerConfig(builder)
MatterScannerBlockEntity.registerConfig(builder) MatterScannerBlockEntity.registerConfig(builder)
MatterDecomposerBlockEntity.registerConfig(builder)
MatterReconstructorBlockEntity.registerConfig(builder) MatterReconstructorBlockEntity.registerConfig(builder)
} }
val PLATE_PRESS = workerValues( val PLATE_PRESS = workerValues(
MNames.PLATE_PRESS, MNames.PLATE_PRESS,
storage = Decimal(40_000), energyStorage = Decimal(40_000),
throughput = Decimal(200), energyThroughput = Decimal(200),
powerConsumption = Decimal(15) powerConsumption = Decimal(15)
) )
val MATTER_DECOMPOSER = workerValues(
MNames.MATTER_DECOMPOSER,
energyStorage = Decimal(100_000),
energyThroughput = Decimal(400),
powerConsumption = Decimal(240),
matterCapacity = Decimal(400),
)
var MATTER_RECYCLER_MATTER_PER_TICK: DecimalConfigValue by WriteOnce() var MATTER_RECYCLER_MATTER_PER_TICK: DecimalConfigValue by WriteOnce()
private set private set
@ -42,8 +47,8 @@ object MachinesConfig : AbstractConfig("machines") {
val MATTER_RECYCLER = workerValues( val MATTER_RECYCLER = workerValues(
MNames.MATTER_RECYCLER, MNames.MATTER_RECYCLER,
storage = Decimal(80_000), energyStorage = Decimal(80_000),
throughput = Decimal(400), energyThroughput = Decimal(400),
powerConsumption = Decimal(100), powerConsumption = Decimal(100),
workTimeMultiplier = null workTimeMultiplier = null
) { ) {
@ -71,24 +76,24 @@ object MachinesConfig : AbstractConfig("machines") {
val POWERED_FURNACE = workerValues( val POWERED_FURNACE = workerValues(
"POWERED_FURNACE", "POWERED_FURNACE",
storage = Decimal(40_000), energyStorage = Decimal(40_000),
throughput = Decimal(200), energyThroughput = Decimal(200),
powerConsumption = Decimal(20), powerConsumption = Decimal(20),
workTimeMultiplier = 0.75 workTimeMultiplier = 0.75
) )
val POWERED_BLAST_FURNACE = workerValues( val POWERED_BLAST_FURNACE = workerValues(
"POWERED_BLAST_FURNACE", "POWERED_BLAST_FURNACE",
storage = Decimal(40_000), energyStorage = Decimal(40_000),
throughput = Decimal(200), energyThroughput = Decimal(200),
powerConsumption = Decimal(20), powerConsumption = Decimal(20),
workTimeMultiplier = 0.75 workTimeMultiplier = 0.75
) )
val POWERED_SMOKER = workerValues( val POWERED_SMOKER = workerValues(
"POWERED_SMOKER", "POWERED_SMOKER",
storage = Decimal(40_000), energyStorage = Decimal(40_000),
throughput = Decimal(200), energyThroughput = Decimal(200),
powerConsumption = Decimal(10), powerConsumption = Decimal(10),
workTimeMultiplier = 0.75 workTimeMultiplier = 0.75
) )

View File

@ -3,8 +3,8 @@ package ru.dbotthepony.mc.otm.container
import ru.dbotthepony.mc.otm.capability.IMatteryUpgrade import ru.dbotthepony.mc.otm.capability.IMatteryUpgrade
import ru.dbotthepony.mc.otm.capability.MatteryCapability import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.capability.UpgradeType import ru.dbotthepony.mc.otm.capability.UpgradeType
import ru.dbotthepony.mc.otm.config.ConciseBalanceValues import ru.dbotthepony.mc.otm.config.EnergyBalanceValues
import ru.dbotthepony.mc.otm.config.VerboseBalanceValues import ru.dbotthepony.mc.otm.config.VerboseEnergyBalanceValues
import ru.dbotthepony.mc.otm.core.collect.filter import ru.dbotthepony.mc.otm.core.collect.filter
import ru.dbotthepony.mc.otm.core.collect.map import ru.dbotthepony.mc.otm.core.collect.map
import ru.dbotthepony.mc.otm.core.collect.mapToDouble import ru.dbotthepony.mc.otm.core.collect.mapToDouble
@ -49,23 +49,23 @@ open class UpgradeContainer(slotCount: Int, open val allowedUpgrades: Set<Upgrad
override val energyThroughput: Decimal override val energyThroughput: Decimal
get() = decimals(IMatteryUpgrade::energyThroughput, Decimal::plus) get() = decimals(IMatteryUpgrade::energyThroughput, Decimal::plus)
fun transform(values: ConciseBalanceValues): ConciseBalanceValues { fun transform(values: EnergyBalanceValues): EnergyBalanceValues {
return object : ConciseBalanceValues { return object : EnergyBalanceValues {
override val capacity: Decimal override val energyCapacity: Decimal
get() = values.capacity * (energyStorage + Decimal.ONE) + energyStorageFlat get() = values.energyCapacity * (energyStorage + Decimal.ONE) + energyStorageFlat
override val throughput: Decimal override val energyThroughput: Decimal
get() = values.throughput * (energyThroughput + Decimal.ONE) + energyThroughputFlat get() = values.energyThroughput * (this@UpgradeContainer.energyThroughput + Decimal.ONE) + energyThroughputFlat
} }
} }
fun transform(values: VerboseBalanceValues): VerboseBalanceValues { fun transform(values: VerboseEnergyBalanceValues): VerboseEnergyBalanceValues {
return object : VerboseBalanceValues { return object : VerboseEnergyBalanceValues {
override val capacity: Decimal override val energyCapacity: Decimal
get() = values.capacity * (energyStorage + Decimal.ONE) + energyStorageFlat get() = values.energyCapacity * (energyStorage + Decimal.ONE) + energyStorageFlat
override val receive: Decimal override val maxEnergyReceive: Decimal
get() = values.receive * (energyThroughput + Decimal.ONE) + energyThroughputFlat get() = values.maxEnergyReceive * (energyThroughput + Decimal.ONE) + energyThroughputFlat
override val extract: Decimal override val maxEnergyExtract: Decimal
get() = values.extract * (energyThroughput + Decimal.ONE) + energyThroughputFlat get() = values.maxEnergyExtract * (energyThroughput + Decimal.ONE) + energyThroughputFlat
} }
} }

View File

@ -25,7 +25,6 @@ import ru.dbotthepony.mc.otm.config.ItemsConfig
import ru.dbotthepony.mc.otm.core.* import ru.dbotthepony.mc.otm.core.*
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.registry.MDamageTypes import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MRegistry
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
import ru.dbotthepony.mc.otm.runIfClient import ru.dbotthepony.mc.otm.runIfClient
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -100,9 +99,9 @@ open class BatteryItem : Item {
constructor(values: BatteryBalanceValues) : super(Properties().stacksTo(1)) { constructor(values: BatteryBalanceValues) : super(Properties().stacksTo(1)) {
isCreative = false isCreative = false
this._capacity = values::capacity this._capacity = values::energyCapacity
this._receive = values::receive this._receive = values::maxEnergyReceive
this._extract = values::extract this._extract = values::maxEnergyExtract
this._initialBatteryLevel = values::initialBatteryLevel this._initialBatteryLevel = values::initialBatteryLevel
} }

View File

@ -28,7 +28,7 @@ import ru.dbotthepony.mc.otm.capability.energy.IMatteryEnergyStorage
import ru.dbotthepony.mc.otm.capability.energy.getBarColor import ru.dbotthepony.mc.otm.capability.energy.getBarColor
import ru.dbotthepony.mc.otm.capability.energy.getBarWidth import ru.dbotthepony.mc.otm.capability.energy.getBarWidth
import ru.dbotthepony.mc.otm.compat.mekanism.Mattery2MekanismEnergyWrapper import ru.dbotthepony.mc.otm.compat.mekanism.Mattery2MekanismEnergyWrapper
import ru.dbotthepony.mc.otm.config.ConciseBalanceValues import ru.dbotthepony.mc.otm.config.EnergyBalanceValues
import ru.dbotthepony.mc.otm.core.* import ru.dbotthepony.mc.otm.core.*
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.math.readDecimal import ru.dbotthepony.mc.otm.core.math.readDecimal
@ -322,10 +322,10 @@ class QuantumBatteryItem : Item {
this.saveDataID = "otm_$saveDataID".intern() this.saveDataID = "otm_$saveDataID".intern()
} }
constructor(saveDataID: String, values: ConciseBalanceValues) : super(Properties().stacksTo(1)) { constructor(saveDataID: String, values: EnergyBalanceValues) : super(Properties().stacksTo(1)) {
isCreative = false isCreative = false
_capacity = values::capacity _capacity = values::energyCapacity
_throughput = values::throughput _throughput = values::energyThroughput
this.saveDataID = "otm_$saveDataID".intern() this.saveDataID = "otm_$saveDataID".intern()
} }

View File

@ -9,8 +9,7 @@ import net.minecraft.world.item.Rarity
import net.minecraft.world.item.TooltipFlag import net.minecraft.world.item.TooltipFlag
import net.minecraft.world.level.Level import net.minecraft.world.level.Level
import net.minecraftforge.common.capabilities.ICapabilityProvider import net.minecraftforge.common.capabilities.ICapabilityProvider
import ru.dbotthepony.mc.otm.config.ConciseBalanceValues import ru.dbotthepony.mc.otm.config.EnergyBalanceValues
import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.capability.* import ru.dbotthepony.mc.otm.capability.*
import ru.dbotthepony.mc.otm.capability.energy.EnergyProducerItem import ru.dbotthepony.mc.otm.capability.energy.EnergyProducerItem
import ru.dbotthepony.mc.otm.capability.energy.ItemEnergyStorageImpl import ru.dbotthepony.mc.otm.capability.energy.ItemEnergyStorageImpl
@ -25,7 +24,7 @@ open class SingleUseBatteryItem(
private val _throughput: () -> Decimal? = { null }, private val _throughput: () -> Decimal? = { null },
properties: Properties = Properties().stacksTo(1) properties: Properties = Properties().stacksTo(1)
) : Item(properties) { ) : Item(properties) {
constructor(values: ConciseBalanceValues, properties: Properties = Properties().stacksTo(1)) : this(values::capacity, values::throughput, properties) constructor(values: EnergyBalanceValues, properties: Properties = Properties().stacksTo(1)) : this(values::energyCapacity, values::energyThroughput, properties)
constructor(storage: Decimal, throughput: Decimal? = null, properties: Properties = Properties().stacksTo(1)) : this({ storage }, { throughput }, properties) constructor(storage: Decimal, throughput: Decimal? = null, properties: Properties = Properties().stacksTo(1)) : this({ storage }, { throughput }, properties)
val capacity get() = _capacity.invoke() val capacity get() = _capacity.invoke()