Coder Social home page Coder Social logo

nbt-studio's People

Contributors

tryashtar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nbt-studio's Issues

Text height is not enough in some cases

The height of rows in the Tree View doesn't seem to be high enough to display tall symbols with top combining diacritics and low symbols with bottom combining diacritics. For example, letter Å with acute on top of it, Ǻ, doesn't seem to fit the line. Another example would be an Arabic /ri/ syllable (a /r/ letter with bottom /i/ diacritic): رِ. The same seems to apply to the Tag Editor window. Here are some screenshots: https://imgur.com/a/4lqIZzk.

I'm not sure if this is any easy to change, especially in case of the Tag Editor, but still I think it's important to point out that such problem exists and might mean a lot to some users. Though, since these things are likely pretty rare in terms of what most users would want to store in NBT format, I think the changes to text's height would be better off conditional: if there's any symbol like that to be displayed, set the height a bit higher, but otherwise keep the height default. Or maybe changing the hardcoded height just to cover for these marginal cases wouldn't look too bad on the more usual latin-script input - in this case, maybe just changing the hardcoded one would be nice.

Error while loading files with Mincraft 1.20.12

If i try to load the level.dat i get the following error:

4 files failed to load:

levelname.txt
world_behavior_packs.json
world_icon.jpeg
world_resource_packs.json

File did not begin with a '{'
Could not auto-detect compression format.
Invalid region file, thinks there's a 466944-long chunk at position 384188416 but file is only 12 long
Attempted to read past the end of the stream.
Falscher Parameter. : 'C:\Users\Andre\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\minecraftWorlds\sYSkZE3+IwA=\world_behavior_packs.json'
Falscher Parameter. : 'C:\Users\Andre\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\minecraftWorlds\sYSkZE3+IwA=\world_icon.jpeg'
Falscher Parameter. : 'C:\Users\Andre\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\minecraftWorlds\sYSkZE3+IwA=\world_resource_packs.json'

