Fix storage importer

This commit is contained in:
DBotThePony 2023-08-12 12:16:31 +07:00
parent dba7f3ad8d
commit d3ea51928f
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -39,7 +39,6 @@ import ru.dbotthepony.mc.otm.storage.ItemStorageStack
import ru.dbotthepony.mc.otm.storage.StorageStack import ru.dbotthepony.mc.otm.storage.StorageStack
import java.math.BigInteger import java.math.BigInteger
import java.util.* import java.util.*
import java.util.stream.Stream
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
abstract class AbstractStorageImportExport<T>( abstract class AbstractStorageImportExport<T>(
@ -143,25 +142,25 @@ class StorageImporterBlockEntity(
val wrapped = ItemStorageStack(stack) val wrapped = ItemStorageStack(stack)
val view = cell.graph.getVirtualComponent(StorageStack.ITEMS) val view = cell.graph.getVirtualComponent(StorageStack.ITEMS)
val inserted = view.insertStack(wrapped, true) val leftover = view.insertStack(wrapped, true)
if (inserted == wrapped) return stack if (leftover == wrapped) return stack
val required = StorageStack.ITEMS.energyPerInsert(wrapped) val required = StorageStack.ITEMS.energyPerInsert(wrapped)
if (energy.extractEnergy(required, true) == required) { if (energy.extractEnergy(required, true) == required) {
if (!simulate) { if (!simulate) {
val inserted2 = view.insertStack(wrapped, false) val leftover2 = view.insertStack(wrapped, false)
if (inserted == inserted2) { if (leftover == leftover2) {
energy.extractEnergy(required, false) energy.extractEnergy(required, false)
return inserted.toItemStack() return leftover.toItemStack()
} else { } else {
energy.extractEnergy(StorageStack.ITEMS.energyPerInsert(inserted2), false) energy.extractEnergy(StorageStack.ITEMS.energyPerInsert(leftover2), false)
return inserted2.toItemStack() return leftover2.toItemStack()
} }
} }
return inserted.toItemStack() return leftover.toItemStack()
} }
return stack return stack
@ -208,12 +207,15 @@ class StorageImporterBlockEntity(
if (extracted.isEmpty || !filter.match(extracted)) { if (extracted.isEmpty || !filter.match(extracted)) {
lastSlot++ lastSlot++
} else { } else {
val accepted = acceptItem(extracted, true) val leftover = acceptItem(extracted, true)
val extracted2 = target.extractItem(lastSlot, accepted.count, false)
if (leftover.count != extracted.count) {
val extracted2 = target.extractItem(lastSlot, extracted.count - leftover.count, false)
acceptItem(extracted2, false) acceptItem(extracted2, false)
nextTick += INTERVAL * 4 nextTick += INTERVAL * 4
} }
} }
}
if (nextTick <= 0) { if (nextTick <= 0) {
nextTick = INTERVAL nextTick = INTERVAL