diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/mekanism/MekanismHooks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/mekanism/MekanismHooks.kt index 05741dcc6..be5a4d36e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/mekanism/MekanismHooks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/mekanism/MekanismHooks.kt @@ -22,13 +22,13 @@ object MekanismHooks { val androidEnergy = entity.matteryPlayer!!.androidEnergy val expectedAmount = container.energyPerTick - val remaining = androidEnergy.receiveEnergy(expectedAmount.toDecimal(), true).toFloatingLong() + val remaining = (androidEnergy.receiveEnergy(expectedAmount.toDecimal() * Mekanism2MatteryEnergyWrapper.mekanism2MtJ, true) * Mattery2MekanismEnergyWrapper.mtj2Mekanism).toFloatingLong() if (remaining.smallerThan(expectedAmount)) { val extracted = container.extract(expectedAmount.subtract(remaining), Action.EXECUTE, AutomationType.INTERNAL) if (!extracted.isZero) { - androidEnergy.receiveEnergy(extracted.toDecimal(), false) + androidEnergy.receiveEnergy(extracted.toDecimal() * Mekanism2MatteryEnergyWrapper.mekanism2MtJ, false) } } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/mekanism/Power.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/mekanism/Power.kt index fa7a627f6..0f2d21f9d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/mekanism/Power.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/mekanism/Power.kt @@ -49,36 +49,27 @@ private class DoubleLazy(onion: () -> Lazy) : Lazy { } } -private val mekanism2MtJ by DoubleLazy lazy@{ - try { - val conf = MekanismConfig.general - return@lazy LazyCache(conf.forgeConversionRate::get) { Decimal.ONE / it.toDecimal() } - } catch(err: Throwable) { - LOGGER.error("Unable to get Forge Energy to Mekanism Joules's conversion rate! Expect issues", err) - } - - return@lazy lazyOf(Decimal.ONE) -} - -private val mtj2Mekanism by DoubleLazy lazy@{ - try { - val conf = MekanismConfig.general - return@lazy LazyCache(conf.forgeConversionRate::get) { it.toDecimal() } - } catch(err: Throwable) { - LOGGER.error("Unable to get Mekanism Joules's to Forge Energy conversion rate! Expect issues", err) - } - - return@lazy lazyOf(Decimal.ONE) -} - class Mekanism2MatteryEnergyWrapper(private val power: IStrictEnergyHandler, private val forgePower: IEnergyStorage? = null) : IMatteryEnergyStorage { + companion object { + val mekanism2MtJ by DoubleLazy lazy@{ + try { + val conf = MekanismConfig.general + return@lazy LazyCache(conf.forgeConversionRate::get) { Decimal.ONE / it.toDecimal() } + } catch(err: Throwable) { + LOGGER.error("Unable to get Forge Energy to Mekanism Joules's conversion rate! Expect issues", err) + } + + return@lazy lazyOf(Decimal.ONE) + } + } + override fun extractEnergy(howMuch: Decimal, simulate: Boolean): Decimal { val action = when (simulate) { true -> Action.SIMULATE false -> Action.EXECUTE } - return power.extractEnergy((howMuch * mtj2Mekanism).toFloatingLong(), action).toDecimal() * mekanism2MtJ + return power.extractEnergy((howMuch * Mattery2MekanismEnergyWrapper.mtj2Mekanism).toFloatingLong(), action).toDecimal() * mekanism2MtJ } override fun receiveEnergy(howMuch: Decimal, simulate: Boolean): Decimal { @@ -87,7 +78,7 @@ class Mekanism2MatteryEnergyWrapper(private val power: IStrictEnergyHandler, pri false -> Action.EXECUTE } - return howMuch - power.insertEnergy((howMuch * mtj2Mekanism).toFloatingLong(), action).toDecimal() * mekanism2MtJ + return howMuch - power.insertEnergy((howMuch * Mattery2MekanismEnergyWrapper.mtj2Mekanism).toFloatingLong(), action).toDecimal() * mekanism2MtJ } override val canSetBatteryLevel: Boolean @@ -107,7 +98,7 @@ class Mekanism2MatteryEnergyWrapper(private val power: IStrictEnergyHandler, pri if (power.energyContainerCount != 1) throw UnsupportedOperationException("Can set power only when we have 1 energy container, ${power.energyContainerCount} present") - power.setEnergy(0, (value * mtj2Mekanism).toFloatingLong()) + power.setEnergy(0, (value * Mattery2MekanismEnergyWrapper.mtj2Mekanism).toFloatingLong()) } override val maxBatteryLevel: Decimal @@ -126,6 +117,19 @@ class Mekanism2MatteryEnergyWrapper(private val power: IStrictEnergyHandler, pri } class Mattery2MekanismEnergyWrapper(private val power: IMatteryEnergyStorage) : IStrictEnergyHandler { + companion object { + val mtj2Mekanism by DoubleLazy lazy@{ + try { + val conf = MekanismConfig.general + return@lazy LazyCache(conf.forgeConversionRate::get) { it.toDecimal() } + } catch(err: Throwable) { + LOGGER.error("Unable to get Mekanism Joules's to Forge Energy conversion rate! Expect issues", err) + } + + return@lazy lazyOf(Decimal.ONE) + } + } + override fun getEnergyContainerCount(): Int = 1 override fun getEnergy(container: Int): FloatingLong { @@ -158,11 +162,11 @@ class Mattery2MekanismEnergyWrapper(private val power: IMatteryEnergyStorage) : override fun insertEnergy(container: Int, howMuch: FloatingLong, action: Action): FloatingLong { val copy = howMuch.copy() - return copy.minusEqual((power.receiveEnergy(howMuch.toDecimal() * mekanism2MtJ, action.simulate()) * mtj2Mekanism).toFloatingLong()) + return copy.minusEqual((power.receiveEnergy(howMuch.toDecimal() * Mekanism2MatteryEnergyWrapper.mekanism2MtJ, action.simulate()) * mtj2Mekanism).toFloatingLong()) } override fun extractEnergy(container: Int, howMuch: FloatingLong, action: Action): FloatingLong { - return (power.extractEnergy(howMuch.toDecimal() * mekanism2MtJ, action.simulate()) * mtj2Mekanism).toFloatingLong() + return (power.extractEnergy(howMuch.toDecimal() * Mekanism2MatteryEnergyWrapper.mekanism2MtJ, action.simulate()) * mtj2Mekanism).toFloatingLong() } }