forked from mirrors/NBTExplorer
Add JSON exporter to NBTUtil
This commit is contained in:
parent
2882fcde17
commit
9d640079b8
6 changed files with 67 additions and 2 deletions
|
@ -12,6 +12,7 @@ namespace NBTUtil
|
||||||
PrintTree,
|
PrintTree,
|
||||||
SetValue,
|
SetValue,
|
||||||
SetList,
|
SetList,
|
||||||
|
Json,
|
||||||
Help,
|
Help,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +39,10 @@ namespace NBTUtil
|
||||||
{ "print", "Print the value(s) of a tag", v => Command = ConsoleCommand.Print },
|
{ "print", "Print the value(s) of a tag", v => Command = ConsoleCommand.Print },
|
||||||
{ "printtree", "Print the NBT tree rooted at a tag", v => Command = ConsoleCommand.PrintTree },
|
{ "printtree", "Print the NBT tree rooted at a tag", v => Command = ConsoleCommand.PrintTree },
|
||||||
{ "types", "Show data types when printing tags", v => ShowTypes = true },
|
{ "types", "Show data types when printing tags", v => ShowTypes = true },
|
||||||
|
{ "json=", "Export the NBT tree rooted at a tag as JSON", v => {
|
||||||
|
Command = ConsoleCommand.Json;
|
||||||
|
Values.Add(v);
|
||||||
|
}},
|
||||||
{ "setvalue=", "Set a single tag value", v => {
|
{ "setvalue=", "Set a single tag value", v => {
|
||||||
Command = ConsoleCommand.SetValue;
|
Command = ConsoleCommand.SetValue;
|
||||||
_currentKey = "setvalue";
|
_currentKey = "setvalue";
|
||||||
|
|
|
@ -16,6 +16,7 @@ namespace NBTUtil
|
||||||
{ ConsoleCommand.SetList, new SetListOperation() },
|
{ ConsoleCommand.SetList, new SetListOperation() },
|
||||||
{ ConsoleCommand.Print, new PrintOperation() },
|
{ ConsoleCommand.Print, new PrintOperation() },
|
||||||
{ ConsoleCommand.PrintTree, new PrintTreeOperation() },
|
{ ConsoleCommand.PrintTree, new PrintTreeOperation() },
|
||||||
|
{ ConsoleCommand.Json, new JsonOperation() },
|
||||||
};
|
};
|
||||||
|
|
||||||
private ConsoleOptions _options;
|
private ConsoleOptions _options;
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
<Compile Include="NDesk\Options.cs" />
|
<Compile Include="NDesk\Options.cs" />
|
||||||
<Compile Include="Ops\ConsoleOperation.cs" />
|
<Compile Include="Ops\ConsoleOperation.cs" />
|
||||||
<Compile Include="Ops\EditOperation.cs" />
|
<Compile Include="Ops\EditOperation.cs" />
|
||||||
|
<Compile Include="Ops\JsonOperation.cs" />
|
||||||
<Compile Include="Ops\PrintOperation.cs" />
|
<Compile Include="Ops\PrintOperation.cs" />
|
||||||
<Compile Include="Ops\PrintTreeOperation.cs" />
|
<Compile Include="Ops\PrintTreeOperation.cs" />
|
||||||
<Compile Include="Ops\SetListOperation.cs" />
|
<Compile Include="Ops\SetListOperation.cs" />
|
||||||
|
|
58
NBTUtil/Ops/JsonOperation.cs
Normal file
58
NBTUtil/Ops/JsonOperation.cs
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
using NBTExplorer.Model;
|
||||||
|
using Substrate.Nbt;
|
||||||
|
|
||||||
|
namespace NBTUtil.Ops
|
||||||
|
{
|
||||||
|
class JsonOperation : ConsoleOperation
|
||||||
|
{
|
||||||
|
public override bool CanProcess (DataNode dataNode)
|
||||||
|
{
|
||||||
|
return dataNode is NbtFileDataNode || dataNode is TagDataNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Process (DataNode dataNode, ConsoleOptions options)
|
||||||
|
{
|
||||||
|
if (options.Values.Count == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
string jsonPath = options.Values[0];
|
||||||
|
using (FileStream stream = File.OpenWrite(jsonPath)) {
|
||||||
|
using (StreamWriter writer = new StreamWriter(stream)) {
|
||||||
|
if (dataNode is TagDataNode) {
|
||||||
|
TagDataNode tagNode = dataNode as TagDataNode;
|
||||||
|
WriteNbtTag(writer, tagNode.Tag);
|
||||||
|
}
|
||||||
|
else if (dataNode is NbtFileDataNode) {
|
||||||
|
dataNode.Expand();
|
||||||
|
TagNodeCompound root = new TagNodeCompound();
|
||||||
|
|
||||||
|
foreach (DataNode child in dataNode.Nodes) {
|
||||||
|
TagDataNode childTagNode = child as TagDataNode;
|
||||||
|
if (childTagNode == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (childTagNode.Tag != null)
|
||||||
|
root.Add(childTagNode.NodeName, childTagNode.Tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
WriteNbtTag(writer, root);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WriteNbtTag (StreamWriter writer, TagNode tag)
|
||||||
|
{
|
||||||
|
if (tag == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
writer.Write(JSONSerializer.Serialize(tag));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
[assembly: AssemblyVersion("1.0.1.0")]
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
[assembly: AssemblyFileVersion("1.0.1.0")]
|
||||||
|
|
Binary file not shown.
Loading…
Reference in a new issue