Make mekanism energy conversion update
This commit is contained in:
parent
2dd617b617
commit
55592a0e11
@ -17,28 +17,54 @@ import java.util.WeakHashMap
|
||||
|
||||
private val LOGGER = LogManager.getLogger()
|
||||
|
||||
// TODO: those are cached indefinitely, when, in fact, they can easily change
|
||||
private class LazyCache<O, T>(private val provider: () -> O, private val computer: (O) -> T) : Lazy<T> {
|
||||
private var cache: T? = null
|
||||
private var observed: O? = null
|
||||
|
||||
private val mekanism2MtJ by lazy {
|
||||
override fun isInitialized(): Boolean {
|
||||
return cache != null
|
||||
}
|
||||
|
||||
override val value: T get() {
|
||||
if (cache == null || observed == null || observed != provider.invoke()) {
|
||||
observed = provider.invoke()
|
||||
cache = computer.invoke(observed ?: throw ConcurrentModificationException())
|
||||
}
|
||||
|
||||
return cache ?: throw ConcurrentModificationException()
|
||||
}
|
||||
}
|
||||
|
||||
private class DoubleLazy<T>(onion: () -> Lazy<T>) : Lazy<T> {
|
||||
private val onion = lazy(onion)
|
||||
override val value: T
|
||||
get() = onion.value.value
|
||||
|
||||
override fun isInitialized(): Boolean {
|
||||
return onion.isInitialized() && onion.value.isInitialized()
|
||||
}
|
||||
}
|
||||
|
||||
private val mekanism2MtJ by DoubleLazy lazy@{
|
||||
try {
|
||||
val conf = MekanismConfig.general
|
||||
return@lazy ImpreciseFraction.ONE / conf.forgeConversionRate.get().toImpreciseFraction()
|
||||
return@lazy LazyCache(conf.forgeConversionRate::get) { ImpreciseFraction.ONE / it.toImpreciseFraction() }
|
||||
} catch(err: Throwable) {
|
||||
LOGGER.error("Unable to get Forge Energy to Mekanism Joules's conversion rate! Expect issues", err)
|
||||
}
|
||||
|
||||
return@lazy ImpreciseFraction.ONE
|
||||
return@lazy lazyOf(ImpreciseFraction.ONE)
|
||||
}
|
||||
|
||||
private val mtj2Mekanism by lazy {
|
||||
private val mtj2Mekanism by DoubleLazy lazy@{
|
||||
try {
|
||||
val conf = MekanismConfig.general
|
||||
return@lazy conf.forgeConversionRate.get().toImpreciseFraction()
|
||||
return@lazy LazyCache(conf.forgeConversionRate::get) { it.toImpreciseFraction() }
|
||||
} catch(err: Throwable) {
|
||||
LOGGER.error("Unable to get Mekanism Joules's to Forge Energy conversion rate! Expect issues", err)
|
||||
}
|
||||
|
||||
return@lazy ImpreciseFraction.ONE
|
||||
return@lazy lazyOf(ImpreciseFraction.ONE)
|
||||
}
|
||||
|
||||
class Mekanism2MatteryEnergyWrapper(private val power: IStrictEnergyHandler) : IMatteryEnergyStorage {
|
||||
|
Loading…
Reference in New Issue
Block a user