From e4dc6f60e71db6533e0484a3fdf3e9fb38552421 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sat, 14 Jan 2023 11:57:32 +0700 Subject: [PATCH] Get rid of receive/extract matter separation --- .../entity/matter/MatterBottlerBlockEntity.kt | 10 ++--- .../matter/MatterCapacitorBankBlockEntity.kt | 16 ++----- .../matter/MatterReplicatorBlockEntity.kt | 2 +- .../otm/capability/matter/IMatterHandler.kt | 44 +++---------------- .../capability/matter/MatterHandlerImpl.kt | 8 ++-- .../mc/otm/graph/matter/MatterNetworkGraph.kt | 6 +-- .../mc/otm/item/MatterCapacitorItem.kt | 12 +---- 7 files changed, 26 insertions(+), 72 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterBottlerBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterBottlerBlockEntity.kt index 80b61db2c..d2cb29fd7 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterBottlerBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterBottlerBlockEntity.kt @@ -274,7 +274,7 @@ class MatterBottlerBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : ) if (extracted > Decimal.ZERO) { - val received = matter.receiveMatterOuter(extracted, false) + val received = matter.receiveMatter(extracted, false) graph.extractMatter(received, false) } } @@ -283,12 +283,12 @@ class MatterBottlerBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : val energyExtracted = energy.extractEnergyInner(ENERGY_CONSUMPTION, true) if (!energyExtracted.isZero) { - val matter = capability.receiveMatterOuter(MATTER_EXCHANGE_RATE.coerceAtMost(matter.storedMatter) * energyExtracted / ENERGY_CONSUMPTION, true) + val matter = capability.receiveMatter(MATTER_EXCHANGE_RATE.coerceAtMost(matter.storedMatter) * energyExtracted / ENERGY_CONSUMPTION, true) if (!matter.isZero) { energy.extractEnergyInner(ENERGY_CONSUMPTION * matter / MATTER_EXCHANGE_RATE, false) - capability.receiveMatterOuter(matter, false) + capability.receiveMatter(matter, false) this.matter.extractMatterInner(matter, false) if (capability.missingMatter.isZero) { @@ -307,12 +307,12 @@ class MatterBottlerBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : val energyExtracted = energy.extractEnergyInner(ENERGY_CONSUMPTION, true) if (!energyExtracted.isZero) { - val matter = capability.extractMatterOuter(MATTER_EXCHANGE_RATE.coerceAtMost(matter.missingMatter) * energyExtracted / ENERGY_CONSUMPTION, true) + val matter = capability.extractMatter(MATTER_EXCHANGE_RATE.coerceAtMost(matter.missingMatter) * energyExtracted / ENERGY_CONSUMPTION, true) if (!matter.isZero) { this.energy.extractEnergyInner(ENERGY_CONSUMPTION * matter / MATTER_EXCHANGE_RATE,false) - capability.extractMatterOuter(matter, false) + capability.extractMatter(matter, false) this.matter.receiveMatterInner(matter, false) if (capability.storedMatter.isZero) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterCapacitorBankBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterCapacitorBankBlockEntity.kt index e3eeb92c1..9d2994ce9 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterCapacitorBankBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterCapacitorBankBlockEntity.kt @@ -70,11 +70,7 @@ class MatterCapacitorBankBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) return summ } - override fun receiveMatterOuter(howMuch: Decimal, simulate: Boolean): Decimal { - return receiveMatterInner(howMuch, simulate) - } - - override fun receiveMatterInner(howMuch: Decimal, simulate: Boolean): Decimal { + override fun receiveMatter(howMuch: Decimal, simulate: Boolean): Decimal { if (!howMuch.isPositive) return Decimal.ZERO @@ -85,7 +81,7 @@ class MatterCapacitorBankBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) for (stack in container) { if (!stack.isEmpty) { stack.getCapability(MatteryCapability.MATTER).ifPresent { - val diff = it.receiveMatterOuter(howMuch, simulate) + val diff = it.receiveMatter(howMuch, simulate) summ += diff howMuch -= diff } @@ -103,11 +99,7 @@ class MatterCapacitorBankBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) return summ } - override fun extractMatterOuter(howMuch: Decimal, simulate: Boolean): Decimal { - return extractMatterInner(howMuch, simulate) - } - - override fun extractMatterInner(howMuch: Decimal, simulate: Boolean): Decimal { + override fun extractMatter(howMuch: Decimal, simulate: Boolean): Decimal { if (!howMuch.isPositive) return Decimal.ZERO @@ -118,7 +110,7 @@ class MatterCapacitorBankBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) for (stack in container) { if (!stack.isEmpty) { stack.getCapability(MatteryCapability.MATTER).ifPresent { - val diff = it.extractMatterOuter(howMuch, simulate) + val diff = it.extractMatter(howMuch, simulate) summ += diff howMuch -= diff } 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 1c990bb78..ec26eec2c 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 @@ -244,7 +244,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : return Status.FAILURE_MATTER } - val received = matter.receiveMatterOuter(drain, false) + val received = matter.receiveMatter(drain, false) graph.extractMatter(received, false) // получили материю, проверяем возможность работы diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/IMatterHandler.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/IMatterHandler.kt index c0aec3e31..6dd5334b5 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/IMatterHandler.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/IMatterHandler.kt @@ -20,6 +20,8 @@ interface IMatterHandler { * Implementations are free to throw [UnsupportedOperationException] if setting battery level is not supported * due to technical complications (in this case, [canSetMatterLevel] MUST be false) * + * If you need to fully fill matter value, DO call [fillMatter], or, in case if you want to fully drain, call [drainMatter] + * * @throws [UnsupportedOperationException] */ var storedMatter: Decimal @@ -37,7 +39,7 @@ interface IMatterHandler { * @throws [UnsupportedOperationException] * @see storedMatter */ - fun emptyMatter() { + fun drainMatter() { storedMatter = Decimal.ZERO } @@ -52,50 +54,18 @@ interface IMatterHandler { } /** - * Make this object receive matter, from outside world. - * - * Call this if you don't own the object in question. + * Fill matter into this object * * @return matter accepted */ - fun receiveMatterOuter(howMuch: Decimal, simulate: Boolean): Decimal + fun receiveMatter(howMuch: Decimal, simulate: Boolean): Decimal /** - * Make this object receive matter, from inside world. - * - * Call this if you DO own the object in question. - * - * Nothing stops you from calling this from outside world, however, this will most likely - * lead to bugs, use [receiveMatterOuter] in this case instead. Methods were separated (and inside interface) for ease of use. - * - * Don't try to hammer nails with a screwdriver. - * - * @return matter accepted - */ - fun receiveMatterInner(howMuch: Decimal, simulate: Boolean): Decimal - - /** - * Make this object extract matter from itself, from outside world. - * - * Call this if you don't own the object in question. + * Extract matter from this object * * @return matter extracted */ - fun extractMatterOuter(howMuch: Decimal, simulate: Boolean): Decimal - - /** - * Make this object extract matter from itself, from inside world. - * - * Call this if you DO own the object in question. - * - * Nothing stops you from calling this from outside world, however, this will most likely - * lead to bugs, use [extractMatterOuter] in this case instead. Methods were separated (and inside interface) for ease of use. - * - * Don't try to hammer nails with a screwdriver. - * - * @return matter extracted - */ - fun extractMatterInner(howMuch: Decimal, simulate: Boolean): Decimal + fun extractMatter(howMuch: Decimal, simulate: Boolean): Decimal /** * How much matter (estimated) is missing in this object. Why estimated? Because some objects can be bottomless. diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/MatterHandlerImpl.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/MatterHandlerImpl.kt index 7b9da92aa..f3baa9b2f 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/MatterHandlerImpl.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/MatterHandlerImpl.kt @@ -62,14 +62,14 @@ open class MatterHandlerImpl @JvmOverloads constructor( return maxStoredMatter >= value && storedMatter + value <= maxStoredMatter } - override fun receiveMatterOuter(howMuch: Decimal, simulate: Boolean): Decimal { + override fun receiveMatter(howMuch: Decimal, simulate: Boolean): Decimal { if (!canReceiveMatter) return Decimal.ZERO return receiveMatterInner(howMuch, simulate) } - override fun receiveMatterInner(howMuch: Decimal, simulate: Boolean): Decimal { + fun receiveMatterInner(howMuch: Decimal, simulate: Boolean): Decimal { val new: Decimal if (maxReceive == null) { @@ -88,14 +88,14 @@ open class MatterHandlerImpl @JvmOverloads constructor( return diff } - override fun extractMatterOuter(howMuch: Decimal, simulate: Boolean): Decimal { + override fun extractMatter(howMuch: Decimal, simulate: Boolean): Decimal { if (canExtractMatter) return Decimal.ZERO return extractMatterInner(howMuch, simulate) } - override fun extractMatterInner(howMuch: Decimal, simulate: Boolean): Decimal { + fun extractMatterInner(howMuch: Decimal, simulate: Boolean): Decimal { val new: Decimal if (maxExtract == null) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/graph/matter/MatterNetworkGraph.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/graph/matter/MatterNetworkGraph.kt index 4f0f59ef6..163bfb788 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/graph/matter/MatterNetworkGraph.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/graph/matter/MatterNetworkGraph.kt @@ -114,7 +114,7 @@ class MatterNetworkGraph : Abstract6Graph(), IMatterGraphListe val matter = node.value.getMatterHandler() if (matter != null) { - val value = matter.extractMatterOuter(howMuch, simulate) + val value = matter.extractMatter(howMuch, simulate) howMuch -= value extracted += value @@ -138,7 +138,7 @@ class MatterNetworkGraph : Abstract6Graph(), IMatterGraphListe val matter = node.value.getMatterHandler() if (matter != null && matter.matterDirection == FlowDirection.BI_DIRECTIONAL) { - val value = matter.receiveMatterOuter(howMuch, simulate) + val value = matter.receiveMatter(howMuch, simulate) howMuch -= value received += value @@ -162,7 +162,7 @@ class MatterNetworkGraph : Abstract6Graph(), IMatterGraphListe val matter = node.value.getMatterHandler() if (matter != null && matter.matterDirection != FlowDirection.OUTPUT) { - val value = matter.receiveMatterOuter(howMuch, simulate) + val value = matter.receiveMatter(howMuch, simulate) howMuch -= value received += value diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/MatterCapacitorItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/MatterCapacitorItem.kt index 0659177f7..a90a620df 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/MatterCapacitorItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/MatterCapacitorItem.kt @@ -52,11 +52,7 @@ class MatterCapacitorItem : Item { return if (isCreative) Decimal.LONG_MAX_VALUE else super.missingMatter } - override fun receiveMatterOuter(howMuch: Decimal, simulate: Boolean): Decimal { - return receiveMatterInner(howMuch, simulate) - } - - override fun receiveMatterInner(howMuch: Decimal, simulate: Boolean): Decimal { + override fun receiveMatter(howMuch: Decimal, simulate: Boolean): Decimal { if (isCreative) return howMuch val new = storedMatter.plus(howMuch.coerceAtMost(maxInput)).coerceAtMost(capacity) val diff = new.minus(storedMatter) @@ -68,11 +64,7 @@ class MatterCapacitorItem : Item { return diff } - override fun extractMatterOuter(howMuch: Decimal, simulate: Boolean): Decimal { - return extractMatterInner(howMuch, simulate) - } - - override fun extractMatterInner(howMuch: Decimal, simulate: Boolean): Decimal { + override fun extractMatter(howMuch: Decimal, simulate: Boolean): Decimal { if (isCreative) return howMuch val new = storedMatter.minus(howMuch.coerceAtMost(maxOutput)).moreThanZero() val diff = storedMatter.minus(new)