Ошибка при чтении NBT

Версия Minecraft
1.12.2
1,470
19
189
Сделал блок с тайлом, зарегистрировал всё, но при изменении значения NBT и перезаходе в лог летит ошибка
A TileEntity energytools:small_energy_storage has thrown an exception during loading, its state cannot be restored. Report this to the mod author
 
1,470
19
189
GameRegistry.registerTileEntity(smallEnergyStorage.getTileEntityClass(), smallEnergyStorage.registryName)
Зарегистрировал так, как в учебнике написано.
Tile Entity - Minecraft Modding - тут
 
3,005
192
592
Регал после блока?
Попробуй в скобках указать (TileClass.class, "testname"). (Класс заменить на свой, имя рандомное, для тестов).
 
3,005
192
592
Мир пробовал пересоздавать?
Мб какой-то косяк с записью был.
 
3,005
192
592
Если крашит на 122 строке - это значит объект не может создать.
Если крашит на 136 строке - это значит либо setWorldCreate кривой, либо readFromNBT.
 
1,470
19
189
Блок
Kotlin:
class SmallEnergyStorage(name: String): BlockEnergyTileEntity<SmallEnergyStorageTileEntity>(name) {
    override fun getTileEntityClass(): Class<SmallEnergyStorageTileEntity> = SmallEnergyStorageTileEntity::class.java
    override fun createTileEntity(world: World, blockstate: IBlockState): SmallEnergyStorageTileEntity = SmallEnergyStorageTileEntity(200000)

    override fun onBlockActivated(world: World, pos: BlockPos, state: IBlockState, player: EntityPlayer, hand: EnumHand, facing: EnumFacing, hitX: Float, hitY: Float, hitZ: Float): Boolean {
        if(!world.isRemote) {
            val tileEntity = getTileEntity(world, pos)
            if(facing == EnumFacing.DOWN) tileEntity.extractEnergy(1000)
            else if(facing == EnumFacing.UP) tileEntity.receiveEnergy(1000)
            println(tileEntity.getEnergyStored())
        }
        return true
    }
}

Тайл для блока
Kotlin:
class SmallEnergyStorageTileEntity(maxEnergy: Int): EnergyStorage(maxEnergy) {
    private var energy = 0

    override fun writeToNBT(compound: NBTTagCompound): NBTTagCompound {
        compound.setInteger("energy", energy)
        return super.writeToNBT(compound)
    }

    override fun readFromNBT(compound: NBTTagCompound) {
        energy = compound.getInteger("energy")
        super.readFromNBT(compound)
    }
}

Основа для тайлов
Kotlin:
open class EnergyStorage(private val maxEnergy: Int): TileEntity() {
    private var energy = 0

    override fun writeToNBT(compound: NBTTagCompound): NBTTagCompound {
        compound.setInteger("energy", energy)
        return super.writeToNBT(compound)
    }

    override fun readFromNBT(compound: NBTTagCompound) {
        energy = compound.getInteger("energy")
        super.readFromNBT(compound)
    }

    fun getMaxEnergyStored(): Int = maxEnergy

    fun getEnergyStored(): Int = energy

    fun extractEnergy(count: Int): Boolean {
        if(count <= energy) {
            energy -= count
            markDirty()
            return true
        }
        return false
    }
    
    fun receiveEnergy(count: Int): Boolean = if(count + energy >= maxEnergy) { energy = maxEnergy; markDirty(); true }
        else { energy += count; markDirty(); true }
}

Регистрация
Kotlin:
fun register() {
    setRegister(copperOre)
    setRegister(smallEnergyStorage)

    GameRegistry.registerTileEntity(SmallEnergyStorageTileEntity::class.java, "small_energy_storage")
}
 
3,005
192
592
В 2х тайлах прописано одно и тоже.
Код:
    override fun readFromNBT(compound: NBTTagCompound) {
        energy = compound.getInteger("energy")
        super.readFromNBT(compound)
    }
 
Сверху