From 3ca8f11c48fe490cf113d5cb2618e64c8da26006 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sat, 19 Nov 2022 16:03:00 +0700 Subject: [PATCH] Stream'y --- .../mc/otm/matter/MatterManager.kt | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterManager.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterManager.kt index 8fa9a5281..40818389e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterManager.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterManager.kt @@ -967,6 +967,18 @@ object MatterManager { return get(value).hasMatterValue } + private fun reduce(a: IMatterValue, b: IMatterValue): IMatterValue { + if (a.hasMatterValue && b.hasMatterValue) { + return MatterValue(a.matter + b.matter, a.complexity + b.complexity) + } else if (a.hasMatterValue) { + return a + } else if (b.hasMatterValue) { + return b + } else { + return IMatterValue.Companion + } + } + private fun get(value: ItemStack, level: Int, accountForStackSize: Boolean): IMatterValue { if (value.isEmpty) { return IMatterValue.Companion @@ -997,29 +1009,20 @@ object MatterManager { val drive = value.getCapability(MatteryCapability.DRIVE).orNull() - if (drive != null && drive.storageType === OverdriveThatMatters.INSTANCE.ITEM_STORAGE()) { - for (item in (drive as IMatteryDrive).stacks) { - val tuple = get(item.stack.stack, level + 1, true) - - if (tuple.hasMatterValue) { - matter += tuple - undamagedMatterValue += tuple + if (drive != null && drive.storageType == OverdriveThatMatters.INSTANCE.ITEM_STORAGE()) { + (drive as IMatteryDrive).stacks + .map { it.stack.stack } + .filter { !it.isEmpty } + .map { get(it, level + 1, true) } + .reduce(::reduce) + .ifPresent { + matter += it + undamagedMatterValue += it } - } } value.getCapability(ForgeCapabilities.ITEM_HANDLER).ifPresentK { - it.stream().filter { !it.isEmpty }.map { get(it, level + 1, true) }.reduce { a, b -> - if (a.hasMatterValue && b.hasMatterValue) { - return@reduce MatterValue(a.matter + b.matter, a.complexity + b.complexity) - } else if (a.hasMatterValue) { - return@reduce a - } else if (b.hasMatterValue) { - return@reduce b - } else { - return@reduce IMatterValue.Companion - } - }.ifPresent { + it.stream().filter { !it.isEmpty }.map { get(it, level + 1, true) }.reduce(::reduce).ifPresent { matter += it undamagedMatterValue += it }