Rebalance matter replicator storage values
This commit is contained in:
parent
cc4fcf398f
commit
029a661978
@ -23,6 +23,7 @@ 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.EnergyBalanceValues
|
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.container.UpgradeContainer
|
||||||
@ -52,7 +53,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
|
|||||||
val pattern: Optional<PatternState>,
|
val pattern: Optional<PatternState>,
|
||||||
val asDust: Boolean,
|
val asDust: Boolean,
|
||||||
ticks: Double,
|
ticks: Double,
|
||||||
) : ItemJob(itemStack, ticks, BASE_CONSUMPTION) {
|
) : ItemJob(itemStack, ticks, MachinesConfig.MATTER_REPLICATOR.energyConsumption) {
|
||||||
companion object {
|
companion object {
|
||||||
val CODEC: Codec<ReplicatorJob> by lazy {
|
val CODEC: Codec<ReplicatorJob> by lazy {
|
||||||
RecordCodecBuilder.create {
|
RecordCodecBuilder.create {
|
||||||
@ -71,8 +72,8 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override val upgrades = UpgradeContainer(this::setChangedLight, 3, UpgradeType.REPLICATOR)
|
override val upgrades = UpgradeContainer(this::setChangedLight, 3, UpgradeType.REPLICATOR)
|
||||||
val energy = ProfiledEnergyStorage(WorkerEnergyStorage(::energyLevelUpdated, upgrades.transform(ENERGY_VALUES)))
|
val energy = ProfiledEnergyStorage(WorkerEnergyStorage(::energyLevelUpdated, upgrades.transform(MachinesConfig.MATTER_REPLICATOR)))
|
||||||
val matter = ProfiledMatterStorage(MatterStorageImpl(::matterLevelUpdated, FlowDirection.INPUT, upgrades.matterCapacity(::MATTER_CAPACITY)))
|
val matter = ProfiledMatterStorage(MatterStorageImpl(::matterLevelUpdated, FlowDirection.INPUT, upgrades.matterCapacity(MachinesConfig.MATTER_REPLICATOR::matterCapacity)))
|
||||||
val container = MatteryContainer(::itemContainerUpdated, 5).also(::addDroppableContainer)
|
val container = MatteryContainer(::itemContainerUpdated, 5).also(::addDroppableContainer)
|
||||||
|
|
||||||
val energyConfig = ConfigurableEnergy(energy)
|
val energyConfig = ConfigurableEnergy(energy)
|
||||||
@ -164,7 +165,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun computeNextJob(id: Int): JobContainer<ReplicatorJob> {
|
override fun computeNextJob(id: Int): JobContainer<ReplicatorJob> {
|
||||||
if (energy.batteryLevel < BASE_CONSUMPTION) {
|
if (energy.batteryLevel < MachinesConfig.MATTER_REPLICATOR.energyConsumption) {
|
||||||
return JobContainer.noEnergy()
|
return JobContainer.noEnergy()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,7 +194,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
|
|||||||
val drainPerTick = job.matterPerTick * status.ticksAdvanced
|
val drainPerTick = job.matterPerTick * status.ticksAdvanced
|
||||||
|
|
||||||
if (matter.extractMatter(drainPerTick, true) < drainPerTick) {
|
if (matter.extractMatter(drainPerTick, true) < drainPerTick) {
|
||||||
val toDrain = (drainPerTick * DRAIN_MULT)
|
val toDrain = (drainPerTick * Decimal(200))
|
||||||
.coerceAtMost(job.matterPerTick * (status.ticks - status.workTicks + status.ticksAdvanced))
|
.coerceAtMost(job.matterPerTick * (status.ticks - status.workTicks + status.ticksAdvanced))
|
||||||
.coerceAtLeast(Decimal.ONE)
|
.coerceAtLeast(Decimal.ONE)
|
||||||
.coerceAtMost(matter.missingMatter)
|
.coerceAtMost(matter.missingMatter)
|
||||||
@ -206,29 +207,6 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val BASE_CONSUMPTION get() = _BASE_CONSUMPTION.get()
|
|
||||||
private val DRAIN_MULT get() = _DRAIN_MULT.get()
|
|
||||||
private val MATTER_CAPACITY get() = _MATTER_CAPACITY.get()
|
|
||||||
|
|
||||||
private var _BASE_CONSUMPTION: DecimalConfigValue by WriteOnce()
|
|
||||||
private var _DRAIN_MULT: DecimalConfigValue by WriteOnce()
|
|
||||||
private var _MATTER_CAPACITY: DecimalConfigValue by WriteOnce()
|
|
||||||
|
|
||||||
var ENERGY_VALUES: EnergyBalanceValues by WriteOnce()
|
|
||||||
private set
|
|
||||||
|
|
||||||
fun registerConfig(builder: ForgeConfigSpec.Builder) {
|
|
||||||
builder.push(MNames.MATTER_REPLICATOR)
|
|
||||||
|
|
||||||
ENERGY_VALUES = BlockEnergyStorageImpl.makeConfigEntry(builder, capacity = Decimal(200_000), throughput = Decimal(4_000))
|
|
||||||
|
|
||||||
_BASE_CONSUMPTION = builder.defineDecimal("basePowerConsumption", Decimal(400), Decimal.ONE)
|
|
||||||
_DRAIN_MULT = builder.comment("How much 'ticks' of replication should replicator drain matter from network when running low on internal matter buffer. This is ultimately a performance value.").defineDecimal("drainMultiplier", Decimal(200), Decimal.ONE)
|
|
||||||
_MATTER_CAPACITY = builder.defineDecimal("matterCapacity", Decimal(1_000), Decimal.ONE_TENTH)
|
|
||||||
|
|
||||||
builder.pop()
|
|
||||||
}
|
|
||||||
|
|
||||||
const val FIRST_ACTUAL_OUTPUT_SLOT = 0
|
const val FIRST_ACTUAL_OUTPUT_SLOT = 0
|
||||||
const val LAST_ACTUAL_OUTPUT_SLOT = 2
|
const val LAST_ACTUAL_OUTPUT_SLOT = 2
|
||||||
const val OUTPUT_DUST_MAIN = 3
|
const val OUTPUT_DUST_MAIN = 3
|
||||||
|
@ -49,7 +49,7 @@ abstract class AbstractConfig(private val configName: String, private val type:
|
|||||||
energyStorage: Decimal,
|
energyStorage: Decimal,
|
||||||
energyThroughput: Decimal,
|
energyThroughput: Decimal,
|
||||||
workTimeMultiplier: Double? = 1.0,
|
workTimeMultiplier: Double? = 1.0,
|
||||||
powerConsumption: Decimal,
|
energyConsumption: Decimal,
|
||||||
matterCapacity: Decimal? = null,
|
matterCapacity: Decimal? = null,
|
||||||
configurator: ForgeConfigSpec.Builder.() -> Unit = {}
|
configurator: ForgeConfigSpec.Builder.() -> Unit = {}
|
||||||
): WorkerBalanceValues {
|
): WorkerBalanceValues {
|
||||||
@ -58,7 +58,7 @@ abstract class AbstractConfig(private val configName: String, private val type:
|
|||||||
val obj = object : WorkerBalanceValues {
|
val obj = object : WorkerBalanceValues {
|
||||||
override val energyCapacity: Decimal by builder.defineDecimal("ENERGY_CAPACITY", energyStorage, minimum = Decimal.ONE)
|
override val energyCapacity: Decimal by builder.defineDecimal("ENERGY_CAPACITY", energyStorage, minimum = Decimal.ONE)
|
||||||
override val energyThroughput: Decimal by builder.defineDecimal("ENERGY_THROUGHPUT", energyThroughput, minimum = Decimal.ONE)
|
override val energyThroughput: Decimal by builder.defineDecimal("ENERGY_THROUGHPUT", energyThroughput, minimum = Decimal.ONE)
|
||||||
override val energyConsumption: Decimal by builder.defineDecimal("ENERGY_CONSUMPTION", powerConsumption, minimum = Decimal.ONE)
|
override val energyConsumption: Decimal by builder.defineDecimal("ENERGY_CONSUMPTION", energyConsumption, minimum = Decimal.ONE)
|
||||||
override val matterCapacity: Decimal by (if (matterCapacity == null) GetterSetter.box(Decimal.ZERO) else builder.defineDecimal("MATTER_CAPACITY", matterCapacity, minimum = Decimal.ONE))
|
override val matterCapacity: Decimal by (if (matterCapacity == null) GetterSetter.box(Decimal.ZERO) else builder.defineDecimal("MATTER_CAPACITY", matterCapacity, minimum = Decimal.ONE))
|
||||||
override val workTimeMultiplier: Double by (if (workTimeMultiplier == null) GetterSetter.box(1.0) else builder.defineInRange("WORK_TIME_MULTIPLIER", workTimeMultiplier, 0.0))
|
override val workTimeMultiplier: Double by (if (workTimeMultiplier == null) GetterSetter.box(1.0) else builder.defineInRange("WORK_TIME_MULTIPLIER", workTimeMultiplier, 0.0))
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package ru.dbotthepony.mc.otm.config
|
package ru.dbotthepony.mc.otm.config
|
||||||
|
|
||||||
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.MatterReplicatorBlockEntity
|
|
||||||
import ru.dbotthepony.mc.otm.block.entity.tech.AndroidStationBlockEntity
|
import ru.dbotthepony.mc.otm.block.entity.tech.AndroidStationBlockEntity
|
||||||
import ru.dbotthepony.mc.otm.block.entity.tech.ChemicalGeneratorBlockEntity
|
import ru.dbotthepony.mc.otm.block.entity.tech.ChemicalGeneratorBlockEntity
|
||||||
import ru.dbotthepony.mc.otm.capability.energy.BlockEnergyStorageImpl
|
import ru.dbotthepony.mc.otm.capability.energy.BlockEnergyStorageImpl
|
||||||
@ -14,21 +13,20 @@ object MachinesConfig : AbstractConfig("machines") {
|
|||||||
AndroidStationBlockEntity.registerConfig(builder)
|
AndroidStationBlockEntity.registerConfig(builder)
|
||||||
ChemicalGeneratorBlockEntity.registerConfig(builder)
|
ChemicalGeneratorBlockEntity.registerConfig(builder)
|
||||||
MatterBottlerBlockEntity.registerConfig(builder)
|
MatterBottlerBlockEntity.registerConfig(builder)
|
||||||
MatterReplicatorBlockEntity.registerConfig(builder)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val PLATE_PRESS = workerValues(
|
val PLATE_PRESS = workerValues(
|
||||||
MNames.PLATE_PRESS,
|
MNames.PLATE_PRESS,
|
||||||
energyStorage = Decimal(40_000),
|
energyStorage = Decimal(40_000),
|
||||||
energyThroughput = Decimal(200),
|
energyThroughput = Decimal(200),
|
||||||
powerConsumption = Decimal(15)
|
energyConsumption = Decimal(15)
|
||||||
)
|
)
|
||||||
|
|
||||||
val MATTER_DECOMPOSER = workerValues(
|
val MATTER_DECOMPOSER = workerValues(
|
||||||
MNames.MATTER_DECOMPOSER,
|
MNames.MATTER_DECOMPOSER,
|
||||||
energyStorage = Decimal(100_000),
|
energyStorage = Decimal(100_000),
|
||||||
energyThroughput = Decimal(400),
|
energyThroughput = Decimal(400),
|
||||||
powerConsumption = Decimal(240),
|
energyConsumption = Decimal(240),
|
||||||
matterCapacity = Decimal(400),
|
matterCapacity = Decimal(400),
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -36,14 +34,22 @@ object MachinesConfig : AbstractConfig("machines") {
|
|||||||
MNames.MATTER_SCANNER,
|
MNames.MATTER_SCANNER,
|
||||||
energyStorage = Decimal(40_000),
|
energyStorage = Decimal(40_000),
|
||||||
energyThroughput = Decimal(200),
|
energyThroughput = Decimal(200),
|
||||||
powerConsumption = Decimal(80),
|
energyConsumption = Decimal(80),
|
||||||
|
)
|
||||||
|
|
||||||
|
val MATTER_REPLICATOR = workerValues(
|
||||||
|
MNames.MATTER_REPLICATOR,
|
||||||
|
energyStorage = Decimal(200_000),
|
||||||
|
energyThroughput = Decimal(4_000),
|
||||||
|
energyConsumption = Decimal(400),
|
||||||
|
matterCapacity = Decimal(200)
|
||||||
)
|
)
|
||||||
|
|
||||||
private val MATTER_RECYCLER = workerValues(
|
private val MATTER_RECYCLER = workerValues(
|
||||||
MNames.MATTER_RECYCLER,
|
MNames.MATTER_RECYCLER,
|
||||||
energyStorage = Decimal(80_000),
|
energyStorage = Decimal(80_000),
|
||||||
energyThroughput = Decimal(400),
|
energyThroughput = Decimal(400),
|
||||||
powerConsumption = Decimal(100),
|
energyConsumption = Decimal(100),
|
||||||
matterCapacity = Decimal(400),
|
matterCapacity = Decimal(400),
|
||||||
workTimeMultiplier = null
|
workTimeMultiplier = null
|
||||||
) {
|
) {
|
||||||
@ -59,7 +65,7 @@ object MachinesConfig : AbstractConfig("machines") {
|
|||||||
MNames.MATTER_RECONSTRUCTOR,
|
MNames.MATTER_RECONSTRUCTOR,
|
||||||
energyStorage = Decimal(100_000),
|
energyStorage = Decimal(100_000),
|
||||||
energyThroughput = Decimal(1000),
|
energyThroughput = Decimal(1000),
|
||||||
powerConsumption = Decimal(400),
|
energyConsumption = Decimal(400),
|
||||||
matterCapacity = Decimal(200),
|
matterCapacity = Decimal(200),
|
||||||
workTimeMultiplier = null,
|
workTimeMultiplier = null,
|
||||||
) {
|
) {
|
||||||
@ -116,7 +122,7 @@ object MachinesConfig : AbstractConfig("machines") {
|
|||||||
"POWERED_FURNACE",
|
"POWERED_FURNACE",
|
||||||
energyStorage = Decimal(40_000),
|
energyStorage = Decimal(40_000),
|
||||||
energyThroughput = Decimal(200),
|
energyThroughput = Decimal(200),
|
||||||
powerConsumption = Decimal(20),
|
energyConsumption = Decimal(20),
|
||||||
workTimeMultiplier = 0.75
|
workTimeMultiplier = 0.75
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -124,7 +130,7 @@ object MachinesConfig : AbstractConfig("machines") {
|
|||||||
"POWERED_BLAST_FURNACE",
|
"POWERED_BLAST_FURNACE",
|
||||||
energyStorage = Decimal(40_000),
|
energyStorage = Decimal(40_000),
|
||||||
energyThroughput = Decimal(200),
|
energyThroughput = Decimal(200),
|
||||||
powerConsumption = Decimal(20),
|
energyConsumption = Decimal(20),
|
||||||
workTimeMultiplier = 0.75
|
workTimeMultiplier = 0.75
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -132,7 +138,7 @@ object MachinesConfig : AbstractConfig("machines") {
|
|||||||
"POWERED_SMOKER",
|
"POWERED_SMOKER",
|
||||||
energyStorage = Decimal(40_000),
|
energyStorage = Decimal(40_000),
|
||||||
energyThroughput = Decimal(200),
|
energyThroughput = Decimal(200),
|
||||||
powerConsumption = Decimal(10),
|
energyConsumption = Decimal(10),
|
||||||
workTimeMultiplier = 0.75
|
workTimeMultiplier = 0.75
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user