YuRaNnNzZZ — Сегодня, в 19:51

ну так раздюпай
This commit is contained in:
DBotThePony 2023-06-28 19:59:13 +07:00
parent 2f59edd606
commit f08635e192
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 33 additions and 29 deletions

View File

@ -22,13 +22,13 @@ object MekanismHooks {
val androidEnergy = entity.matteryPlayer!!.androidEnergy val androidEnergy = entity.matteryPlayer!!.androidEnergy
val expectedAmount = container.energyPerTick 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)) { if (remaining.smallerThan(expectedAmount)) {
val extracted = container.extract(expectedAmount.subtract(remaining), Action.EXECUTE, AutomationType.INTERNAL) val extracted = container.extract(expectedAmount.subtract(remaining), Action.EXECUTE, AutomationType.INTERNAL)
if (!extracted.isZero) { if (!extracted.isZero) {
androidEnergy.receiveEnergy(extracted.toDecimal(), false) androidEnergy.receiveEnergy(extracted.toDecimal() * Mekanism2MatteryEnergyWrapper.mekanism2MtJ, false)
} }
} }
} }

View File

@ -49,7 +49,9 @@ private class DoubleLazy<T>(onion: () -> Lazy<T>) : Lazy<T> {
} }
} }
private val mekanism2MtJ by DoubleLazy lazy@{ class Mekanism2MatteryEnergyWrapper(private val power: IStrictEnergyHandler, private val forgePower: IEnergyStorage? = null) : IMatteryEnergyStorage {
companion object {
val mekanism2MtJ by DoubleLazy lazy@{
try { try {
val conf = MekanismConfig.general val conf = MekanismConfig.general
return@lazy LazyCache(conf.forgeConversionRate::get) { Decimal.ONE / it.toDecimal() } return@lazy LazyCache(conf.forgeConversionRate::get) { Decimal.ONE / it.toDecimal() }
@ -58,27 +60,16 @@ private val mekanism2MtJ by DoubleLazy lazy@{
} }
return@lazy lazyOf(Decimal.ONE) 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 {
override fun extractEnergy(howMuch: Decimal, simulate: Boolean): Decimal { override fun extractEnergy(howMuch: Decimal, simulate: Boolean): Decimal {
val action = when (simulate) { val action = when (simulate) {
true -> Action.SIMULATE true -> Action.SIMULATE
false -> Action.EXECUTE 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 { override fun receiveEnergy(howMuch: Decimal, simulate: Boolean): Decimal {
@ -87,7 +78,7 @@ class Mekanism2MatteryEnergyWrapper(private val power: IStrictEnergyHandler, pri
false -> Action.EXECUTE 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 override val canSetBatteryLevel: Boolean
@ -107,7 +98,7 @@ class Mekanism2MatteryEnergyWrapper(private val power: IStrictEnergyHandler, pri
if (power.energyContainerCount != 1) if (power.energyContainerCount != 1)
throw UnsupportedOperationException("Can set power only when we have 1 energy container, ${power.energyContainerCount} present") 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 override val maxBatteryLevel: Decimal
@ -126,6 +117,19 @@ class Mekanism2MatteryEnergyWrapper(private val power: IStrictEnergyHandler, pri
} }
class Mattery2MekanismEnergyWrapper(private val power: IMatteryEnergyStorage) : IStrictEnergyHandler { 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 getEnergyContainerCount(): Int = 1
override fun getEnergy(container: Int): FloatingLong { 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 { override fun insertEnergy(container: Int, howMuch: FloatingLong, action: Action): FloatingLong {
val copy = howMuch.copy() 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 { 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()
} }
} }