From 4cce6403ac5ca6857bbce6f65a258da2bd3d0a29 Mon Sep 17 00:00:00 2001 From: Ekaterina Vaartis Date: Sun, 1 Dec 2019 21:51:27 +0300 Subject: [PATCH] Fix trying to dereference a null MjReceiver It's now initialized lazily and the capabilities are stored in a companion object --- .../kotobank/kuarry/integration/MjReceiverImpl.kt | 6 ++++-- .../kuarry/tile_entity/KuarryTileEntity.kt | 14 ++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/org/kotobank/kuarry/integration/MjReceiverImpl.kt b/src/main/kotlin/org/kotobank/kuarry/integration/MjReceiverImpl.kt index 3d6c044..3cae605 100644 --- a/src/main/kotlin/org/kotobank/kuarry/integration/MjReceiverImpl.kt +++ b/src/main/kotlin/org/kotobank/kuarry/integration/MjReceiverImpl.kt @@ -11,8 +11,10 @@ import net.minecraftforge.energy.IEnergyStorage * */ class MjReceiverImpl(private val backingStorage: IEnergyStorage) : IMjReceiver { - val capConnector = MjAPI.CAP_RECEIVER - val capReceiver = MjAPI.CAP_CONNECTOR + companion object { + val capConnector = MjAPI.CAP_RECEIVER + val capReceiver = MjAPI.CAP_CONNECTOR + } override fun canConnect(other: IMjConnector) = true diff --git a/src/main/kotlin/org/kotobank/kuarry/tile_entity/KuarryTileEntity.kt b/src/main/kotlin/org/kotobank/kuarry/tile_entity/KuarryTileEntity.kt index 1a04d6e..d44695d 100644 --- a/src/main/kotlin/org/kotobank/kuarry/tile_entity/KuarryTileEntity.kt +++ b/src/main/kotlin/org/kotobank/kuarry/tile_entity/KuarryTileEntity.kt @@ -69,7 +69,12 @@ class KuarryTileEntity : TileEntity(), ITickable { private val energyStorage = EnergyStorage(100000, 2000, 5000) /** IMjReceiver implementation for BuildCraft compatibility */ - private lateinit var mjEnergyStorage: MjReceiverImpl + private val mjEnergyStorage: MjReceiverImpl? by lazy { + if (Loader.isModLoaded("buildcraftcore")) + MjReceiverImpl(energyStorage) + else + null + } /** A chest-sized inventory for inner item storage */ internal val inventory = object : ItemStackHandler(inventorySize) { @@ -130,9 +135,6 @@ class KuarryTileEntity : TileEntity(), ITickable { override fun onLoad() { if (world.isRemote) { - if (Loader.isModLoaded("buildcraftcore")) { - mjEnergyStorage = MjReceiverImpl(energyStorage) - } approxResourcesLeft = countAllMinable(calculateMinedChunks()) } @@ -143,7 +145,7 @@ class KuarryTileEntity : TileEntity(), ITickable { CapabilityEnergy.ENERGY, CapabilityItemHandler.ITEM_HANDLER_CAPABILITY -> true else -> when { Loader.isModLoaded("buildcraftcore") && - (capability == mjEnergyStorage.capConnector || capability == mjEnergyStorage.capReceiver) -> true + (capability == MjReceiverImpl.capConnector || capability == MjReceiverImpl.capReceiver) -> true else -> super.hasCapability(capability, facing) } @@ -159,7 +161,7 @@ class KuarryTileEntity : TileEntity(), ITickable { inventory as T else -> when { Loader.isModLoaded("buildcraftcore") && - (capability == mjEnergyStorage.capConnector || capability == mjEnergyStorage.capReceiver) -> + (capability == MjReceiverImpl.capConnector || capability == MjReceiverImpl.capReceiver) -> mjEnergyStorage as T else -> super.getCapability(capability, facing) }