From f4c36cc7283ad572749ecbd8f45958d17ccc86da Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Fri, 23 Jun 2023 00:04:10 +0700 Subject: [PATCH] Specify "id" of job event loop --- .../block/entity/MatteryWorkerBlockEntity.kt | 18 +++++++++--------- .../matter/MatterDecomposerBlockEntity.kt | 4 ++-- .../entity/matter/MatterRecyclerBlockEntity.kt | 6 +++--- .../matter/MatterReplicatorBlockEntity.kt | 18 +++++++++--------- .../block/entity/tech/CobblerBlockEntity.kt | 4 ++-- .../block/entity/tech/PlatePressBlockEntity.kt | 4 ++-- 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryWorkerBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryWorkerBlockEntity.kt index 99bb0d976..c6682a858 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryWorkerBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryWorkerBlockEntity.kt @@ -32,7 +32,7 @@ abstract class MatteryWorkerBlockEntity( val jobDeserializer: (tag: CompoundTag) -> JobType?, maxJobs: Int = 1 ) : MatteryPoweredBlockEntity(type, blockPos, blockState) { - val jobEventLoops: ImmutableList> = immutableList(maxJobs) { + val jobEventLoops: ImmutableList> = immutableList(maxJobs) { id -> object : MachineJobEventLoop() { override val energy: IMatteryEnergyStorage? get() = matteryEnergy @@ -44,28 +44,28 @@ abstract class MatteryWorkerBlockEntity( } override fun onJobFinish(job: JobType): JobStatus { - return this@MatteryWorkerBlockEntity.onJobFinish(job) + return this@MatteryWorkerBlockEntity.onJobFinish(job, id) } override fun computeNextJob(): JobContainer { - return this@MatteryWorkerBlockEntity.computeNextJob() + return this@MatteryWorkerBlockEntity.computeNextJob(id) } override fun jobUpdated(new: JobType?, old: JobType?) { - this@MatteryWorkerBlockEntity.jobUpdated(new, old) + this@MatteryWorkerBlockEntity.jobUpdated(new, old, id) } override fun onWorkTick(requiredPower: Decimal, extractedPower: Decimal, ticksAdvanced: Double, job: JobType): JobStatus { - return this@MatteryWorkerBlockEntity.onWorkTick(requiredPower, extractedPower, ticksAdvanced, job) + return this@MatteryWorkerBlockEntity.onWorkTick(requiredPower, extractedPower, ticksAdvanced, job, id) } } } - protected open fun jobUpdated(new: JobType?, old: JobType?) {} - protected abstract fun onJobFinish(job: JobType): JobStatus - protected abstract fun computeNextJob(): JobContainer + protected open fun jobUpdated(new: JobType?, old: JobType?, id: Int) {} + protected abstract fun onJobFinish(job: JobType, id: Int): JobStatus + protected abstract fun computeNextJob(id: Int): JobContainer - protected open fun onWorkTick(requiredPower: Decimal, extractedPower: Decimal, ticksAdvanced: Double, job: JobType): JobStatus { + protected open fun onWorkTick(requiredPower: Decimal, extractedPower: Decimal, ticksAdvanced: Double, job: JobType, id: Int): JobStatus { return JobStatus.SUCCESS } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterDecomposerBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterDecomposerBlockEntity.kt index a40f508ac..3fdb11ce5 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterDecomposerBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterDecomposerBlockEntity.kt @@ -165,7 +165,7 @@ class MatterDecomposerBlockEntity(pos: BlockPos, state: BlockState) return MatterDecomposerMenu(containerID, inventory, this) } - override fun onJobFinish(job: DecomposerJob): JobStatus { + override fun onJobFinish(job: DecomposerJob, id: Int): JobStatus { if (job.toDust) { job.matterValue = moveMatterAsDustIntoContainer(job.matterValue, outputContainer, 0, 1) @@ -183,7 +183,7 @@ class MatterDecomposerBlockEntity(pos: BlockPos, state: BlockState) return JobStatus.SUCCESS } - override fun computeNextJob(): JobContainer { + override fun computeNextJob(id: Int): JobContainer { val stack = inputContainer[0] if (!stack.isEmpty) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterRecyclerBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterRecyclerBlockEntity.kt index 3aed65360..aac8e8df3 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterRecyclerBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterRecyclerBlockEntity.kt @@ -107,12 +107,12 @@ class MatterRecyclerBlockEntity(blockPos: BlockPos, blockState: BlockState) return MatterRecyclerMenu(containerID, inventory, this) } - override fun onJobFinish(job: RecyclerJob): JobStatus { + override fun onJobFinish(job: RecyclerJob, id: Int): JobStatus { // вся логика в onWorkTick return JobStatus.SUCCESS } - override fun computeNextJob(): JobContainer { + override fun computeNextJob(id: Int): JobContainer { if (matter.missingMatter.isZero) return JobContainer.noMatter() @@ -127,7 +127,7 @@ class MatterRecyclerBlockEntity(blockPos: BlockPos, blockState: BlockState) return JobContainer.success(RecyclerJob(dustMatter.matter.toDouble() * TICKS_PER_MATTER, POWER_CONSUMPTION, dustMatter.matter * (0.4 + level!!.random.nextDouble() * 0.6))) } - override fun onWorkTick(requiredPower: Decimal, extractedPower: Decimal, ticksAdvanced: Double, job: RecyclerJob): JobStatus { + override fun onWorkTick(requiredPower: Decimal, extractedPower: Decimal, ticksAdvanced: Double, job: RecyclerJob, id: Int): JobStatus { val receive = job.totalMatter / job.ticks if (receive.isZero) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReplicatorBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReplicatorBlockEntity.kt index a7d1c70b3..e82116f59 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReplicatorBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReplicatorBlockEntity.kt @@ -118,15 +118,15 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : } override fun onMatterTaskCreated(task: IReplicationTask<*>) { - jobEventLoop.notify(MachineJobEventLoop.IdleReason.OBSERVING) + jobEventLoops[0].notify(MachineJobEventLoop.IdleReason.OBSERVING) } override fun > onMatterTaskUpdated(newState: T, oldState: T) { - jobEventLoop.notify(MachineJobEventLoop.IdleReason.OBSERVING) + jobEventLoops[0].notify(MachineJobEventLoop.IdleReason.OBSERVING) } override fun onPatternAdded(state: IPatternState) { - jobEventLoop.notify(MachineJobEventLoop.IdleReason.OBSERVING) + jobEventLoops[0].notify(MachineJobEventLoop.IdleReason.OBSERVING) } } @@ -143,7 +143,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : return MatterReplicatorMenu(containerID, inventory, this) } - override fun onJobFinish(job: ReplicatorJob): JobStatus { + override fun onJobFinish(job: ReplicatorJob, id: Int): JobStatus { if (job.asDust) { job.matterValue = moveMatterAsDustIntoContainer(job.matterValue, container, OUTPUT_DUST_MAIN, OUTPUT_DUST_STACKING) @@ -173,7 +173,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : matterNode.discover(this) } - override fun jobUpdated(new: ReplicatorJob?, old: ReplicatorJob?) { + override fun jobUpdated(new: ReplicatorJob?, old: ReplicatorJob?, id: Int) { visualItemStack = new?.itemStack ?: ItemStack.EMPTY visualProgress = 0f } @@ -188,7 +188,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : var lastRender = 0L var particleRenderScore = 0L - override fun computeNextJob(): JobContainer { + override fun computeNextJob(id: Int): JobContainer { if (energy.batteryLevel < BASE_CONSUMPTION) { return JobContainer.noEnergy() } @@ -213,7 +213,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : )) } - override fun onWorkTick(requiredPower: Decimal, extractedPower: Decimal, ticksAdvanced: Double, job: ReplicatorJob): JobStatus { + override fun onWorkTick(requiredPower: Decimal, extractedPower: Decimal, ticksAdvanced: Double, job: ReplicatorJob, id: Int): JobStatus { val drainPerTick = job.matterPerTick * ticksAdvanced if (matter.extractMatter(drainPerTick, true) < drainPerTick) { @@ -237,7 +237,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : // в тик требуется меньше материи, чем её может хранить репликатор // примем из сети недостающее количество бака материи, или 200 тиков репликации, что меньше val drain = matterNode.graph.extractMatter((drainPerTick * DRAIN_MULT) - .coerceAtMost(job.matterPerTick * (job.ticks - jobEventLoop.workTicks - ticksAdvanced)) + .coerceAtMost(job.matterPerTick * (job.ticks - jobEventLoops[0].workTicks - ticksAdvanced)) .coerceAtLeast(Decimal.ONE) .coerceAtMost(matter.missingMatter), false) @@ -261,7 +261,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : // в машине достаточно материи matter.extractMatter(drainPerTick, false) - visualProgress = jobEventLoop.workProgress + visualProgress = jobEventLoops[0].workProgress return JobStatus.SUCCESS } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/CobblerBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/CobblerBlockEntity.kt index 7b7c446e5..04249f93d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/CobblerBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/CobblerBlockEntity.kt @@ -36,7 +36,7 @@ class CobblerBlockEntity(blockPos: BlockPos, blockState: BlockState) savetable(::container, INVENTORY_KEY) } - override fun onJobFinish(job: MachineItemJob): JobStatus { + override fun onJobFinish(job: MachineItemJob, id: Int): JobStatus { if (!container.fullyAddItem(job.itemStack)) { return JobStatus.FAILURE_ITEM } @@ -44,7 +44,7 @@ class CobblerBlockEntity(blockPos: BlockPos, blockState: BlockState) return JobStatus.SUCCESS } - override fun computeNextJob(): JobContainer { + override fun computeNextJob(id: Int): JobContainer { return JobContainer.success(MachineItemJob(ItemStack(Items.COBBLESTONE), 40.0)) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/PlatePressBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/PlatePressBlockEntity.kt index 375c2d347..c2a02d2c2 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/PlatePressBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/PlatePressBlockEntity.kt @@ -58,7 +58,7 @@ class PlatePressBlockEntity( return PlatePressMenu(containerID, inventory, this) } - override fun onJobFinish(job: MachineItemJob): JobStatus { + override fun onJobFinish(job: MachineItemJob, id: Int): JobStatus { if (job.itemStack.isEmpty) return JobStatus.SUCCESS @@ -69,7 +69,7 @@ class PlatePressBlockEntity( return JobStatus.SUCCESS } - override fun computeNextJob(): JobContainer { + override fun computeNextJob(id: Int): JobContainer { if (energy.batteryLevel.isZero) { return JobContainer.noEnergy() }