Load as SNBT:
System.FormatException: File did not begin with a '{'
at NbtStudio.NbtFile.CreateFromSnbt(String path)
at NbtStudio.NbtFile.<>c__DisplayClass32_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as NBT (compression: AutoDetect, big endian: True, bedrock header: False):
System.IO.InvalidDataException: Could not auto-detect compression format.
at fNbt.NbtFile.DetectCompression(Stream stream)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression, TagSelector selector)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression)
at NbtStudio.NbtFile.CreateFromNbt(String path, NbtCompression compression, Boolean big_endian, Boolean bedrock_header)
at NbtStudio.NbtFile.<>c__DisplayClass34_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as NBT (compression: AutoDetect, big endian: False, bedrock header: False):
System.IO.InvalidDataException: Could not auto-detect compression format.
at fNbt.NbtFile.DetectCompression(Stream stream)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression, TagSelector selector)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression)
at NbtStudio.NbtFile.CreateFromNbt(String path, NbtCompression compression, Boolean big_endian, Boolean bedrock_header)
at NbtStudio.NbtFile.<>c__DisplayClass34_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as NBT (compression: AutoDetect, big endian: False, bedrock header: True):
System.IO.InvalidDataException: Could not auto-detect compression format.
at fNbt.NbtFile.DetectCompression(Stream stream)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression, TagSelector selector)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression)
at NbtStudio.NbtFile.CreateFromNbt(String path, NbtCompression compression, Boolean big_endian, Boolean bedrock_header)
at NbtStudio.NbtFile.<>c__DisplayClass34_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as region file:
System.FormatException: Invalid region file, thinks there's a 466944-long chunk at position 384188416 but file is only 12 long
at NbtStudio.RegionFile.Load()
at NbtStudio.RegionFile..ctor(String path)
at NbtStudio.RegionFile.<>c__DisplayClass35_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as SNBT:
System.FormatException: File did not begin with a '{'
at NbtStudio.NbtFile.CreateFromSnbt(String path)
at NbtStudio.NbtFile.<>c__DisplayClass32_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as NBT (compression: AutoDetect, big endian: True, bedrock header: False):
System.IO.InvalidDataException: Could not auto-detect compression format.
at fNbt.NbtFile.DetectCompression(Stream stream)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression, TagSelector selector)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression)
at NbtStudio.NbtFile.CreateFromNbt(String path, NbtCompression compression, Boolean big_endian, Boolean bedrock_header)
at NbtStudio.NbtFile.<>c__DisplayClass34_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as NBT (compression: AutoDetect, big endian: False, bedrock header: False):
System.IO.InvalidDataException: Could not auto-detect compression format.
at fNbt.NbtFile.DetectCompression(Stream stream)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression, TagSelector selector)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression)
at NbtStudio.NbtFile.CreateFromNbt(String path, NbtCompression compression, Boolean big_endian, Boolean bedrock_header)
at NbtStudio.NbtFile.<>c__DisplayClass34_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as NBT (compression: AutoDetect, big endian: False, bedrock header: True):
System.IO.EndOfStreamException: Attempted to read past the end of the stream.
at fNbt.NbtFile.DetectCompression(Stream stream)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression, TagSelector selector)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression)
at NbtStudio.NbtFile.CreateFromNbt(String path, NbtCompression compression, Boolean big_endian, Boolean bedrock_header)
at NbtStudio.NbtFile.<>c__DisplayClass34_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as region file:
System.IO.IOException: Falscher Parameter. : 'C:\Users\Andre\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\minecraftWorlds\sYSkZE3+IwA=\world_behavior_packs.json'
at System.IO.Strategies.FileStreamHelpers.ThrowInvalidArgument(SafeFileHandle handle)
at System.IO.Strategies.OSFileStreamStrategy.Seek(Int64 offset, SeekOrigin origin)
at System.IO.Strategies.BufferedFileStreamStrategy.Seek(Int64 offset, SeekOrigin origin)
at System.IO.FileStream.Seek(Int64 offset, SeekOrigin origin)
at NbtStudio.Chunk.Load()
at NbtStudio.RegionFile.Load()
at NbtStudio.RegionFile..ctor(String path)
at NbtStudio.RegionFile.<>c__DisplayClass35_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as SNBT:
System.FormatException: File did not begin with a '{'
at NbtStudio.NbtFile.CreateFromSnbt(String path)
at NbtStudio.NbtFile.<>c__DisplayClass32_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as NBT (compression: AutoDetect, big endian: True, bedrock header: False):
System.IO.InvalidDataException: Could not auto-detect compression format.
at fNbt.NbtFile.DetectCompression(Stream stream)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression, TagSelector selector)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression)
at NbtStudio.NbtFile.CreateFromNbt(String path, NbtCompression compression, Boolean big_endian, Boolean bedrock_header)
at NbtStudio.NbtFile.<>c__DisplayClass34_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as NBT (compression: AutoDetect, big endian: False, bedrock header: False):
System.IO.InvalidDataException: Could not auto-detect compression format.
at fNbt.NbtFile.DetectCompression(Stream stream)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression, TagSelector selector)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression)
at NbtStudio.NbtFile.CreateFromNbt(String path, NbtCompression compression, Boolean big_endian, Boolean bedrock_header)
at NbtStudio.NbtFile.<>c__DisplayClass34_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as NBT (compression: AutoDetect, big endian: False, bedrock header: True):
System.IO.InvalidDataException: Could not auto-detect compression format.
at fNbt.NbtFile.DetectCompression(Stream stream)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression, TagSelector selector)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression)
at NbtStudio.NbtFile.CreateFromNbt(String path, NbtCompression compression, Boolean big_endian, Boolean bedrock_header)
at NbtStudio.NbtFile.<>c__DisplayClass34_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as region file:
System.IO.IOException: Falscher Parameter. : 'C:\Users\Andre\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\minecraftWorlds\sYSkZE3+IwA=\world_icon.jpeg'
at System.IO.Strategies.FileStreamHelpers.ThrowInvalidArgument(SafeFileHandle handle)
at System.IO.Strategies.OSFileStreamStrategy.Seek(Int64 offset, SeekOrigin origin)
at System.IO.Strategies.BufferedFileStreamStrategy.Seek(Int64 offset, SeekOrigin origin)
at System.IO.FileStream.Seek(Int64 offset, SeekOrigin origin)
at NbtStudio.Chunk.Load()
at NbtStudio.RegionFile.Load()
at NbtStudio.RegionFile..ctor(String path)
at NbtStudio.RegionFile.<>c__DisplayClass35_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as SNBT:
System.FormatException: File did not begin with a '{'
at NbtStudio.NbtFile.CreateFromSnbt(String path)
at NbtStudio.NbtFile.<>c__DisplayClass32_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as NBT (compression: AutoDetect, big endian: True, bedrock header: False):
System.IO.InvalidDataException: Could not auto-detect compression format.
at fNbt.NbtFile.DetectCompression(Stream stream)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression, TagSelector selector)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression)
at NbtStudio.NbtFile.CreateFromNbt(String path, NbtCompression compression, Boolean big_endian, Boolean bedrock_header)
at NbtStudio.NbtFile.<>c__DisplayClass34_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as NBT (compression: AutoDetect, big endian: False, bedrock header: False):
System.IO.InvalidDataException: Could not auto-detect compression format.
at fNbt.NbtFile.DetectCompression(Stream stream)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression, TagSelector selector)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression)
at NbtStudio.NbtFile.CreateFromNbt(String path, NbtCompression compression, Boolean big_endian, Boolean bedrock_header)
at NbtStudio.NbtFile.<>c__DisplayClass34_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as NBT (compression: AutoDetect, big endian: False, bedrock header: True):
System.IO.EndOfStreamException: Attempted to read past the end of the stream.
at fNbt.NbtFile.DetectCompression(Stream stream)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression, TagSelector selector)
at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression)
at NbtStudio.NbtFile.CreateFromNbt(String path, NbtCompression compression, Boolean big_endian, Boolean bedrock_header)
at NbtStudio.NbtFile.<>c__DisplayClass34_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Load as region file:
System.IO.IOException: Falscher Parameter. : 'C:\Users\Andre\AppData\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\minecraftWorlds\sYSkZE3+IwA=\world_resource_packs.json'
at System.IO.Strategies.FileStreamHelpers.ThrowInvalidArgument(SafeFileHandle handle)
at System.IO.Strategies.OSFileStreamStrategy.Seek(Int64 offset, SeekOrigin origin)
at System.IO.Strategies.BufferedFileStreamStrategy.Seek(Int64 offset, SeekOrigin origin)
at System.IO.FileStream.Seek(Int64 offset, SeekOrigin origin)
at NbtStudio.Chunk.Load()
at NbtStudio.RegionFile.Load()
at NbtStudio.RegionFile..ctor(String path)
at NbtStudio.RegionFile.<>c__DisplayClass35_0.b__0()
at TryashtarUtils.Utility.Failable1..ctor(Func1 operation, String description)

