Fix wrong bounds operations when extracting matter from grid

This commit is contained in:
DBotThePony 2023-03-22 17:49:46 +07:00
parent 9f6927cb8a
commit aa31ff4cce
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -233,18 +233,17 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
} else {
// в тик требуется меньше материи, чем её может хранить репликатор
// примем из сети недостающее количество бака материи, или 200 тиков репликации, что меньше
val drain = graph.extractMatter(matter.missingMatter
.coerceAtMost(drainPerTick * DRAIN_MULT)
val drain = graph.extractMatter((drainPerTick * DRAIN_MULT)
.coerceAtMost(job.matterPerTick * (job.ticks - workTicks - ticksAdvanced))
.coerceAtLeast(Decimal.ONE), true)
.coerceAtLeast(Decimal.ONE)
.coerceAtMost(matter.missingMatter), false)
if (drain.isZero) {
// в сети нет материи
return Status.FAILURE_MATTER
}
val received = matter.receiveMatter(drain, false)
graph.extractMatter(received, false)
matter.receiveMatter(drain, false)
// получили материю, проверяем возможность работы
if (matter.extractMatterInner(drainPerTick, true) >= drainPerTick) {