Waila NBT (Display player defined specific NBT info on Waila)

  • FTB will be shutting down this forum by the end of July. To participate in our community discussions, please join our Discord! https://ftb.team/discord

Epix

New Member
Jul 29, 2019
11
4
1
Most latest information is also on
My Website: http://blog.exz.me/wailanbt/
MCF: http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/wip-mods/2220567
This thread may not showing all goods because 20 images restriction.
Download: http://www.curse.com/mc-mods/minecraft/224417-waila-nbt
But feel free to post here. I'll read and update this thread too.

Description
Waila NBT is a mod to show player defined specific NBT info on Waila HUD.
Waila NBT is a Client-Side addon for Waila. And In-Game NBTEdit (1.7.10 version)is needed to look up NBT data structure.
Examples (with config files)
Download .json file and put in config\WailaNBT folder and its ready to use.
Please share your config!
More config files can be found at https://github.com/exzhawk/wailanbt/tree/master/eclipse/config/WailaNBT
Botania (Holding Forestry Wand)
https://raw.githubusercontent.com/exzhawk/wailanbt/master/eclipse/config/WailaNBT/botania.json
2014-09-21_7-58-12.png

Thaumcraft (Holding Wand) by ViKaleidoscope

Tutorial
Blood Magic by WayofTime and Botania by Vazkii are used as examples for tutorial.
Part 1. Blocks(Tile Entity)
First, drop the jar file into mods and start game.
A configuration folder as well as a empty file “default.json” will be generated in your config folder. The mod is useless until you put right config in it.
The config file is in JSON format looks like this:
Code:
{
    "Holding Item Name": {
        "Tile Entity ID 1": {
            "Tag Name 1": "Display Name 1",
            "Tag Name 2>>>Tag Name 3": "Display Name 2"
        },
        "Tile Entity ID X": {
        },
        "Holding Item Name X": {}
    }
}
This configuration means, when player holding an item named “Holding Item Name”, and point cursor at aTile Entity with ID “Tile Entity ID 1″, “Value of Tag Name” will be shown, and “Display Name 1″is the name that will represent “Value of Tag Name” in Waila HUD.

“Tag Name 2>>>Tag Name 3″ means display the value of “Tag Name 3″ in the NBT Tag Compound named “Tag Name 2″. That’s somehow similar to a sub folder. Use “>>>” to separate to name if “Tag Name 3″ is inside “Tag Name 2″. “>>>” should only be used under this sub folder condition.
As for TagList, you can use number. e.g. Use "Items>>>2>>Count" to access the highlighting field("Count: 32").


“Holding Item Name”, “Tile Entity ID 1″ and “Tag Name 1″ support regular expression, so some special characters like “|”(pipe) need a “\”(backslash) before it. e.g: “BuildCraft|Transport” must be written as “BuildCraft\|Transport”.

Let’s take a living example.

Blood Altar is a basic block of Blood Magic. It can store “Life Essence” and transmute items.


When pointing at it, run command “/nbtedit”



And here is what the tool(Divination Sigil) from blood magic says.


Now we know the ID of this block is “containerAltar“, and we guess that the “Amount” is the “Current Essence” and “capacity” is “Capacity”.

The target is, when holding the Divination Sigil, we can directly read the “Current Essence” and “Capacity” from the Waila HUD rather than a right click.

Hold the Divination Sigil and run command “/wnn” (stand for Waila NBT Name). The identify name “AWWayofTime:divinationSigil” of it will be shown in chat window.

For Inventory Tweak user
If you have Inventory Tweak installed, you can also see the name on the item tooltips, by allowing advanced tooltips(hotkey: F3+H).
So we write following content to default.json. (Or if you wanna keep them in order, create a “bloodmagic.json” and write in it instead.)
Code:
{
    "AWWayofTime:divinationSigil": {
        "containerAltar": {
            "Amount": "Current Essence",
            "capacity": "Capacity"
        }
    }
}
After saving the config file. Run command “/wnr” (stand for Waila NBT Reload) to reload configuration.

Then hold the Divination Sigil and point at the Blood Altar.


It works!

Let’s try another. Daybloom.

Run command “/nbtedit” first.


ID is “botania:specialFlower”, and what useful data “mana” is under a NBTTagCompound named “subTileCmp”.

Save following content to “botania.json” in folder “config/WailaNBT”. (Where the default.json located.)
Code:
{
    ".*": {
        "botania:specialFlower": {
            "subTileCmp>>>mana": "Mana"
        }
    }
}

“.*” is an regular expression matches all string. Note it also matches hand without holding anything. Because holding nothing equals holding an item named “”(empty string).

And don’t forget run command “/wnr” to reload configuration.

Now point at Daybloom and it should work.

Part 2. Mobs(Entity)
Waila NBT also works on entity(mobs, etc.).


Just write configs and change “Tile Entity ID” to “Entity ID”, which can be known by command “/wne”(stand for Waila NBT Entity).