Pasting text into the hex view of any array tag's edit dialog enters those hex values as plain text rather than hex values.

example: I copy 5 bytes from say.. HxD, being 43 52 41 46 54 (CRAFT).
If I open the edit dialog for a byte array tag currently and paste into the hex view, it will just paste in 43 52 41 46 54 as if it were plain text. This is annoying.
What it should do is actually be pasting the numbers those hex values represent into the tag, or if the text contains characters that aren't whitespace or 0-9 a-f A-F, it should yell at you that its not valid hex data.

I'm considering this a bug but it could also count as a feature request? Unsure.

.NET version for version 1.15

I tried downloading the newest version of nbtstudio and as expected, it asks me to download a new version of .NET. I am under Windows so I download the latest version (5.0.8 x86). I then try to install nbtstudio again but it asks me to download .NET again. I have also tried to install the same version of .NET but x64 it tells me that : "The framework 'Micosoft.WindowsDesktop.App', version '5.0.0' was not found. I also tried with the exact version (5.0.0) but I get the same error.

question: Is Linux supported?

I was just wondering if i could use this on Linux since NBT Explorer and Universal Minecraft Editor both don't seem to work (even with WINE). I hope you could add support for Linux soon because i do not want to make my own NBT Editor...

Cannot copy double tags (or tags containing them), possibly related to regional settings

This might be related to regional settings. My system's regional settings use comma (,) as decimal separator, and NBTStudio does display double tags like that. Going into edit mode, the value is pre-filled with the value using a comma, rather than a point, which is also invalid.

Note that it would be absolutely fine to just always display a point, and don't care about regional settings. Programming and file formats and variables are always English.

Previews for items, entities, etc.

For example, it's very tedious to open each tag and check the plain text when going through a player's inventory NBT. Instead, it could look like this:

image

The same applies to other things. Here's an example with entities and enchantments:

