⁠
kyle wood: Re-work some NBT handling for better performance, and handle big files
This commit includes some default NBT formatting settings which result
in smaller files, and re-implements NbtVirtualFile to be a
LightVirtualFile. Part of that re-implementation is to make NBT files
only write to disk when saved manually, which is the behavior I
originally wanted anyways. This feels much safer and more stable than
whatever was happening originally.
By being a LightVirtualFile it seems the size limits / requirements on
Psi files are relaxed, but I don't fully understand the details. It
seems to handle larger NBT files better now.
Relevant issues: #1894 , #1893
This commit includes some default NBT formatting settings which result
in smaller files, and re-implements NbtVirtualFile to be a
LightVirtualFile. Part of that re-implementation is to make NBT files
only write to disk when saved manually, which is the behavior I
originally wanted anyways. This feels much safer and more stable than
whatever was happening originally.
By being a LightVirtualFile it seems the size limits / requirements on
Psi files are relaxed, but I don't fully understand the details. It
seems to handle larger NBT files better now.
Relevant issues: #1894 , #1893
- /*
- * Minecraft Dev for IntelliJ
- *
- * https://minecraftdev.org
- *
- * Copyright (c) 2022 minecraft-dev
- *
- * MIT License
- */
- package com.demonwav.mcdev.nbt.filetype
- import com.demonwav.mcdev.asset.PlatformAssets
- import com.intellij.openapi.fileTypes.FileType
- import com.intellij.openapi.vfs.VirtualFile
- object NbtFileType : FileType {
- override fun getDefaultExtension() = "nbt"
- override fun getIcon() = PlatformAssets.MINECRAFT_ICON
- override fun getCharset(file: VirtualFile, content: ByteArray): String? = null
- override fun getName() = "NBT"
- override fun getDescription() = "Named Binary Tag"
- override fun isBinary() = true
- override fun isReadOnly() = false
- }
- /*
- * Minecraft Dev for IntelliJ
- *
- * https://minecraftdev.org
- *
- * Copyright (c) 2022 minecraft-dev
- *
- * MIT License
- */
- package com.demonwav.mcdev.nbt.filetype
- import com.demonwav.mcdev.asset.PlatformAssets
- import com.intellij.openapi.fileTypes.FileType
- import com.intellij.openapi.vfs.VirtualFile
- object NbtFileType : FileType {
- override fun getDefaultExtension() = "nbt"
- override fun getIcon() = PlatformAssets.MINECRAFT_ICON
- override fun getCharset(file: VirtualFile, content: ByteArray): String? = null
- override fun getName() = "NBT"
- override fun getDescription() = "NBT"
- override fun isBinary() = true
- override fun isReadOnly() = false
- }