And you can use “/nbtedit” to see NBT data structure of an entity too.


Following is the example config file for the picture of sheep above.
Code:
{
    ".*": {
        "Sheep": {
            "Age": "Love cooldown",
            "InLove": "Love time left"
        }
    }
}
Part 3. Items (Tool tips)
WailaNBT works on item too. And will show information on tool-tip.


There are no method to look up the NBT data structure of an item, so a chest is needed. Put item in a chest and run command “/nbtedit”. The part surrounded with a blue border is the NBT structure of the item.


You need to change “Holding Item Name” to “tooltip” and change “Tile Entity ID” to “Item Name”, which cant be get by the command “/wnn”.
Following is the example config file for the picture of notch’s head above.
Code:
{
    "tooltip": {
        "minecraft:skull": {
            "SkullOwner": "Name"
        }
    }
}

Part 4. Modify displayed value
Displayed value can be modify by using printf style formatter or JavaScript and can be decorate with color and font style.

Don't forget to add the Holding Item and Tile Entity ID content. This part only focus on "Tag Name 1": "Display Name 1" content.

Printf style formatter
e.g. "Owner>>>Name":"This is %s's head!" will get the effect below.



You may find "%.2f" useful. This will force it show 2 decimal places.

JavaScript
You may wanna do more than format a string, like divide ticks by 20 to show in seconds. JavaScript modifier is for you.

Let's take furnace as an example.

To show the burn time in seconds, use this code below

"BurnTime": "function p(v){var r = (v/20);return 'Burn time left: '+r.toFixed(1)+' seconds'}"

Amazing!



"function p(v){}" is forced if you want to you JavaScript to modify the value. that's the basic function to run. "v" is the value read according to Tag Name and you can do anything you like in JavaScript with it. And don't forget to return what you want to display.



It's tricky sometime when you look up ID in an inventory. It's a number and hard to know what actually is. When encounter this problem, use a pre-defined object named "names".

You can use name['id'] to get the name of the numeric id. Note it can only handle limited localized name now.

e.g. If you want to display the first item name in a hopper. Write below in the config file:

"Items>>>0>>>id": "function p(v){r = 'first item is ' + names[v];return r}"

Waila will display:



Color and Font style
16 colors and bold/strike/underline/italic can be used to decorate displayed text. you can also use some text to make the text right/center aligned or use tab to make things neat.

Unmodified text shows in grey.

To use colors and font style, please look it up in http://minecraft.gamepedia.com/Formatting_codes

To use align and tab:

"\u00A4\u00A4a" works as tab
"\u00A4\u00A4b" works as right-aligned
"\u00A4\u00A4c" works as center-aligned

The default style is "key tab+right-aligned+white value"

Notice
This mod is over powered and may destroy experience in survival mode. It’s generally written for testing purpose. Use it on server without permission may be considered as cheating.
Holding nothing equals holding an item named “”(empty string).
If display name is not provided (like “Amount”:””), the tag name(“Amount”) will be used.
If there are two config contains same “Tile Entity ID” and their “Holding Item Name” is same, one of “Tile Entity ID” will be ignored.
Folders in config/WailaNBT will be ignored.
Planning Feature
Support javascript to modify display value.
Support for items dropped on ground.
Better distribute and control pre-config files.
Better support for TAG_List
More complex match method.
Thanks
Prof Mobius for bring us Waila.
Pahimar for teaching me basic modding.
Davidee for bring us In-Game NBTEdit, and bjbinc for 1.7.10 port
ViKaleidoscope for Simplified Chinese localization and many config files.
Fixided for tutorial editing advice.
License
Source code of this mod can be found here: https://github.com/exzhawk/wailanbt
You can include it in modpacks and redistribute binary files. But a notice in this post and keeping a link to this post will be appreciated.
 
Last edited:

madnewmy

New Member
Jul 29, 2019
1,119
0
0
I might miss understand but to have the (example) botania nbt shown, you need to download the script under the botania tab?

So the mod, without them, does nothing? Like minetweaker?
 

Vasa

New Member
Jul 29, 2019
532
0
1
Cool addon, but i dont understand why you consider it as cheat and overpowered.. :rolleyes:o_O
 

Epix

New Member
Jul 29, 2019
11
4
1
I might miss understand but to have the (example) botania nbt shown, you need to download the script under the botania tab?

So the mod, without them, does nothing? Like minetweaker?
Yes. It does nothing if no "script"(config file) is provided. And shared config file just make players not reinvent wheels.

Cool addon, but i dont understand why you consider it as cheat and overpowered.. :rolleyes:o_O
Some info is hidden in NBT data on purpose. e.g. Electric Chest in Mekanism, save its plaintext password directly in NBT.
 
  • Like
Reactions: Vasa

Epix

New Member
Jul 29, 2019
11
4
1
Waila NBT 1.4 released!
New features:
Support printf style format code to modify display text.
Support JavaScript to modify display text.
Finding localized name by id is possible in JavaScript modifier.
Pics