image

This feature would be very useful and save a lot of time, at least to me.

(These screenshots are weird and 3D because they're from the homepage of https://www.universalminecrafteditor.com, which implements these features and is where I got the idea from.)

Update to .NET 6

Since NBT Studio upgraded to .NET 5, it is mandatory to install .NET Runtime to use NBT Studio. (.NET Framework 4.8 is shipped with Windows 10/11)

But .NET doesn't have 'backward compatibility'. So even if you installed .NET 6 Runtime, you must install .NET 5 Runtime which is now marked as EOL to use NBT Studio. This makes me uncomfortable.

This is just suggestion. If you have some reason that makes you cannot update to .NET 6, it is ok.

Bedrock Edition NBT

How can I use this to edit chunk data or player data for Minecraft Bedrock Edition?

Bulk editor doesn't support complex data

When there are several compounds with data that's related to some same thing, to account for any changes to that thing you'd have to manually edit every single compound. So maybe it would be nice to have a special case of the bulk editor for this: a tree view window with just the equal tags from the selected compounds. Here's what it could look like:

image
image
image

Linux & Mac Os Port?

Are there plans to port this, or Be able to compile for other Operating Systems, I for sure want to use this for bedrock on Linux(Linux & Mac People can play via a launcher with the android version running)
Also this looks pretty good for Java edition

Feature Request: Dark Mode UI?

Is there already a dark mode that I can access or is it controlled by Windows or something else? If not, then can you please add it?

Saving Bedrock worlds messes with booleans in manifest

Opening a bedrock world using NBT Studio 1.15 using the "Open Folder" button, causes worlds being prepared for the Minecraft Marketplace (which have a manifest.json in the root folder with the level.dat) to have their

"lock_template_options": true

changed from true to 1

This causes the marketplace validator to fail the submission since it only accepts booleans, not integers.

System Information
NBT Studio 1.15
Windows 10 Desktop PC (OS BUILD 19044.1645)

Steps to reproduce

  1. Open a world containing a manifest.json using the "Open Folder" option.
  2. Expand the level.dat object
  3. Add a new String Tag called "baseGameVersion" and set the value to "1.18.2" (or otherwise make a change to enable saving)
  4. Save the world using the Save icon.
  5. Observe that "true" has been replaced by "1" in the manifest.json

For your convenience, here is a standard manifest.json which appears in the root folder with the level.dat:

    "header": {
        "name": "pack.name",
        "description": "pack.description",
        "version": [1, 0, 0],
        "uuid": "45b8932f-1cc0-4c22-affd-3bbe24705d22",
        "lock_template_options": true,
        "base_game_version": [1, 18, 2]
    },
    "modules": [
        {
            "version": [1, 0, 0],
            "type": "world_template",
            "uuid": "845ae5ab-a357-4c30-9761-cbeb17d9a17b"
        }
    ],
    "format_version": 2
}

Plans for more bedrock support?

I got really excited when I came across this repository, but it seems it only supports structure files for Bedrock? Are there plans to add more functionality surrounding Bedrock, and if so, do you have any kind of estimated timeline?

Unable to search for UUIDs

So far I was unable to succesfully search for UUIDs.
Since UUIDs are 4 Integers, how do I have to input them in the "Value" field?

Feature: Find and Replace

There should be a find and replace option so that you can easily replace multiple of the same nbt byte. This would be extremely useful for creators, map makers, etc.

(De)Select All Children raised an exception

First of all thanks for this very handy tool.
Exception System.InvalidOperationException: Collection was modified.
I had a quick look at your code.
Changing foreach (var node in selected) to foreach (var node in selected.ToList()) @ lines 1147 and 1156 in \NbtStudio\UI\MainForm.cs fixes it.

Find/Replace function?

Hello @tryashtar and TYSM for carrying on the work of jaquadro! I am trying to do a global find/replace in my world region files. I want to replace every instance of "minecraft:deep_lukewarm_ocean" with "minecraft:ocean" -- is this possible in the current version of NBT Studio?

image

Suggestion: Tabs

It would be quite neat to open multiple files in 1 window using tabs
Alternatively there should be a setting to toggle between opening in tabs and separate windows

Text doesn't fully render in the tree

The text doesn't seem to fully render in the tree. This might happen because I'm using a 1920x1080 screen, since I was having issues with blurry text earlier. (The blurry text is somehow fixed by pressing "Open Folder," but that causes this to happen.)

