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 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)
}
}
}

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 {
val conf = MekanismConfig.general
return@lazy LazyCache(conf.forgeConversionRate::get) { Decimal.ONE / it.toDecimal() }
@ -59,26 +61,15 @@ private val mekanism2MtJ by DoubleLazy lazy@{
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 {
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()
}
}