forked from mirrors/NBTExplorer
58 lines
1.8 KiB
C#
58 lines
1.8 KiB
C#
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));
|
|
}
|
|
}
|
|
}
|