Images:
image
image

adding plugins to automate the work.

add the ability for users to create their own plugins. for example, to edit snbt when opening a schematic file and editing TileEntities. where the user can write the command: replace all " /setblock ~ ~+2 ~+5 glass "with" /setblock ~ ~+2 ~+8 bedrock" which will be convenient if there are a lot of such lines. or another example: to all the numbers found between the lines "map_uuid" and "L}}" increase by the number entered by the user. thus, it will greatly speed up the work for those who perform the same type of actions. although to create plugins, people will need to know "C"

[Suggestion] Add an option in search to disable results previewing.

Hello.
I recently discovered a problem with my modded world and had to remove a lot of data from region files due to some errors. Each region file in my world has around 6 thousands of bad entries, and opening every NBT tree in NBT Studio takes a really long time. Moreover, when I am deleting the entries, it has to redraw everything again, and I had to waste ~10 hours until I found out that you can just close the trees and do the deletion. Instead of taking 10 minutes for a deletion per file, it now took seconds.
Can you please add a setting so that previewing found entries can be disabled? That would really help when working with large data set with a lot of entries, like world regions.
Thanks.

More fancier find/replace

I designed the search/bulk edit system how I did because NBTExplorer's weird rule system always confused me greatly. Although some users want better tools.

What would be cool is the ability to select nodes based on an arbitrary predicate, then perform an arbitrary operation on your selection. A possible use case would be adding an enchantment to all diamond swords; you'd need a way to select the diamond sword ID tag, then add a relatively adjacent tag with a certain value.

I could do that in LINQ in 5 seconds, but adding a UI for it and porting all the possible conditions and operations, especially in an intuitive way, is a lot of work. This might never happen.

Add buttons in the editor for moving items up and down within a list

Currently, the only way to reorder list items is by dragging and dropping them. However, for those who are particularly unskilled with a mouse and cannot drag and drop, such as disabled, young, or elderly, the only way to reorder list items is by deleting all list items up to the point where the order needs to be changed and then adding them back in the correct order. Even I find myself needing to concentrate more when dragging and dropping items to reorder them, ensuring I don't accidentally move them between layers.

To improve accessibility, buttons should be added to the toolbar and/or edit menu to move items up and down within list tags. Other NBT editors do have these buttons so I feel like this is a missing puzzle piece.

File saving, String Tag editing and Ampersand symbols display

File saving

It seems that currently the way NBT Studio saves files is just writing over the old bytes (can be easily spotted in case of removing parts of NBT structure and saving the file - the filesize stays the same). This doesn't seem to create any problems workflow-wise, but the compression feature kind of loses its point when the compressed bytes just get written on top of the uncompressed ones (in case of enabling the compression after saving previously with some data), resulting in a file that is the same size (probably such thing would barely matter for Minecraft files editing due to their constant resaving by the game, but I like using the Studio for manual own data editing). If I'm not mistaken, it's the NbtStudio.ExportSettings::Export()'s System.IO.File::OpenWrite() usage that is causing this, maybe just replacing it with the System.IO.File::Create() could be an easy fix.

String Tag editing

When editing String tags, the window is pretty small and isn't resizeable. Not really a bug, but I think it would be a nice thing to have the alternative for when needed. Also, having controls for line wrapping (maybe in the SNBT editor too) would be nice. And maybe a thing that could be helpful when working with large strings, is a multiline tooltip when hovering over a String tag that has line breaks.

Ampersand symbols display

The tag tree seems to display ampersand symbols as combining underscores (underlining the letter that follows them). Maybe I'm missing something, but I don't think this is indended (although not sure if is any easy to fix).

Feature Request : Export to txt

I would really appreciate a feature that exports the nbt data to a txt file. If it were to be created, this would make it the ifrst NBT editor with the feature. Below is an example of how it shoud be:

  • region
    |__ r.0.0.mca
    ⠀⠀|__ Chunk [0,0] in world at (0, 0): [0 entries]
    ⠀⠀⠀⠀|__ xPos: 0
    ⠀⠀⠀⠀|__ zPos: 0
    ⠀⠀⠀⠀|__ InhabitedTime:0

Just like the example above would be great!

Feature Request : Automatic Sort?

NBT Studio seems to not sort a to z automatically
It kinda annoying when you open for example like the level.dat
image
So, when you want to sort, you have to click the object and click the sort button
image
So please, maybe there is a setting that automatically sorts those, just like NBT Editor

File loading problems

So, it seems like there are two different "empty" region files that are failing to load:

  • Actually empty, zero-length files
  • Files with a full header, but all 8196 bytes are zeros. And then some trailing data sometimes

Both of these should load as empty regions. But... isn't it a bad idea to treat every empty file as a region file? Yes, that's why we should do this:

  • Guess the file format from the file extension: .nbt is probably binary NBT... .mca is probably a region file
  • Try to load it that way, with some special logic. Empty files just get new'd up. Region files bypass the one-chunk check
  • If that fails (or unrecognized extension), try all other ways of loading the file, without the special logic

Also we need to fail faster at file type verification; exceptions are cringe. You already did both of these things in Quick Music so just do that again

Can not open .mcstructure files (anymore?)

If i do remember correctly, in older versions this was working just fine, but i might confuse it with .structure files.

What i find weird is that it tries to load them as SNBT. It should be little endian

Here is a Go project in case you need to look up something about the format, since the MC Wiki is useless as always: https://github.com/df-mc/structure/blob/651c5d323dbfb24991dafdb72129e2a8a478a81b/structure.go#L23

File
Version 1.15

Log:

1 file failed to load:

BelltowerWF.mcstructure

File did not begin with a '{'
Attempted to read past the end of the stream.
Region doesn't contain any chunks

Load as SNBT:
System.FormatException: File did not begin with a '{'
   at NbtStudio.NbtFile.CreateFromSnbt(String path)
   at NbtStudio.NbtFile.<>c__DisplayClass32_0.<TryCreateFromSnbt>b__0()
   at TryashtarUtils.Utility.Failable`1..ctor(Func`1 operation, String description)

Load as NBT (compression: AutoDetect, big endian: True, bedrock header: False):
System.IO.EndOfStreamException: Attempted to read past the end of the stream.
   at fNbt.NbtFile.DetectCompression(Stream stream)
   at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression, TagSelector selector)
   at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression)
   at NbtStudio.NbtFile.CreateFromNbt(String path, NbtCompression compression, Boolean big_endian, Boolean bedrock_header)
   at NbtStudio.NbtFile.<>c__DisplayClass34_0.<TryCreateFromNbt>b__0()
   at TryashtarUtils.Utility.Failable`1..ctor(Func`1 operation, String description)

Load as NBT (compression: AutoDetect, big endian: False, bedrock header: False):
System.IO.EndOfStreamException: Attempted to read past the end of the stream.
   at fNbt.NbtFile.DetectCompression(Stream stream)
   at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression, TagSelector selector)
   at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression)
   at NbtStudio.NbtFile.CreateFromNbt(String path, NbtCompression compression, Boolean big_endian, Boolean bedrock_header)
   at NbtStudio.NbtFile.<>c__DisplayClass34_0.<TryCreateFromNbt>b__0()
   at TryashtarUtils.Utility.Failable`1..ctor(Func`1 operation, String description)

Load as NBT (compression: AutoDetect, big endian: False, bedrock header: True):
System.IO.EndOfStreamException: Attempted to read past the end of the stream.
   at fNbt.NbtFile.DetectCompression(Stream stream)
   at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression, TagSelector selector)
   at fNbt.NbtFile.LoadFromStream(Stream stream, NbtCompression compression)
   at NbtStudio.NbtFile.CreateFromNbt(String path, NbtCompression compression, Boolean big_endian, Boolean bedrock_header)
   at NbtStudio.NbtFile.<>c__DisplayClass34_0.<TryCreateFromNbt>b__0()
   at TryashtarUtils.Utility.Failable`1..ctor(Func`1 operation, String description)

Load as region file:
System.FormatException: Region doesn't contain any chunks
   at NbtStudio.RegionFile.Load()
   at NbtStudio.RegionFile..ctor(String path)
   at NbtStudio.RegionFile.<>c__DisplayClass35_0.<TryCreate>b__0()
   at TryashtarUtils.Utility.Failable`1..ctor(Func`1 operation, String description)

support "construction" file

this file is a new format created for the Amulet map editor. it is not supported in NBT Studio. please add support for structire files

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.