Huge Animation Editor Update

-"Move Up" and "Move Down" functions finally work properly and with folders!
-Animation Editor can import Java block and item animations
-Animation Editor has a built-in Change Tile function where every single block and item that can be animated is listed (clock and compass are excluded since they have animations based on game data). When selected, it will automatically set your animation to that tile for you. If a required folder is missing, the function will create the folder for you and place the file inside. Happy animating! (:
-Removed the old "Create Animated Texture" function and replaced it with the new Animation Editor
-Moved the Audio Editor and Animation Editor into their own folders in the Utilities folder to keep things a little more organized in the solution.
This commit is contained in:
MattNL
2022-04-29 19:57:16 -04:00
parent b185d84b6d
commit 7ac0688654
24 changed files with 1920 additions and 4463 deletions

3
.gitignore vendored
View File

@@ -10,6 +10,9 @@
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Visual Studio local cache
.vs/
# Build results
[Dd]ebug/
[Dd]ebugPublic/

View File

@@ -32,7 +32,7 @@ namespace PckStudio
FormBorderStyle = FormBorderStyle.None;
}
private void fixDirectoryNameForFiles(TreeNode dirN)
public void fixDirectoryNameForFiles(TreeNode dirN)
{
foreach (TreeNode n in dirN.Nodes)
{

View File

@@ -1026,9 +1026,34 @@ namespace PckStudio
if (ofd.ShowDialog() == DialogResult.OK)
{
PckStudio.addAnimatedTexture add = new PckStudio.addAnimatedTexture(currentPCK, treeViewMain, ofd.FileName, Path.GetFileName(ofd.FileName).Remove(Path.GetFileName(ofd.FileName).Length - 4, 4));//presets texture generator dialog with needed data including selected picture
add.ShowDialog();//Shows dialog
add.Dispose();//Diposes generated dialog data
try
{
AnimationEditor diag = new AnimationEditor(treeViewMain, ofd.FileName);
diag.ShowDialog(this);
diag.Dispose();
treeViewToMineFiles(treeViewMain);
treeMeta.Nodes.Clear();
foreach (int type in types.Keys)
comboBox1.Items.Add(types[type]);
//loads all of selected minefiles metadata into metadata treeview
foreach (object[] entry in file.entries)
{
object[] strings = (object[])entry; TreeNode meta = new TreeNode();
foreach (object[] entryy in file.entries)
meta.Text = (string)strings[0];
meta.Tag = entry;
treeMeta.Nodes.Add(meta);
}
}
catch
{
MessageBox.Show("Invalid animation data.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
saved = false;
@@ -1038,7 +1063,7 @@ namespace PckStudio
#region deciphers what happens when certain pck entries are double clicked
private void treeView1_DoubleClick(object sender, EventArgs e)
{
if (treeViewMain.SelectedNode.Tag != null)
if (treeViewMain.SelectedNode != null && treeViewMain.SelectedNode.Tag != null)
{
mf = (PCK.MineFile)treeViewMain.SelectedNode.Tag;
@@ -1202,23 +1227,25 @@ namespace PckStudio
#region moves node up and arranges minefile indexes
private void moveUpToolStripMenuItem_Click(object sender, EventArgs e)
{
if (treeViewMain.SelectedNode != null)//makes sure selected node is a minefile
TreeNode move = (TreeNode)treeViewMain.SelectedNode.Clone();
if (treeViewMain.SelectedNode.Parent == null)
{
if (treeViewMain.SelectedNode.Tag != null)
{
if (treeViewMain.SelectedNode.Index - 1 >= 0)//Makes sure selected node isn't already at the top
{
//rearranges nodes minefile data indexes in minefiles list
currentPCK.mineFiles[treeViewMain.SelectedNode.Index - 1] = (PCK.MineFile)treeViewMain.SelectedNode.Tag;
currentPCK.mineFiles[treeViewMain.SelectedNode.Index] = (PCK.MineFile)treeViewMain.Nodes[treeViewMain.SelectedNode.Index - 1].Tag;
//switches selected node with node above it
TreeNode move = (TreeNode)treeViewMain.SelectedNode.Clone();
treeViewMain.Nodes.Insert(treeViewMain.SelectedNode.Index - 1, move);
//removes node because a clone was inserted into its new index
treeViewMain.SelectedNode.Remove();
}
}
if (treeViewMain.SelectedNode.PrevNode == null) return;
treeViewMain.Nodes.Insert(treeViewMain.SelectedNode.PrevNode.Index, move);
//removes node because a clone was inserted into its new index
treeViewMain.SelectedNode.Remove();
}
else
{
if (treeViewMain.SelectedNode.PrevNode == null) return;
treeViewMain.SelectedNode.Parent.Nodes.Insert(treeViewMain.SelectedNode.PrevNode.Index, move);
//removes node because a clone was inserted into its new index
treeViewMain.SelectedNode.Remove();
}
treeViewToMineFiles(treeViewMain);
saved = false;
}
#endregion
@@ -1226,23 +1253,25 @@ namespace PckStudio
#region moves node down and arranges minefile indexes
private void moveDownToolStripMenuItem_Click(object sender, EventArgs e)
{
if (treeViewMain.SelectedNode != null)//makes sure selected node is a minefile
TreeNode move = (TreeNode)treeViewMain.SelectedNode.Clone();
if (treeViewMain.SelectedNode.Parent == null)
{
if (treeViewMain.SelectedNode.Tag != null)
{
if (treeViewMain.Nodes[treeViewMain.SelectedNode.Index + 1] != null)//Makes sure selected node isn't already at the bottom
{
//rearranges nodes minefile data indexes in minefiles list
currentPCK.mineFiles[treeViewMain.SelectedNode.Index + 1] = (PCK.MineFile)treeViewMain.SelectedNode.Tag;
currentPCK.mineFiles[treeViewMain.SelectedNode.Index] = (PCK.MineFile)treeViewMain.Nodes[treeViewMain.SelectedNode.Index + 1].Tag;
//switches selected node with node below it
TreeNode move = (TreeNode)treeViewMain.SelectedNode.Clone();
treeViewMain.Nodes.Insert(treeViewMain.SelectedNode.Index + 2, move);
//removes node because a clone was inserted into its new index
treeViewMain.SelectedNode.Remove();
}
}
if (treeViewMain.SelectedNode.NextNode == null) return;
treeViewMain.Nodes.Insert(treeViewMain.SelectedNode.NextNode.Index + 1, move);
//removes node because a clone was inserted into its new index
treeViewMain.SelectedNode.Remove();
}
else
{
if (treeViewMain.SelectedNode.NextNode == null) return;
treeViewMain.SelectedNode.Parent.Nodes.Insert(treeViewMain.SelectedNode.NextNode.Index + 1, move);
//removes node because a clone was inserted into its new index
treeViewMain.SelectedNode.Remove();
}
treeViewToMineFiles(treeViewMain);
saved = false;
}
#endregion
@@ -1293,9 +1322,12 @@ namespace PckStudio
{
PCK.MineFile mf = (PCK.MineFile)child.Tag;
mf.name = childPath;
newMineFiles.Add((PCK.MineFile)child.Tag);
Console.WriteLine("Minefile " + i + ": " + childPath);
i++;
if (!newMineFiles.Contains(mf))
{
newMineFiles.Add((PCK.MineFile)child.Tag);
//Console.WriteLine("Minefile " + i + ": " + childPath);
i++;
}
}
}
}
@@ -1303,9 +1335,12 @@ namespace PckStudio
{
PCK.MineFile mf = (PCK.MineFile)node.Tag;
mf.name = nodePath;
newMineFiles.Add((PCK.MineFile)node.Tag);
Console.WriteLine("Minefile " + i + ": " + nodePath);
i++;
if (!newMineFiles.Contains(mf))
{
newMineFiles.Add((PCK.MineFile)node.Tag);
//Console.WriteLine("Minefile " + i + ": " + nodePath);
i++;
}
}
}
currentPCK.mineFiles = newMineFiles;
@@ -3630,10 +3665,16 @@ namespace PckStudio
{
try
{
PckStudio.AnimationEditor diag = new PckStudio.AnimationEditor(mf);
AnimationEditor diag = new AnimationEditor(treeViewMain);
diag.ShowDialog(this);
diag.Dispose();
treeViewToMineFiles(treeViewMain);
MemoryStream png = new MemoryStream(mf.data); //Gets image data from minefile data
Image skinPicture = Image.FromStream(png); //Constructs image data into image
pictureBoxImagePreview.Image = skinPicture;
treeMeta.Nodes.Clear();
foreach (int type in types.Keys)
comboBox1.Items.Add(types[type]);

View File

@@ -1,145 +0,0 @@
namespace PckStudio
{
partial class addAnimatedTexture
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(addAnimatedTexture));
this.pictureBox1 = new PckStudio.PictureBoxWithInterpolationMode();
this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox2 = new System.Windows.Forms.TextBox();
this.textBox3 = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.button1 = new System.Windows.Forms.Button();
this.radioButton1 = new System.Windows.Forms.RadioButton();
this.radioButton2 = new System.Windows.Forms.RadioButton();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// pictureBox1
//
resources.ApplyResources(this.pictureBox1, "pictureBox1");
this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pictureBox1.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default;
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.TabStop = false;
//
// textBox1
//
resources.ApplyResources(this.textBox1, "textBox1");
this.textBox1.Name = "textBox1";
//
// textBox2
//
resources.ApplyResources(this.textBox2, "textBox2");
this.textBox2.Name = "textBox2";
//
// textBox3
//
resources.ApplyResources(this.textBox3, "textBox3");
this.textBox3.Name = "textBox3";
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// label2
//
resources.ApplyResources(this.label2, "label2");
this.label2.Name = "label2";
//
// label3
//
resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3";
//
// button1
//
resources.ApplyResources(this.button1, "button1");
this.button1.Name = "button1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click_1);
//
// radioButton1
//
resources.ApplyResources(this.radioButton1, "radioButton1");
this.radioButton1.Checked = true;
this.radioButton1.Name = "radioButton1";
this.radioButton1.TabStop = true;
this.radioButton1.UseVisualStyleBackColor = true;
//
// radioButton2
//
resources.ApplyResources(this.radioButton2, "radioButton2");
this.radioButton2.Name = "radioButton2";
this.radioButton2.UseVisualStyleBackColor = true;
//
// addAnimatedTexture
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.radioButton2);
this.Controls.Add(this.radioButton1);
this.Controls.Add(this.button1);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.textBox3);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.pictureBox1);
this.ForeColor = System.Drawing.Color.White;
this.MaximizeBox = false;
this.Name = "addAnimatedTexture";
this.Resizable = false;
this.ShadowType = MetroFramework.Forms.MetroFormShadowType.DropShadow;
this.Style = MetroFramework.MetroColorStyle.Silver;
this.Theme = MetroFramework.MetroThemeStyle.Dark;
this.Load += new System.EventHandler(this.addAnimatedTexture_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private PictureBoxWithInterpolationMode pictureBox1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.RadioButton radioButton1;
private System.Windows.Forms.RadioButton radioButton2;
}
}

View File

@@ -1,114 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Linq.Expressions;
namespace PckStudio
{
public partial class addAnimatedTexture : MetroFramework.Forms.MetroForm
{
PCK currentPCK;
TreeView treeView1;
TreeNode texture = new TreeNode();
PCK.MineFile mf = new PCK.MineFile();
PCK.MineFile mfc = new PCK.MineFile();
string ofd;
bool useCape = false;
int loop = 0;
int i = 0;
string data;
int speed;
public addAnimatedTexture(PCK currentPCKIn, TreeView treeView1In, string ofdIn, string name)
{
InitializeComponent();
textBox1.Text = name;
currentPCK = currentPCKIn;
treeView1 = treeView1In;
ofd = ofdIn;
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.InterpolationMode = InterpolationMode.NearestNeighbor;
pictureBox1.Image = Image.FromFile(ofd);
mf.data = File.ReadAllBytes(ofd);
}
public class displayId
{
public string id;
public string defaultName;
}
private void button1_Click_1(object sender, EventArgs e)
{
try{
int frames = int.Parse(textBox2.Text);
speed = int.Parse(textBox3.Text);
data = "0*" + speed + ",";
loop = frames - 1;
generateANIM();
object[] ANIM = {"ANIM", data};
mf.entries.Add(ANIM);
string path = "";
if (radioButton1.Checked == true)
{
path = "res/textures/blocks/" + textBox1.Text + ".png";
}
else
{
path = "res/textures/items/" + textBox1.Text + ".png";
}
mf.filesize = mf.data.Length;
mf.name = path;
mf.type = 0;
currentPCK.mineFiles.Add(mf);
texture.Text = path;
texture.Tag = mf;
treeView1.Nodes.Insert(17, texture);
this.Close();
}catch (Exception)
{
MessageBox.Show("Invalid values were entered");
}
}
private void generateANIM()
{
do
{
i += 1;
data += i + "*" + speed + ",";
loop -= 1;
} while (loop != 0);
}
private void addAnimatedTexture_Load(object sender, EventArgs e)
{
}
}
}

View File

@@ -39,6 +39,9 @@
this.saveToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.bulkAnimationSpeedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.importJavaAnimationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.changeTileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.metroCheckBox1 = new MetroFramework.Controls.MetroCheckBox();
this.metroButton1 = new MetroFramework.Controls.MetroButton();
this.pictureBoxWithInterpolationMode1 = new PckStudio.PictureBoxWithInterpolationMode();
@@ -74,13 +77,13 @@
this.addFrameToolStripMenuItem,
this.removeFrameToolStripMenuItem});
this.contextMenuStrip1.Name = "contextMenuStrip1";
this.contextMenuStrip1.Size = new System.Drawing.Size(181, 70);
this.contextMenuStrip1.Size = new System.Drawing.Size(154, 48);
//
// addFrameToolStripMenuItem
//
this.addFrameToolStripMenuItem.Image = global::PckStudio.Properties.Resources.ExportFile;
this.addFrameToolStripMenuItem.Name = "addFrameToolStripMenuItem";
this.addFrameToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.addFrameToolStripMenuItem.Size = new System.Drawing.Size(153, 22);
this.addFrameToolStripMenuItem.Text = "Add Frame";
this.addFrameToolStripMenuItem.Click += new System.EventHandler(this.addFrameToolStripMenuItem_Click);
//
@@ -88,7 +91,7 @@
//
this.removeFrameToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Del;
this.removeFrameToolStripMenuItem.Name = "removeFrameToolStripMenuItem";
this.removeFrameToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.removeFrameToolStripMenuItem.Size = new System.Drawing.Size(153, 22);
this.removeFrameToolStripMenuItem.Text = "Remove Frame";
this.removeFrameToolStripMenuItem.Click += new System.EventHandler(this.removeFrameToolStripMenuItem_Click);
//
@@ -98,7 +101,8 @@
this.menuStrip.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fileToolStripMenuItem,
this.editToolStripMenuItem});
this.editToolStripMenuItem,
this.helpToolStripMenuItem});
this.menuStrip.Location = new System.Drawing.Point(20, 60);
this.menuStrip.Name = "menuStrip";
this.menuStrip.Size = new System.Drawing.Size(360, 24);
@@ -118,38 +122,63 @@
//
this.saveToolStripMenuItem1.Image = ((System.Drawing.Image)(resources.GetObject("saveToolStripMenuItem1.Image")));
this.saveToolStripMenuItem1.Name = "saveToolStripMenuItem1";
this.saveToolStripMenuItem1.Size = new System.Drawing.Size(180, 22);
this.saveToolStripMenuItem1.Size = new System.Drawing.Size(98, 22);
this.saveToolStripMenuItem1.Text = "Save";
this.saveToolStripMenuItem1.Click += new System.EventHandler(this.saveToolStripMenuItem1_Click);
//
// editToolStripMenuItem
//
this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.bulkAnimationSpeedToolStripMenuItem});
this.bulkAnimationSpeedToolStripMenuItem,
this.importJavaAnimationToolStripMenuItem,
this.changeTileToolStripMenuItem});
this.editToolStripMenuItem.ForeColor = System.Drawing.Color.White;
this.editToolStripMenuItem.Name = "editToolStripMenuItem";
this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20);
this.editToolStripMenuItem.Text = "Edit";
this.editToolStripMenuItem.Size = new System.Drawing.Size(46, 20);
this.editToolStripMenuItem.Text = "Tools";
//
// bulkAnimationSpeedToolStripMenuItem
//
this.bulkAnimationSpeedToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Replace;
this.bulkAnimationSpeedToolStripMenuItem.Image = global::PckStudio.Properties.Resources.clock;
this.bulkAnimationSpeedToolStripMenuItem.Name = "bulkAnimationSpeedToolStripMenuItem";
this.bulkAnimationSpeedToolStripMenuItem.Size = new System.Drawing.Size(210, 22);
this.bulkAnimationSpeedToolStripMenuItem.Text = "Set Bulk Animation Speed";
this.bulkAnimationSpeedToolStripMenuItem.Click += new System.EventHandler(this.bulkAnimationSpeedToolStripMenuItem_Click);
//
// importJavaAnimationToolStripMenuItem
//
this.importJavaAnimationToolStripMenuItem.Image = global::PckStudio.Properties.Resources.ExportFile;
this.importJavaAnimationToolStripMenuItem.Name = "importJavaAnimationToolStripMenuItem";
this.importJavaAnimationToolStripMenuItem.Size = new System.Drawing.Size(210, 22);
this.importJavaAnimationToolStripMenuItem.Text = "Import Java Animation";
this.importJavaAnimationToolStripMenuItem.Click += new System.EventHandler(this.importJavaAnimationToolStripMenuItem_Click);
//
// changeTileToolStripMenuItem
//
this.changeTileToolStripMenuItem.Image = global::PckStudio.Properties.Resources.changeTile;
this.changeTileToolStripMenuItem.Name = "changeTileToolStripMenuItem";
this.changeTileToolStripMenuItem.Size = new System.Drawing.Size(210, 22);
this.changeTileToolStripMenuItem.Text = "Change Tile";
this.changeTileToolStripMenuItem.Click += new System.EventHandler(this.changeTileToolStripMenuItem_Click);
//
// helpToolStripMenuItem
//
this.helpToolStripMenuItem.ForeColor = System.Drawing.Color.White;
this.helpToolStripMenuItem.Name = "helpToolStripMenuItem";
this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
this.helpToolStripMenuItem.Text = "Help";
this.helpToolStripMenuItem.Click += new System.EventHandler(this.helpToolStripMenuItem_Click);
//
// metroCheckBox1
//
this.metroCheckBox1.AutoSize = true;
this.metroCheckBox1.Location = new System.Drawing.Point(188, 285);
this.metroCheckBox1.Name = "metroCheckBox1";
this.metroCheckBox1.Size = new System.Drawing.Size(85, 15);
this.metroCheckBox1.Size = new System.Drawing.Size(204, 15);
this.metroCheckBox1.TabIndex = 17;
this.metroCheckBox1.Text = "Interpolates";
this.metroCheckBox1.Text = "Interpolates (not simulated above)";
this.metroCheckBox1.Theme = MetroFramework.MetroThemeStyle.Dark;
this.metroCheckBox1.UseSelectable = true;
this.metroCheckBox1.CheckedChanged += new System.EventHandler(this.metroCheckBox1_CheckedChanged);
//
// metroButton1
//
@@ -229,5 +258,8 @@
private MetroFramework.Controls.MetroButton metroButton2;
private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem bulkAnimationSpeedToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem importJavaAnimationToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem changeTileToolStripMenuItem;
}
}

View File

@@ -1,30 +1,31 @@
using System;
using MetroFramework.Forms;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MetroFramework.Forms;
using PckStudio;
namespace PckStudio
{
public partial class AnimationEditor : MetroForm
{
TreeView treeViewMain = new TreeView();
PCK.MineFile mf = new PCK.MineFile();
List<Image> frames = new List<Image>();
Image texture;
int frameCount;
bool isItem = false;
string lastFrameTime = "1";
string newTileName = "";
bool create = false;
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
Tuple< string, string > frameData = e.Node.Tag as Tuple<string, string>;
Tuple<string, string> frameData = e.Node.Tag as Tuple<string, string>;
Console.WriteLine(frameData.Item1 + " --- " + frameData.Item2);
if (metroButton1.Enabled)
{
@@ -32,9 +33,33 @@ namespace PckStudio
}
}
public AnimationEditor(PCK.MineFile MineFile)
public AnimationEditor(TreeView treeViewIn, String createdFileName = "")
{
mf = MineFile;
treeViewMain = treeViewIn;
if (String.IsNullOrEmpty(createdFileName))
{
newTileName = Path.GetFileNameWithoutExtension(treeViewMain.SelectedNode.Text);
if (treeViewMain.SelectedNode.Parent.Text.ToLower() == "items".ToLower()) isItem = true;
mf = treeViewMain.SelectedNode.Tag as PCK.MineFile;
}
else
{
create = true;
PCK.MineFile newMf = new PCK.MineFile();
object[] animEntry = { "ANIM", "" };
newMf.entries.Add(animEntry);
newMf.data = File.ReadAllBytes(createdFileName);
newMf.filesize = newMf.data.Length;//gets filesize for minefile
newMf.type = 2;
mf = newMf;
Forms.Utilities.AnimationEditor.ChangeTile diag = new Forms.Utilities.AnimationEditor.ChangeTile();
diag.ShowDialog(this);
Console.WriteLine(diag.SelectedTile);
newTileName = diag.SelectedTile;
isItem = diag.IsItem;
diag.Dispose();
}
List<string> strEntries = new List<string>();
List<string> strEntryData = new List<string>();
@@ -121,7 +146,7 @@ namespace PckStudio
}
else
{
for(int i = 0; i < frameCount; i++)
for (int i = 0; i < frameCount; i++)
{
TreeNode frameNode = new TreeNode();
Tuple<string, string> finalFrameData = new Tuple<string, string>(i.ToString(), "1");
@@ -137,6 +162,7 @@ namespace PckStudio
void createFrameList()
{
frames.Clear();
int width = texture.Width;
int height = texture.Height;
int totalFrames = height / width;
@@ -167,7 +193,7 @@ namespace PckStudio
int animCurrentFrame = 0;
int animCurrentFrameTime = 0;
int animCurrentTotalFrameTime = -1;
Tuple<string, string> currentFrameData = new Tuple<string, string>("","");
Tuple<string, string> currentFrameData = new Tuple<string, string>("", "");
Image img = null;
int nextFrame;
int frameCounter = 0; // ported directly from Java Edition code -MattNL
@@ -186,7 +212,7 @@ namespace PckStudio
animCurrentTotalFrameTime = Int16.Parse(currentFrameData.Item2);
animCurrentFrame++;
if(metroCheckBox1.Checked)
if (metroCheckBox1.Checked)
{
img = frames[Int16.Parse(currentFrameData.Item1)];
nextFrame = animCurrentFrame + 1;
@@ -293,11 +319,96 @@ namespace PckStudio
if (e.KeyData == Keys.Delete) treeView1.Nodes.Remove(treeView1.SelectedNode);
}
private TreeNode FindNode(TreeNode treeNode, string name)
{
foreach (TreeNode node in treeNode.Nodes)
{
if (node.Text.ToLower() == name.ToLower()) return node;
else
{
TreeNode nodeChild = FindNode(node, name);
if (nodeChild != null)
{
return nodeChild;
}
}
}
return (TreeNode)null;
}
private TreeNode FindNode(TreeView treeView, string name)
{
foreach (TreeNode node in treeView.Nodes)
{
if (node.Text.ToLower() == name.ToLower()) return node;
else
{
TreeNode nodeChild = FindNode(node, name);
if (nodeChild != null) return nodeChild;
}
}
return (TreeNode)null;
}
private void addNodeToAnimationsFolder(TreeNode newNode)
{
TreeNode parent = FindNode(treeViewMain, isItem ? "items" : "blocks");
if (parent != null)
{
Console.WriteLine("ParentNotNULL");
parent.Nodes.Add(newNode);
}
else
{
TreeNode texturesParent = FindNode(treeViewMain, "textures");
if (texturesParent != null)
{
Console.WriteLine("TextureNotNULL");
TreeNode newFolder = new TreeNode(isItem ? "items" : "blocks");
texturesParent.Nodes.Add(newFolder);
newFolder.Nodes.Add(newNode);
}
else
{
TreeNode resParent = FindNode(treeViewMain, "res");
if (resParent != null)
{
Console.WriteLine("ResNotNULL");
TreeNode newFolder = new TreeNode("textures");
resParent.Nodes.Add(newFolder);
TreeNode newFolderB = new TreeNode(isItem ? "items" : "blocks");
newFolder.Nodes.Add(newFolderB);
newFolderB.Nodes.Add(newNode);
}
else
{
Console.WriteLine("ResNULL");
TreeNode newFolder = new TreeNode("res");
treeViewMain.Nodes.Add(newFolder);
TreeNode newFolderB = new TreeNode("textures");
newFolder.Nodes.Add(newFolderB);
TreeNode newFolderC = new TreeNode(isItem ? "items" : "blocks");
newFolderB.Nodes.Add(newFolderC);
newFolderC.Nodes.Add(newNode);
}
}
}
}
private void saveToolStripMenuItem1_Click(object sender, EventArgs e)
{
using (MemoryStream m = new MemoryStream())
{
texture.Save(m, texture.RawFormat);
mf.data = m.ToArray();
mf.filesize = mf.data.Length;
}
if (!create && treeViewMain.SelectedNode.Tag != null) treeViewMain.SelectedNode.Text = newTileName + ".png";
int animIndex = mf.entries.FindIndex(entry => (string)entry[0] == "ANIM");
string animationData = "";
if(metroCheckBox1.Checked) animationData += "#"; // does the animation interpolate?
if (metroCheckBox1.Checked) animationData += "#"; // does the animation interpolate?
foreach (TreeNode node in treeView1.Nodes)
{
Tuple<string, string> frameData = node.Tag as Tuple<string, string>;
@@ -311,6 +422,32 @@ namespace PckStudio
};
if (animIndex != -1) mf.entries[animIndex] = newEntry;
else mf.entries.Add(newEntry);
if (create)
{
TreeNode newNode = new TreeNode(newTileName + ".png") { Tag = mf };//creates node for minefile
newNode.ImageIndex = 2;
newNode.SelectedImageIndex = 2;
addNodeToAnimationsFolder(newNode);
}
else if (isItem && treeViewMain.SelectedNode.Parent.Text == "blocks")
{
Console.WriteLine("block: " + treeViewMain.SelectedNode.Parent.Text);
TreeNode newNode = treeViewMain.SelectedNode;
newNode.ImageIndex = 2;
newNode.SelectedImageIndex = 2;
treeViewMain.SelectedNode.Remove();
addNodeToAnimationsFolder(newNode);
}
else if (treeViewMain.SelectedNode.Parent.Text == "items")
{
Console.WriteLine("item: " + treeViewMain.SelectedNode.Parent.Text);
TreeNode newNode = treeViewMain.SelectedNode;
newNode.ImageIndex = 2;
newNode.SelectedImageIndex = 2;
treeViewMain.SelectedNode.Remove();
addNodeToAnimationsFolder(newNode);
}
}
// Most of the code below is modified code from this link: https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.treeview.itemdrag?view=windowsdesktop-6.0
@@ -409,27 +546,27 @@ namespace PckStudio
return ContainsNode(node1, node2.Parent);
}
private void addFrameToolStripMenuItem_Click(object sender, EventArgs e)
private void treeView1_doubleClick(object sender, EventArgs e)
{
PckStudio.Forms.Utilities.AnimationEditor.FrameEditor diag = new PckStudio.Forms.Utilities.AnimationEditor.FrameEditor(
treeView1,
new Tuple<string, string>("",""),
frameCount - 1,
true,
new TreeNode());
Forms.Utilities.AnimationEditor.FrameEditor diag = new Forms.Utilities.AnimationEditor.FrameEditor(
treeView1, // animation editor tree
treeView1.SelectedNode.Tag as Tuple<string, string>, // the current selected frame data
frameCount - 1, // frame limit
false, // create new frame?
treeView1.SelectedNode // the current frame selected
);
diag.ShowDialog(this);
diag.Dispose();
}
private void treeView1_doubleClick(object sender, EventArgs e)
private void addFrameToolStripMenuItem_Click(object sender, EventArgs e)
{
PckStudio.Forms.Utilities.AnimationEditor.FrameEditor diag = new PckStudio.Forms.Utilities.AnimationEditor.FrameEditor(
Forms.Utilities.AnimationEditor.FrameEditor diag = new Forms.Utilities.AnimationEditor.FrameEditor(
treeView1,
treeView1.SelectedNode.Tag as Tuple<string, string>,
new Tuple<string, string>("", ""),
frameCount - 1,
false,
treeView1.SelectedNode
);
true,
new TreeNode());
diag.ShowDialog(this);
diag.Dispose();
}
@@ -439,13 +576,130 @@ namespace PckStudio
treeView1.SelectedNode.Remove();
}
private void metroCheckBox1_CheckedChanged(object sender, EventArgs e) {}
private void bulkAnimationSpeedToolStripMenuItem_Click(object sender, EventArgs e)
{
PckStudio.Forms.Utilities.AnimationEditor.SetBulkSpeed diag = new PckStudio.Forms.Utilities.AnimationEditor.SetBulkSpeed(treeView1);
Forms.Utilities.AnimationEditor.SetBulkSpeed diag = new Forms.Utilities.AnimationEditor.SetBulkSpeed(treeView1);
diag.ShowDialog(this);
diag.Dispose();
}
private void importJavaAnimationToolStripMenuItem_Click(object sender, EventArgs e)
{
DialogResult query = MessageBox.Show("This feature will replace the existing animation data. It might fail if the selected animation script is invalid. Are you sure that you want to continue?", "Warning", MessageBoxButtons.YesNo);
if (query == DialogResult.No) return;
// In case the import fails, the user won't lose any data - MattNL
Image oldImage = texture;
int oldFrameCount = frameCount;
List<Image> oldFrames = frames;
TreeNodeCollection oldAnimData = treeView1.Nodes;
OpenFileDialog diag = new OpenFileDialog();
diag.Multiselect = false;
diag.Filter = "Animation Scripts (*.mcmeta)|*.png.mcmeta"; /* It's marked as .png.mcmeta just in case
some weirdo tries to pass a pack.mcmeta or something
-MattNL */
diag.Title = "Please select a valid Minecaft: Java Edition animation script";
diag.ShowDialog(this);
diag.Dispose();
if (String.IsNullOrEmpty(diag.FileName)) return; // Return if name is null or if the user cancels
Console.WriteLine("Selected Animation Script: " + diag.FileName);
treeView1.Nodes.Clear();
MemoryStream textureMem = new MemoryStream(File.ReadAllBytes(Path.GetDirectoryName(diag.FileName) + "\\/" + Path.GetFileNameWithoutExtension(diag.FileName)));
texture = Image.FromStream(textureMem);
frameCount = texture.Height / texture.Width;
createFrameList();
try
{
Newtonsoft.Json.Linq.JObject mcmeta = Newtonsoft.Json.Linq.JObject.Parse(File.ReadAllText(diag.FileName));
if (mcmeta["animation"] != null)
{
int frameTime = 1;
// Some if statements to ensure that the animation is valid.
if (mcmeta["animation"]["frametime"] != null &&
mcmeta["animation"]["frametime"].Type == JTokenType.Integer) frameTime = (int)mcmeta["animation"]["frametime"];
if (mcmeta["animation"]["interpolate"] != null &&
mcmeta["animation"]["interpolate"].Type == JTokenType.Boolean && (Boolean)mcmeta["animation"]["interpolate"] == true) metroCheckBox1.Checked = true;
if (mcmeta["animation"]["frames"] != null &&
mcmeta["animation"]["frames"].Type == JTokenType.Array)
{
foreach (JToken frame in mcmeta["animation"]["frames"].Children())
{
if (frame.Type == JTokenType.Object)
{
if (frame["index"] != null && frame["index"].Type == JTokenType.Integer &&
frame["time"] != null && frame["time"].Type == JTokenType.Integer)
{
Console.WriteLine((int)frame["index"] + "*" + (int)frame["time"]);
TreeNode frameNode = new TreeNode();
Tuple<string, string> finalFrameData = new Tuple<string, string>(((int)frame["index"]).ToString(), ((int)frame["time"]).ToString());
frameNode.Text = "Frame: " + ((int)frame["index"]).ToString() + ", Frame Time: " + ((int)frame["time"]).ToString();
frameNode.Tag = finalFrameData;
treeView1.Nodes.Add(frameNode);
}
}
else if (frame.Type == JTokenType.Integer)
{
Console.WriteLine((int)frame + "*" + frameTime);
TreeNode frameNode = new TreeNode();
Tuple<string, string> finalFrameData = new Tuple<string, string>(((int)frame).ToString(), frameTime.ToString());
frameNode.Text = "Frame: " + ((int)frame).ToString() + ", Frame Time: " + frameTime.ToString();
frameNode.Tag = finalFrameData;
treeView1.Nodes.Add(frameNode);
}
}
}
else
{
for (int i = 0; i < frameCount; i++)
{
TreeNode frameNode = new TreeNode();
Tuple<string, string> finalFrameData = new Tuple<string, string>(i.ToString(), frameTime.ToString());
frameNode.Text = "Frame: " + i.ToString() + ", Frame Time: " + frameTime.ToString();
frameNode.Tag = finalFrameData;
treeView1.Nodes.Add(frameNode);
}
}
}
}
catch (JsonException j_ex)
{
MessageBox.Show(j_ex.Message, "Invalid animation");
texture = oldImage;
frameCount = oldFrameCount;
frames = oldFrames;
foreach (TreeNode node in oldAnimData)
{
treeView1.Nodes.Add(node);
}
return;
}
pictureBoxWithInterpolationMode1.Image = frames[Int16.Parse((treeView1.Nodes[0].Tag as Tuple<string, string>).Item1)];
}
private void helpToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("Simply drag and drop frames in the tree to rearrange your animation.\n\n" +
"The \"Interpolates\" checkbox enables the blending animation seen with some textures in the game, such as Prismarine.\n\n" +
"You can preview your animation at any time by simply pressing the \"Play Animation\" button!\n\n" +
"You can edit the frame and its speed by double clicking a frame in the tree. If you'd like to change the entire animation's speed, you can do so with the \"Set Bulk Animation Speed\" button in the \"Tools\" tab.\n\n" +
"Porting animations from Java packs are made simple with the \"Import Java Animation\" button found in the \"Tools\" tab!", "Help");
}
private void changeTileToolStripMenuItem_Click(object sender, EventArgs e)
{
PckStudio.Forms.Utilities.AnimationEditor.ChangeTile diag = new Forms.Utilities.AnimationEditor.ChangeTile();
diag.ShowDialog(this);
Console.WriteLine(diag.SelectedTile);
newTileName = diag.SelectedTile;
isItem = diag.IsItem;
diag.Dispose();
}
}
}

View File

@@ -127,7 +127,7 @@
<data name="saveToolStripMenuItem1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wwAADsMBx2+oZAAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADfSURBVDhPYxg8
vQAADr0BR/uQrQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADfSURBVDhPYxg8
QLt++3yTGbf/Fm599P/Nh49wfPXxq/+rTt37f+Dak/8gOSBgAGEMANIMxGBFyAasPf/0v8GE8//z1t8C
y4HU4DIALIluwLpLL+HiMANAGKoNAWASCavv/n/57gPcgOvP3oENOXj7NViOoAFGU6791+k4ghWD5Aga
QCyGakMAkODcU89R/I8Ng9TgNADk14dPn/8/c+kqVgySgwUqVBsCwAx49urN/zsPHmPFIDmaGvAXJInN

View File

@@ -0,0 +1,216 @@
namespace PckStudio.Forms.Utilities.AnimationEditor
{
partial class ChangeTile
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.treeView1 = new System.Windows.Forms.TreeView();
this.treeView2 = new System.Windows.Forms.TreeView();
this.metroLabel1 = new MetroFramework.Controls.MetroLabel();
this.metroLabel2 = new MetroFramework.Controls.MetroLabel();
this.metroTextBox1 = new MetroFramework.Controls.MetroTextBox();
this.metroTabControl1 = new MetroFramework.Controls.MetroTabControl();
this.Blocks = new System.Windows.Forms.TabPage();
this.Items = new System.Windows.Forms.TabPage();
this.metroTabControl1.SuspendLayout();
this.SuspendLayout();
//
// button1
//
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button1.ForeColor = System.Drawing.Color.White;
this.button1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.button1.Location = new System.Drawing.Point(55, 233);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 7;
this.button1.Text = "Save";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button2.ForeColor = System.Drawing.Color.White;
this.button2.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.button2.Location = new System.Drawing.Point(135, 233);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(75, 23);
this.button2.TabIndex = 13;
this.button2.Text = "Cancel";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// treeView1
//
this.treeView1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.treeView1.ForeColor = System.Drawing.Color.White;
this.treeView1.Location = new System.Drawing.Point(0, 0);
this.treeView1.Name = "treeView1";
this.treeView1.Size = new System.Drawing.Size(184, 125);
this.treeView1.TabIndex = 14;
this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViews_AfterSelect);
//
// treeView2
//
this.treeView2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.treeView2.ForeColor = System.Drawing.Color.White;
this.treeView2.Location = new System.Drawing.Point(0, 0);
this.treeView2.Name = "treeView2";
this.treeView2.Size = new System.Drawing.Size(184, 125);
this.treeView2.TabIndex = 14;
this.treeView2.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViews_AfterSelect);
//
// metroLabel1
//
this.metroLabel1.AutoSize = true;
this.metroLabel1.Location = new System.Drawing.Point(75, 13);
this.metroLabel1.Name = "metroLabel1";
this.metroLabel1.Size = new System.Drawing.Size(114, 19);
this.metroLabel1.TabIndex = 15;
this.metroLabel1.Text = "Please select a tile";
this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark;
//
// metroLabel2
//
this.metroLabel2.AutoSize = true;
this.metroLabel2.Location = new System.Drawing.Point(36, 35);
this.metroLabel2.Name = "metroLabel2";
this.metroLabel2.Size = new System.Drawing.Size(46, 19);
this.metroLabel2.TabIndex = 16;
this.metroLabel2.Text = "Filter: ";
this.metroLabel2.Theme = MetroFramework.MetroThemeStyle.Dark;
//
// metroTextBox1
//
//
//
//
this.metroTextBox1.CustomButton.Image = null;
this.metroTextBox1.CustomButton.Location = new System.Drawing.Point(113, 1);
this.metroTextBox1.CustomButton.Name = "";
this.metroTextBox1.CustomButton.Size = new System.Drawing.Size(21, 21);
this.metroTextBox1.CustomButton.Style = MetroFramework.MetroColorStyle.Blue;
this.metroTextBox1.CustomButton.TabIndex = 1;
this.metroTextBox1.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light;
this.metroTextBox1.CustomButton.UseSelectable = true;
this.metroTextBox1.CustomButton.Visible = false;
this.metroTextBox1.Lines = new string[0];
this.metroTextBox1.Location = new System.Drawing.Point(75, 35);
this.metroTextBox1.MaxLength = 32767;
this.metroTextBox1.Name = "metroTextBox1";
this.metroTextBox1.PasswordChar = '\0';
this.metroTextBox1.ScrollBars = System.Windows.Forms.ScrollBars.None;
this.metroTextBox1.SelectedText = "";
this.metroTextBox1.SelectionLength = 0;
this.metroTextBox1.SelectionStart = 0;
this.metroTextBox1.ShortcutsEnabled = true;
this.metroTextBox1.Size = new System.Drawing.Size(135, 23);
this.metroTextBox1.TabIndex = 17;
this.metroTextBox1.Theme = MetroFramework.MetroThemeStyle.Dark;
this.metroTextBox1.UseSelectable = true;
this.metroTextBox1.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109)))));
this.metroTextBox1.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel);
this.metroTextBox1.TextChanged += new System.EventHandler(this.filter_TextChanged);
//
// metroTabControl1
//
this.metroTabControl1.Controls.Add(this.Blocks);
this.metroTabControl1.Controls.Add(this.Items);
this.metroTabControl1.Location = new System.Drawing.Point(36, 60);
this.metroTabControl1.Name = "metroTabControl1";
this.metroTabControl1.SelectedIndex = 0;
this.metroTabControl1.Size = new System.Drawing.Size(192, 167);
this.metroTabControl1.TabIndex = 18;
this.metroTabControl1.Theme = MetroFramework.MetroThemeStyle.Dark;
this.metroTabControl1.UseSelectable = true;
//
// Blocks
//
this.Blocks.BackColor = System.Drawing.SystemColors.WindowFrame;
this.Blocks.Location = new System.Drawing.Point(4, 38);
this.Blocks.Name = "Blocks";
this.Blocks.Size = new System.Drawing.Size(184, 125);
this.Blocks.TabIndex = 0;
this.Blocks.Text = "Blocks";
//
// Items
//
this.Items.BackColor = System.Drawing.SystemColors.WindowFrame;
this.Items.Location = new System.Drawing.Point(4, 38);
this.Items.Name = "Items";
this.Items.Size = new System.Drawing.Size(184, 125);
this.Items.TabIndex = 0;
this.Items.Text = "Items";
//
// ChangeTile
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(264, 264);
this.ControlBox = false;
this.Controls.Add(this.metroTabControl1);
this.Controls.Add(this.metroTextBox1);
this.Controls.Add(this.metroLabel2);
this.Controls.Add(this.metroLabel1);
this.Controls.Add(this.treeView1);
this.Controls.Add(this.treeView2);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "ChangeTile";
this.Resizable = false;
this.Style = MetroFramework.MetroColorStyle.Silver;
this.Theme = MetroFramework.MetroThemeStyle.Dark;
this.metroTabControl1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
private void MetroTextBox1_TextChanged(object sender, System.EventArgs e)
{
throw new System.NotImplementedException();
}
#endregion
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.TreeView treeView1;
private System.Windows.Forms.TreeView treeView2;
private MetroFramework.Controls.MetroLabel metroLabel1;
private MetroFramework.Controls.MetroLabel metroLabel2;
private MetroFramework.Controls.MetroTextBox metroTextBox1;
private MetroFramework.Controls.MetroTabControl metroTabControl1;
private System.Windows.Forms.TabPage Blocks;
private System.Windows.Forms.TabPage Items;
}
}

View File

@@ -0,0 +1,205 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Windows.Forms;
using MetroFramework.Forms;
namespace PckStudio.Forms.Utilities.AnimationEditor
{
public partial class ChangeTile : MetroForm
{
string selectedTile = "";
public string SelectedTile
{
get { return selectedTile; }
set { selectedTile = value; }
}
bool isItem = false;
public bool IsItem
{
get { return isItem; }
}
List<TreeNode> treeView1Cache = new List<TreeNode>();
List<TreeNode> treeView2Cache = new List<TreeNode>();
private void treeViews_AfterSelect(object sender, TreeViewEventArgs e)
{
Tuple<string, int> tileData = e.Node.Tag as Tuple<string, int>;
Console.WriteLine(tileData.Item1 + " - " + tileData.Item2);
selectedTile = tileData.Item1;
Console.WriteLine(selectedTile);
if (e.Node.TreeView == treeView1) isItem = false;
if (e.Node.TreeView == treeView2) isItem = true;
}
public ChangeTile()
{
InitializeComponent();
ImageList tiles = new ImageList();
tiles.ColorDepth = ColorDepth.Depth32Bit;
for(int i = 1; i < 545; i++)
{
int row = (i - 1) / 16;
int column = (i - 1) % 16;
Rectangle tileArea = new Rectangle(new Point(column * 16, row * 16), new Size(16, 16));
Bitmap tileImage = new Bitmap(16, 16);
using (Graphics gfx = Graphics.FromImage(tileImage))
{
gfx.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
gfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
gfx.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
gfx.DrawImage(Properties.Resources.terrain_sheet, new Rectangle(0, 0, 16, 16), tileArea, GraphicsUnit.Pixel);
}
tiles.Images.Add(tileImage);
}
for (int i = 1; i < 273; i++)
{
int row = (i - 1) / 16;
int column = (i - 1) % 16;
Rectangle tileArea = new Rectangle(new Point(column * 16, row * 16), new Size(16, 16));
Bitmap tileImage = new Bitmap(16, 16);
using (Graphics gfx = Graphics.FromImage(tileImage))
{
gfx.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
gfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
gfx.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
gfx.DrawImage(Properties.Resources.items_sheet, new Rectangle(0, 0, 16, 16), tileArea, GraphicsUnit.Pixel);
}
tiles.Images.Add(tileImage);
}
try
{
Newtonsoft.Json.Linq.JObject tileData = Newtonsoft.Json.Linq.JObject.Parse(Encoding.Default.GetString(Properties.Resources.tileData));
int i = 0;
if (tileData["Blocks"] != null)
{
foreach (Newtonsoft.Json.Linq.JObject content in tileData["Blocks"].Children())
{
foreach (Newtonsoft.Json.Linq.JProperty prop in content.Properties())
{
if (!prop.Name.Contains("UNUSED") && !prop.Name.Contains("PART"))
{
TreeNode tileNode = new TreeNode();
tileNode.Text = (string)prop.Value;
Tuple<string, int> finalTileData = new Tuple<string, int>(prop.Name, i);
tileNode.Tag = finalTileData;
tileNode.ImageIndex = i;
tileNode.SelectedImageIndex = i;
treeView1.Nodes.Add(tileNode);
treeView1Cache.Add(tileNode);
}
i++;
}
}
}
if (tileData["Items"] != null)
{
foreach (Newtonsoft.Json.Linq.JObject content in tileData["Items"].Children())
{
foreach (Newtonsoft.Json.Linq.JProperty prop in content.Properties())
{
if (!prop.Name.Contains("UNUSED") && !prop.Name.Contains("PART"))
{
TreeNode tileNode = new TreeNode();
tileNode.Text = (string)prop.Value;
Tuple<string, int> finalTileData = new Tuple<string, int>(prop.Name, i);
tileNode.Tag = finalTileData;
tileNode.ImageIndex = i;
tileNode.SelectedImageIndex = i;
treeView2.Nodes.Add(tileNode);
treeView2Cache.Add(tileNode);
}
i++;
}
}
}
treeView1.ImageList = tiles;
treeView2.ImageList = tiles;
Blocks.Controls.Add(treeView1);
Items.Controls.Add(treeView2);
}
catch (Newtonsoft.Json.JsonException j_ex)
{
MessageBox.Show(j_ex.Message, "Error");
return;
}
}
void filter_TextChanged(object sender, EventArgs e)
{
// Some code in this function is modified code from this StackOverflow answer - MattNL
//https://stackoverflow.com/questions/8260322/filter-a-treeview-with-a-textbox-in-a-c-sharp-winforms-app
//blocks repainting tree until all objects loaded
treeView1.BeginUpdate();
treeView1.Nodes.Clear();
treeView2.BeginUpdate();
treeView2.Nodes.Clear();
if (metroTextBox1.Text != string.Empty)
{
foreach (TreeNode _node in treeView1Cache)
{
if (_node.Text.ToLower().Contains(metroTextBox1.Text.ToLower()))
{
treeView1.Nodes.Add((TreeNode)_node.Clone());
}
}
foreach (TreeNode _node in treeView2Cache)
{
if (_node.Text.ToLower().Contains(metroTextBox1.Text.ToLower()))
{
treeView2.Nodes.Add((TreeNode)_node.Clone());
}
}
}
else
{
foreach (TreeNode _node in treeView1Cache)
{
treeView1.Nodes.Add((TreeNode)_node.Clone());
}
foreach (TreeNode _node in treeView2Cache)
{
treeView2.Nodes.Add((TreeNode)_node.Clone());
}
}
//enables redrawing tree after all objects have been added
treeView1.EndUpdate();
treeView2.EndUpdate();
}
private void button2_Click(object sender, EventArgs e)
{
Close();
}
private void button1_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(selectedTile)) return;
Close();
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -360,18 +360,18 @@
<Compile Include="Forms\Additional-Popups\FakeProgressBar.Designer.cs">
<DependentUpon>FakeProgressBar.cs</DependentUpon>
</Compile>
<Compile Include="Forms\Skins-And-Textures\addAnimatedTexture.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\Skins-And-Textures\addAnimatedTexture.Designer.cs">
<DependentUpon>addAnimatedTexture.cs</DependentUpon>
</Compile>
<Compile Include="Forms\Additional-Popups\rename.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\Additional-Popups\rename.Designer.cs">
<DependentUpon>rename.cs</DependentUpon>
</Compile>
<Compile Include="Forms\Utilities\Animation\ChangeTile.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\Utilities\Animation\ChangeTile.Designer.cs">
<DependentUpon>ChangeTile.cs</DependentUpon>
</Compile>
<Compile Include="Forms\Utilities\Animation\SetBulkSpeed.cs">
<SubType>Form</SubType>
</Compile>
@@ -459,10 +459,10 @@
<Compile Include="Forms\Testx-12.Designer.cs">
<DependentUpon>Testx-12.cs</DependentUpon>
</Compile>
<Compile Include="Forms\Utilities\AnimationEditor.cs">
<Compile Include="Forms\Utilities\Animation\AnimationEditor.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\Utilities\AnimationEditor.Designer.cs">
<Compile Include="Forms\Utilities\Animation\AnimationEditor.Designer.cs">
<DependentUpon>AnimationEditor.cs</DependentUpon>
</Compile>
<Compile Include="Forms\Utilities\Animation\FrameEditor.cs">
@@ -471,10 +471,10 @@
<Compile Include="Forms\Utilities\Animation\FrameEditor.Designer.cs">
<DependentUpon>FrameEditor.cs</DependentUpon>
</Compile>
<Compile Include="Forms\Utilities\AudioEditor.cs">
<Compile Include="Forms\Utilities\Audio\AudioEditor.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\Utilities\AudioEditor.Designer.cs">
<Compile Include="Forms\Utilities\Audio\AudioEditor.Designer.cs">
<DependentUpon>AudioEditor.cs</DependentUpon>
</Compile>
<Compile Include="Forms\Utilities\COLEditor.cs">
@@ -604,15 +604,12 @@
<EmbeddedResource Include="Forms\Additional-Popups\FakeProgressBar.resx">
<DependentUpon>FakeProgressBar.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\Skins-And-Textures\addAnimatedTexture.ja.resx">
<DependentUpon>addAnimatedTexture.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\Skins-And-Textures\addAnimatedTexture.resx">
<DependentUpon>addAnimatedTexture.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\Additional-Popups\rename.resx">
<DependentUpon>rename.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\Utilities\Animation\ChangeTile.resx">
<DependentUpon>ChangeTile.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\Utilities\Animation\SetBulkSpeed.resx">
<DependentUpon>SetBulkSpeed.cs</DependentUpon>
</EmbeddedResource>
@@ -636,6 +633,7 @@
</EmbeddedResource>
<EmbeddedResource Include="Forms\Skins-And-Textures\addnewskin.resx">
<DependentUpon>addnewskin.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Forms\Additional-Popups\AddPCKPassword.resx">
<DependentUpon>AddPCKPassword.cs</DependentUpon>
@@ -684,13 +682,13 @@
<EmbeddedResource Include="Forms\Testx-12.resx">
<DependentUpon>Testx-12.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\Utilities\AnimationEditor.resx">
<EmbeddedResource Include="Forms\Utilities\Animation\AnimationEditor.resx">
<DependentUpon>AnimationEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\Utilities\Animation\FrameEditor.resx">
<DependentUpon>FrameEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\Utilities\AudioEditor.resx">
<EmbeddedResource Include="Forms\Utilities\Audio\AudioEditor.resx">
<DependentUpon>AudioEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\Utilities\COLEditor.ja.resx">
@@ -785,7 +783,7 @@
<DependentUpon>programInfo.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<Generator>PublicResXFileCodeGenerator</Generator>
<SubType>Designer</SubType>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
@@ -818,6 +816,7 @@
<None Include="Resources\apps.zip" />
<None Include="Resources\binkawin.asi" />
<None Include="Resources\settings.ini" />
<None Include="Resources\tileData.json" />
<None Include="Resources\UntitledSkinPCK.pck" />
<None Include="xbox.png" />
<None Include="youtube_PNG15.png" />
@@ -842,10 +841,15 @@
<None Include="Resources\discord.png" />
<None Include="Resources\man.png" />
<None Include="Resources\external-content.duckduckgo.png" />
<None Include="Resources\clock.png" />
<None Include="Resources\changeTile.png" />
<None Include="Resources\items.png" />
<Content Include="Resources\mss32.dll" />
<None Include="Resources\sdDownload.png" />
<None Include="Resources\Replace.png" />
<None Include="Resources\pack.png" />
<None Include="Resources\TileData.txt" />
<None Include="Resources\terrain.png" />
<Content Include="Sin_titulo991.ico" />
<Content Include="x64\d3dcompiler_47.dll" />
<Content Include="x86\d3dcompiler_47.dll" />

View File

@@ -19,10 +19,10 @@ namespace PckStudio.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
public class Resources {
private static global::System.Resources.ResourceManager resourceMan;
@@ -36,7 +36,7 @@ namespace PckStudio.Properties {
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
public static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PckStudio.Properties.Resources", typeof(Resources).Assembly);
@@ -51,7 +51,7 @@ namespace PckStudio.Properties {
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
public static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
@@ -63,7 +63,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
internal static byte[] apps {
public static byte[] apps {
get {
object obj = ResourceManager.GetObject("apps", resourceCulture);
return ((byte[])(obj));
@@ -73,7 +73,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ARROW {
public static System.Drawing.Bitmap ARROW {
get {
object obj = ResourceManager.GetObject("ARROW", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -83,7 +83,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap bg1 {
public static System.Drawing.Bitmap bg1 {
get {
object obj = ResourceManager.GetObject("bg1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -93,7 +93,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap bg2 {
public static System.Drawing.Bitmap bg2 {
get {
object obj = ResourceManager.GetObject("bg2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -103,7 +103,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap BINKA_ICON {
public static System.Drawing.Bitmap BINKA_ICON {
get {
object obj = ResourceManager.GetObject("BINKA_ICON", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -113,7 +113,27 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Del {
public static System.Drawing.Bitmap changeTile {
get {
object obj = ResourceManager.GetObject("changeTile", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap clock {
get {
object obj = ResourceManager.GetObject("clock", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap Del {
get {
object obj = ResourceManager.GetObject("Del", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -123,7 +143,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap discord {
public static System.Drawing.Bitmap discord {
get {
object obj = ResourceManager.GetObject("discord", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -133,7 +153,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ExportFile {
public static System.Drawing.Bitmap ExportFile {
get {
object obj = ResourceManager.GetObject("ExportFile", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -143,7 +163,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap external_content_duckduckgo {
public static System.Drawing.Bitmap external_content_duckduckgo {
get {
object obj = ResourceManager.GetObject("external-content.duckduckgo", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -153,7 +173,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap IMAGE_ICON {
public static System.Drawing.Bitmap IMAGE_ICON {
get {
object obj = ResourceManager.GetObject("IMAGE_ICON", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -163,7 +183,17 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap LOC_ICON {
public static System.Drawing.Bitmap items_sheet {
get {
object obj = ResourceManager.GetObject("items_sheet", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap LOC_ICON {
get {
object obj = ResourceManager.GetObject("LOC_ICON", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -173,7 +203,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap man {
public static System.Drawing.Bitmap man {
get {
object obj = ResourceManager.GetObject("man", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -183,7 +213,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap More2 {
public static System.Drawing.Bitmap More2 {
get {
object obj = ResourceManager.GetObject("More2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -193,7 +223,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap MROE {
public static System.Drawing.Bitmap MROE {
get {
object obj = ResourceManager.GetObject("MROE", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -203,7 +233,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap NoImageFound {
public static System.Drawing.Bitmap NoImageFound {
get {
object obj = ResourceManager.GetObject("NoImageFound", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -213,7 +243,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap pack {
public static System.Drawing.Bitmap pack {
get {
object obj = ResourceManager.GetObject("pack", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -223,7 +253,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap PCK_ICON {
public static System.Drawing.Bitmap PCK_ICON {
get {
object obj = ResourceManager.GetObject("PCK_ICON", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -233,7 +263,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap pckCenterHeader {
public static System.Drawing.Bitmap pckCenterHeader {
get {
object obj = ResourceManager.GetObject("pckCenterHeader", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -243,7 +273,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap pckClosed {
public static System.Drawing.Bitmap pckClosed {
get {
object obj = ResourceManager.GetObject("pckClosed", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -253,7 +283,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap pckDrop {
public static System.Drawing.Bitmap pckDrop {
get {
object obj = ResourceManager.GetObject("pckDrop", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -263,7 +293,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap pckOpen {
public static System.Drawing.Bitmap pckOpen {
get {
object obj = ResourceManager.GetObject("pckOpen", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -273,7 +303,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap power3 {
public static System.Drawing.Bitmap power3 {
get {
object obj = ResourceManager.GetObject("power3", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -283,7 +313,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ps3 {
public static System.Drawing.Bitmap ps3 {
get {
object obj = ResourceManager.GetObject("ps3", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -293,7 +323,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Replace {
public static System.Drawing.Bitmap Replace {
get {
object obj = ResourceManager.GetObject("Replace", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -303,7 +333,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap sdDownload {
public static System.Drawing.Bitmap sdDownload {
get {
object obj = ResourceManager.GetObject("sdDownload", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -314,7 +344,7 @@ namespace PckStudio.Properties {
/// Looks up a localized string similar to http://nobledez.ga/
///http://www.pckstudio.xyz/.
/// </summary>
internal static string settings {
public static string settings {
get {
return ResourceManager.GetString("settings", resourceCulture);
}
@@ -323,7 +353,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Splash {
public static System.Drawing.Bitmap Splash {
get {
object obj = ResourceManager.GetObject("Splash", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -333,7 +363,27 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap turn_off__1_1 {
public static System.Drawing.Bitmap terrain_sheet {
get {
object obj = ResourceManager.GetObject("terrain_sheet", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
public static byte[] tileData {
get {
object obj = ResourceManager.GetObject("tileData", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap turn_off__1_1 {
get {
object obj = ResourceManager.GetObject("turn-off (1)1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -343,7 +393,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
internal static byte[] UntitledSkinPCK {
public static byte[] UntitledSkinPCK {
get {
object obj = ResourceManager.GetObject("UntitledSkinPCK", resourceCulture);
return ((byte[])(obj));
@@ -353,7 +403,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap wii_u_games_tool {
public static System.Drawing.Bitmap wii_u_games_tool {
get {
object obj = ResourceManager.GetObject("wii-u-games-tool", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -363,7 +413,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap wiiu {
public static System.Drawing.Bitmap wiiu {
get {
object obj = ResourceManager.GetObject("wiiu", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -373,7 +423,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap xbox {
public static System.Drawing.Bitmap xbox {
get {
object obj = ResourceManager.GetObject("xbox", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -383,7 +433,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap youtube_PNG15 {
public static System.Drawing.Bitmap youtube_PNG15 {
get {
object obj = ResourceManager.GetObject("youtube_PNG15", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -393,7 +443,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap youtube_PNG151 {
public static System.Drawing.Bitmap youtube_PNG151 {
get {
object obj = ResourceManager.GetObject("youtube_PNG151", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -403,7 +453,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap youtube_PNG152 {
public static System.Drawing.Bitmap youtube_PNG152 {
get {
object obj = ResourceManager.GetObject("youtube_PNG152", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -413,7 +463,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ZUnknown {
public static System.Drawing.Bitmap ZUnknown {
get {
object obj = ResourceManager.GetObject("ZUnknown", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
@@ -423,7 +473,7 @@ namespace PckStudio.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ZZFolder {
public static System.Drawing.Bitmap ZZFolder {
get {
object obj = ResourceManager.GetObject("ZZFolder", resourceCulture);
return ((System.Drawing.Bitmap)(obj));

View File

@@ -157,12 +157,18 @@
<data name="ExportFile" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ExportFile.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pack" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Del" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Del.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Splash" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Splash.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="external-content.duckduckgo" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\external-content.duckduckgo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pckOpen" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\pckOpen.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@@ -190,6 +196,12 @@
<data name="pckClosed" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pckClosed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="UntitledSkinPCK" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\UntitledSkinPCK.pck;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="apps" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\apps.zip;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="ZUnknown" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\iconImageList\ZUnknown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@@ -199,6 +211,9 @@
<data name="BINKA_ICON" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\iconImageList\BINKA ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="clock" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\clock.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="bg1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\bg1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@@ -208,28 +223,25 @@
<data name="xbox" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\xbox.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="settings" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\settings.ini;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
<data name="ZZFolder" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\iconImageList\ZZFolder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="discord" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\discord.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="external-content.duckduckgo" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\external-content.duckduckgo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="changeTile" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\changeTile.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="apps" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\apps.zip;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="items_sheet" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\items.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pack" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="terrain_sheet" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\terrain.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="settings" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\settings.ini;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
<data name="tileData" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\tileData.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="UntitledSkinPCK" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\UntitledSkinPCK.pck;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<!--data name="settings1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\bin\Release\settings.ini;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data-->
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 568 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

View File

@@ -0,0 +1,824 @@
{
"COMMENT_1": "Tile data reearch by MattNL",
"COMMENT_2": "JSON conversion by PhoenixARC",
"Blocks": [
{ "grass_top": "Grass Block (Top)" },
{ "stone": "Stone" },
{ "dirt": "Dirt" },
{ "grass_side": "Grass Block (Side)" },
{ "planks_oak": "Oak Planks" },
{ "stoneslab_side": "Stone Slab (Side)" },
{ "stoneslab_top": "Stone Slab (Top)" },
{ "brick": "Bricks" },
{ "tnt_side": "TNT (Side)" },
{ "tnt_top": "TNT (Top)" },
{ "tnt_bottom": "TNT (Bottom)" },
{ "web": "Cobweb" },
{ "flower_rose": "Poppy" },
{ "flower_dandelion": "Dandelion" },
{ "portal": "Nether Portal" },
{ "sapling": "Oak Sapling" },
{ "cobblestone": "Cobblestone" },
{ "bedrock": "Bedrock" },
{ "sand": "Sand" },
{ "gravel": "Gravel" },
{ "log_oak": "Oak Log (Side)" },
{ "log_oak_top": "Oak Log (Top)" },
{ "iron_block": "Iron Block" },
{ "gold_block": "Gold Block" },
{ "diamond_block": "Diamond Block" },
{ "emerald_block": "Emerald Block" },
{ "redstone_block": "Redstone Block" },
{ "dropper_front_horizontal": "Dropper (Front)" },
{ "mushroom_red": "Red Mushroom" },
{ "mushroom_brown": "Brown Mushroom" },
{ "sapling_jungle": "Jungle Sapling" },
{ "fire_0": "Fire (Layer 1)" },
{ "gold_ore": "Gold Ore" },
{ "iron_ore": "Iron Ore" },
{ "coal_ore": "Coal Ore" },
{ "bookshelf": "Bookshelf" },
{ "cobblestone_mossy": "Moss Stone" },
{ "obsidian": "Obsidian" },
{ "grass_side_overlay": "Grass Side (Overlay)" },
{ "tallgrass": "Tall Grass" },
{ "dispenser_front_vertical": "Dispenser (Vertical) (Front)" },
{ "beacon": "Beacon" },
{ "dropper_front_vertical": "Dropper (Vertical) (Front)" },
{ "workbench_top": "Crafting Table (Top)" },
{ "furnace_front": "Furnace (Front)" },
{ "furnace_side": "Furnace (Side)" },
{ "dispenser_front": "Dispenser (Front)" },
{ "fire_1": "Fire (Layer 2)" },
{ "sponge": "Sponge" },
{ "glass": "Glass" },
{ "diamond_ore": "Diamond Ore" },
{ "redstone_ore": "Redstone Ore" },
{ "leaves": "Oak Leaves" },
{ "leaves_opaque": "Oak Leaves (Opaque)" },
{ "stonebrick": "Stone Bricks" },
{ "deadbush": "Dead Bush" },
{ "fern": "Fern" },
{ "daylight_detector_top": "Daylight Sensor (Top)" },
{ "daylight_detector_side": "Daylight Sensor (Side)" },
{ "workbench_front": "Crafting Table (Front)" },
{ "workbench_side": "Crafting Table (Side)" },
{ "furnace_front_lit": "Furnace (Lit) (Front)" },
{ "furnace_top": "Furnace (Top)" },
{ "sapling_spruce": "Spruce Sapling" },
{ "wool_colored_white": "White Wool" },
{ "mob_spawner": "Monster Spawner" },
{ "snow": "Snow" },
{ "ice": "Ice" },
{ "snow_side": "Grass Block (Snow) (Side)" },
{ "cactus_top": "Cactus (Top)" },
{ "cactus_side": "Cactus (Side)" },
{ "cactus_bottom": "Cactus (Bottom)" },
{ "clay": "Clay" },
{ "reeds": "Sugar Canes" },
{ "jukebox_side": "Jukebox (Side)" },
{ "jukebox_top": "Jukebox (Top)" },
{ "waterlily": "Lily Pad" },
{ "mycel_side": "Mycelium (Side)" },
{ "mycel_top": "Mycelium (Top)" },
{ "sapling_birch": "Birch Sapling" },
{ "torch": "Torch" },
{ "door_wood_upper": "Oak Door (Upper)" },
{ "door_iron_upper": "Iron Door (Upper)" },
{ "ladder": "Ladder" },
{ "trapdoor": "Oak Trapdoor" },
{ "iron_bars": "Iron Bars" },
{ "farmland_wet": "Farmland (Wet)" },
{ "farmland_dry": "Farmland" },
{ "crops_0": "Wheat (Stage 1)" },
{ "crops_1": "Wheat (Stage 2)" },
{ "crops_2": "Wheat (Stage 3)" },
{ "crops_3": "Wheat (Stage 4)" },
{ "crops_4": "Wheat (Stage 5)" },
{ "crops_5": "Wheat (Stage 6)" },
{ "crops_6": "Wheat (Stage 7)" },
{ "crops_7": "Wheat (Stage 8)" },
{ "lever": "Lever" },
{ "door_wood_lower": "Oak Door (Lower)" },
{ "door_iron_lower": "Iron Door (Lower)" },
{ "redstone_torch_on": "Redstone Torch" },
{ "stonebrick_mossy": "Mossy Stone Bricks" },
{ "stonebrick_cracked": "Cracked Stone Bricks" },
{ "pumpkin_top": "Pumpkin (Top)" },
{ "netherrack": "Netherrack" },
{ "soul_sand": "Soul Sand" },
{ "glowstone": "Glowstone" },
{ "piston_top_sticky": "Stick Piston (Top)" },
{ "piston_top": "Piston (Top)" },
{ "piston_side": "Piston (Side)" },
{ "piston_bottom": "Piston (Bottom)" },
{ "piston_inner_top": "Piston (Inside)" },
{ "pumpkin_stem": "Stem" },
{ "rail_normal_turned": "Rail (Turned)" },
{ "wool_colored_black": "Black Wool" },
{ "wool_colored_gray": "Gray Wool" },
{ "redstone_torch_off": "Redstone Torch (Off)" },
{ "log_spruce": "Spruce Log (Side)" },
{ "log_birch": "Birch Log (Side)" },
{ "pumpkin_side": "Pumpkin (Side)" },
{ "pumpkin_face_off": "Carved Pumpkin (Front)" },
{ "pumpkin_face_on": "Jack o'Lantern (Front)" },
{ "cake_top": "Cake (Top)" },
{ "cake_side": "Cake (Side)" },
{ "cake_inner": "Cake (Inside)" },
{ "cake_bottom": "Cake (Bottom)" },
{ "mushroom_block_skin_red": "Mushroom Block (Red)" },
{ "mushroom_block_skin_brown": "Mushroom Block (Brown)" },
{ "stem_bent": "Stem (Attached)" },
{ "rail_normal": "Rail" },
{ "wool_colored_red": "Red Wool" },
{ "wool_colored_pink": "Pink Wool" },
{ "repeater": "Repeater" },
{ "leaves_spruce": "Spruce Leaves" },
{ "leaves_spruce_opaque": "Spruce Leaves (Opaque)" },
{ "UNUSED_conduit_top": "" },
{ "turtle_egg_hatch_0": "Turtle Egg (Stage 1)" },
{ "melon_side": "Melon (Side)" },
{ "melon_top": "Melon (Top)" },
{ "cauldron_top": "Cauldron (Top)" },
{ "cauldron_inner": "Cauldron (Inside)" },
{ "sponge_wet": "Sponge (Wet)" },
{ "mushroom_block_skin_stem": "Mushroom Block (Stem)" },
{ "mushroom_block_inside": "Mushroom Block (Inside)" },
{ "vine": "Vine" },
{ "lapis_block": "Lapis Lazuli Block" },
{ "wool_colored_green": "Green Wool" },
{ "wool_colored_lime": "Lime Wool" },
{ "repeater_on": "Redstone Repeater (On)" },
{ "glass_pane_top": "Glass Pane (Top)" },
{ "UNUSED_CHEST_TOP": "" },
{ "UNUSED_ENDER_CHEST_TOP": "" },
{ "turtle_egg_hatch_1": "Turtle Egg (Stage 2)" },
{ "turtle_egg_hatch_2": "Turtle Egg (Stage 3)" },
{ "log_jungle": "Jungle Log (Side)" },
{ "cauldron_side": "Cauldron (Side)" },
{ "cauldron_bottom": "Cauldron (Bottom)" },
{ "brewing_stand_base": "Brewing Stand (Base)" },
{ "brewing_stand": "Brewing Stand" },
{ "endframe_top": "End Portal Frame (Top)" },
{ "endframe_side": "End Portal Frame (Side)" },
{ "lapis_ore": "Lapis Lazuli Ore" },
{ "wool_colored_brown": "Brown Wool" },
{ "wool_colored_yellow": "Yellow Wool" },
{ "rail_golden": "Powered Rail" },
{ "redstone_dust_cross": "Redstone Dust (Cross)" },
{ "redstone_dust_line": "Redstone Dust (Line)" },
{ "enchantment_top": "Enchantment Table (Top)" },
{ "dragon_egg": "Dragon Egg" },
{ "cocoa_2": "Cocoa (Stage 2)" },
{ "cocoa_1": "Cocoa (Stage 1)" },
{ "cocoa_0": "Cocoa (Stage 0)" },
{ "emerald_ore": "Emerald Ore" },
{ "trip_wire_source": "Tripwire Hook" },
{ "trip_wire": "Tripwire" },
{ "endframe_eye": "End Portal Frame (Eye)" },
{ "end_stone": "End Stone" },
{ "sandstone_top": "Sandstone (Top)" },
{ "wool_colored_blue": "Blue Wool" },
{ "wool_colored_light_blue": "Light Blue Wool" },
{ "powered_rail_on": "Powered Rail (On)" },
{ "redstone_dust_cross_overlay": "Redstone Dust (Cross) (Overlay)" },
{ "redstone_dust_line_overlay": "Redstone Dust (Line) (Overlay)" },
{ "enchantment_side": "Enchantment Table (Side)" },
{ "enchantment_bottom": "Enchantment Table (Bottom)" },
{ "diamondRing": "Diamond Score Ring" },
{ "itemframe_back": "Item Frame" },
{ "flower_pot": "Flower Pot" },
{ "comparator_off": "Redstone Comparator" },
{ "comparator_on": "Redstone Comparator (On)" },
{ "rail_activator": "Activator Rail" },
{ "rail_activator_powered": "Activator Rail (On)" },
{ "quartz_ore": "Quartz Ore" },
{ "sandstone_side": "Sandstone (Side)" },
{ "wool_colored_purple": "Purple Wool" },
{ "wool_colored_magenta": "Magenta Wool" },
{ "detectorRail": "Detector Rail" },
{ "leaves_jungle": "Jungle Leaves" },
{ "leaves_jungle_opaque": "Jungle Leaves (Opaque)" },
{ "planks_spruce": "Spruce Planks" },
{ "planks_jungle": "Jungle Planks" },
{ "carrots_stage_0": "Carrots (Stage 1)" },
{ "carrots_stage_1": "Carrots (Stage 2)" },
{ "carrots_stage_2": "Carrots (Stage 3)" },
{ "carrots_stage_3": "Carrots (Stage 4)" },
{ "slime": "Slime Block" },
{ "water": "Water" },
{ "water_flow": "Flowing Water" },
{ "water_flow_PART2": "" },
{ "sandstone_bottom": "Sandstone (Bottom)" },
{ "wool_colored_cyan": "Cyan Wool" },
{ "wool_colored_orange": "Orange Wool" },
{ "redstoneLight": "Redstone Lamp" },
{ "redstoneLight_lit": "Redstone Lamp (On)" },
{ "stonebrick_carved": "Chiseled Stone Bricks" },
{ "planks_birch": "Birch Planks" },
{ "anvil_base": "Anvil (Base)" },
{ "anvil_top_damaged_1": "Anvil (Slightly Damaged) (Top)" },
{ "quartz_block_chiseled_top": "Chiseled Quartz Block (Top)" },
{ "quartz_block_lines_top": "Pillar Quartz Block (Top)" },
{ "quartz_block_top": "Quartz Block (Top)" },
{ "hopper_outside": "Hopper (Side)" },
{ "detectorRail_on": "Detector Rail (On)" },
{ "water_flow_PART3": "" },
{ "water_flow_PART4": "" },
{ "nether_brick": "Nether Brick" },
{ "wool_colored_silver": "Light Gray Wool" },
{ "nether_wart_stage_0": "Nether Wart (Stage 1)" },
{ "nether_wart_stage_1": "Nether Wart (Stage 2)" },
{ "nether_wart_stage_2": "Nether Wart (Stage 3)" },
{ "sandstone_carved": "Chiseled Sandstone" },
{ "sandstone_smooth": "Smooth Sandstone" },
{ "anvil_top": "Anvil (Top)" },
{ "anvil_top_damaged_2": "Anvil (Very Damaged) (Top)" },
{ "quartz_block_chiseled": "Chiseled Quartz Block (Side)" },
{ "quartz_block_lines": "Pillar Quartz Block (Side)" },
{ "quartz_block_side": "Quartz Block (Side)" },
{ "hopper_inside": "Hopper (Inside)" },
{ "lava": "Lava" },
{ "lava_flow": "Flowing Lava" },
{ "lava_flow_PART2": "" },
{ "destroy_0": "Destroy (Stage 1)" },
{ "destroy_1": "Destroy (Stage 2)" },
{ "destroy_2": "Destroy (Stage 3)" },
{ "destroy_3": "Destroy (Stage 4)" },
{ "destroy_4": "Destroy (Stage 5)" },
{ "destroy_5": "Destroy (Stage 6)" },
{ "destroy_6": "Destroy (Stage 7)" },
{ "destroy_7": "Destroy (Stage 8)" },
{ "destroy_8": "Destroy (Stage 9)" },
{ "destroy_9": "Destroy (Stage 10)" },
{ "hay_block_side": "Hay Block (Side)" },
{ "quartz_block_bottom": "Quartz Block (Bottom)" },
{ "hopper_top": "Hopper (Top)" },
{ "hay_block_top": "Hay Block (Top)" },
{ "lava_flow_PART3": "" },
{ "lava_flow_PART4": "" },
{ "coal_block": "Coal Block" },
{ "hardened_clay": "Terracotta" },
{ "noteblock": "Note Block" },
{ "stone_andesite": "Andesite" },
{ "stone_andesite_smooth": "Smooth Andesite" },
{ "stone_diorite": "Diorite" },
{ "stone_diorite_smooth": "Smooth Diorite" },
{ "stone_granite": "Granite" },
{ "stone_granite_smooth": "Smooth Granite" },
{ "potatoes_stage_0": "Potatoes (Stage 1)" },
{ "potatoes_stage_1": "Potatoes (Stage 2)" },
{ "potatoes_stage_2": "Potatoes (Stage 3)" },
{ "potatoes_stage_3": "Potatoes (Stage 4)" },
{ "log_spruce_top": "Spruce Log (Top)" },
{ "log_jungle_top": "Jungle Log (Top)" },
{ "log_birch_top": "Birch Log (Top)" },
{ "hardened_clay_stained_black": "Black Terracotta" },
{ "hardened_clay_stained_blue": "Blue Terracotta" },
{ "hardened_clay_stained_brown": "Brown Terracotta" },
{ "hardened_clay_stained_cyan": "Cyan Terracotta" },
{ "hardened_clay_stained_gray": "Gray Terracotta" },
{ "hardened_clay_stained_green": "Green Terracotta" },
{ "hardened_clay_stained_light_blue": "Light Blue Terracotta" },
{ "hardened_clay_stained_lime": "Lime Terracotta" },
{ "hardened_clay_stained_magenta": "Magenta Terracotta" },
{ "hardened_clay_stained_orange": "Orange Terracotta" },
{ "hardened_clay_stained_pink": "Pink Terracotta" },
{ "hardened_clay_stained_purple": "Purple Terracotta" },
{ "hardened_clay_stained_red": "Red Terracotta" },
{ "hardened_clay_stained_silver": "Light Gray Terracotta" },
{ "hardened_clay_stained_white": "White Terracotta" },
{ "hardened_clay_stained_yellow": "Yellow Terracotta" },
{ "glass_black": "Black Glass" },
{ "glass_blue": "Blue Glass" },
{ "glass_brown": "Brown Glass" },
{ "glass_cyan": "Cyan Glass" },
{ "glass_gray": "Gray Glass" },
{ "glass_green": "Green Glass" },
{ "glass_light_blue": "Light Blue Glass" },
{ "glass_lime": "Lime Glass" },
{ "glass_magenta": "Magenta Glass" },
{ "glass_orange": "Orange Glass" },
{ "glass_pink": "Pink Glass" },
{ "glass_purple": "Purple Glass" },
{ "glass_red": "Red Glass" },
{ "glass_silver": "Light Gray Glass" },
{ "glass_white": "White Glass" },
{ "glass_yellow": "Yellow Glass" },
{ "glass_pane_black": "Black Glass Pane" },
{ "glass_pane_blue": "Blue Glass Pane" },
{ "glass_pane_brown": "Brown Glass Pane" },
{ "glass_pane_cyan": "Cyan Glass Pane" },
{ "glass_pane_gray": "Gray Glass Pane" },
{ "glass_pane_green": "Green Glass Pane" },
{ "glass_pane_light_blue": "Light Blue Glass Pane" },
{ "glass_pane_lime": "Lime Glass Pane" },
{ "glass_pane_magenta": "Magenta Glass Pane" },
{ "glass_pane_orange": "Orange Glass Pane" },
{ "glass_pane_pink": "Pink Glass Pane" },
{ "glass_pane_purple": "Purple Glass Pane" },
{ "glass_pane_red": "Red Glass Pane" },
{ "glass_pane_silver": "Light Gray Glass Pane" },
{ "glass_pane_white": "White Glass Pane" },
{ "glass_pane_yellow": "Yellow Glass Pane" },
{ "double_plant_fern_top": "Large Fern (Top)" },
{ "double_plant_grass_top": "Double Tall Grass (Top)" },
{ "double_plant_paeonia_top": "Peony (Top)" },
{ "double_plant_rose_top": "Rose Bush (Top)" },
{ "double_plant_syringa_top": "Lilac (Top)" },
{ "flower_tulip_orange": "Orange Tulip" },
{ "double_plant_sunflower_top": "Sunflower (Top)" },
{ "double_plant_sunflower_front": "Sunflower (Front)" },
{ "log_acacia": "Acacia Log (Side)" },
{ "log_acacia_top": "Acacia Log (Top)" },
{ "planks_acacia": "Acacia Planks" },
{ "leaves_acacia": "Acacia Leaves" },
{ "leaves_acacia_fast": "Acacia Leaves (Opaque)" },
{ "prismarine_bricks": "Prismarine Bricks" },
{ "red_sand": "Red Sand" },
{ "red_sandstone_top": "Red Sandstone (Top)" },
{ "double_plant_fern_bottom": "Large Fern (Bottom)" },
{ "double_plant_grass_bottom": "Double Tall Grass (Bottom)" },
{ "double_plant_paeonia_bottom": "Peony (Bottom)" },
{ "double_plant_rose_bottom": "Rose Bush (Bottom)" },
{ "double_plant_syringa_bottom": "Lilac (Bottom)" },
{ "flower_tulip_pink": "Pink Tulip" },
{ "double_plant_sunflower_bottom": "Sunflower (Bottom)" },
{ "double_plant_sunflower_back": "Sunflower (Back)" },
{ "log_big_oak": "Dark Oak Log (Side)" },
{ "log_big_oak_top": "Dark Oak Log (Top)" },
{ "planks_big_oak": "Dark Oak Planks" },
{ "leaves_big_oak": "Dark Oak Leaves" },
{ "leaves_big_oak_fast": "Dark Oak Leaves (Opaque)" },
{ "prismarine_dark": "Dark Prismarine" },
{ "red_sandstone_bottom": "Red Sandstone (Bottom)" },
{ "red_sandstone_normal": "Red Sandstone (Side)" },
{ "flower_allium": "Allium" },
{ "flower_blue_orchid": "Blue Orchid" },
{ "flower_houstonia": "Azure Bluet" },
{ "flower_oxeye_daisy": "Oxeye Daisy" },
{ "flower_tulip_red": "Red Tulip" },
{ "flower_tulip_white": "White Tulip" },
{ "sapling_acacia": "Acacia Sapling" },
{ "sapling_roofed_oak": "Dark Oak Sapling" },
{ "coarse_dirt": "Coarse Dirt" },
{ "dirt_podzol_side": "Podzol (Side)" },
{ "dirt_podzol_top": "Podzol (Top)" },
{ "leaves_birch": "Birch Leaves" },
{ "leaves_birch_fast": "Birch Leaves (Opaque)" },
{ "prismarine_rough": "Prismarine" },
{ "red_sandstone_carved": "Chiseled Red Sandstone" },
{ "red_sandstone_smooth": "Smooth Red Standstone" },
{ "door_acacia_upper": "Acacia Door (Upper)" },
{ "door_birch_upper": "Birch Door (Upper)" },
{ "door_dark_oak_upper": "Dark Oak Door (Upper)" },
{ "door_jungle_upper": "Jungle Door (Upper)" },
{ "door_spruce_upper": "Spruce Door (Upper)" },
{ "chorus_flower": "Chorus Flower" },
{ "chorus_flower_dead": "Chorus Flower (Dead)" },
{ "chorus_plant": "Chorus Plant" },
{ "end_bricks": "End Bricks" },
{ "grass_path_side": "Grass Path (Side)" },
{ "grass_path_top": "Grass Path (Top)" },
{ "barrier": "Barrier" },
{ "ice_packed": "Packed Ice" },
{ "sea_lantern": "Sea Lantern" },
{ "daylight_detector_inverted_top": "Daylight Sensor (Inverted) (Top)" },
{ "iron_trapdoor": "Iron Trapdoor" },
{ "door_acacia_lower": "Acacia Door (Lower)" },
{ "door_birch_lower": "Birch Door (Lower)" },
{ "door_dark_oak_lower": "Dark Door (Lower)" },
{ "door_jungle_lower": "Jungle Door (Lower)" },
{ "door_spruce_lower": "Spruce Door (Lower)" },
{ "purpur_block": "Purpur Block" },
{ "purpur_pillar": "Purpur Pillar (Side)" },
{ "purpur_pillar_top": "Purpur Pillar (Top)" },
{ "end_rod": "End Rod" },
{ "magma": "Magma Block" },
{ "nether_wart_block": "Nether Wart Block" },
{ "red_nether_brick": "Red Nether Brick" },
{ "frosted_ice_0": "Frosted Ice (Stage 1)" },
{ "frosted_ice_1": "Frosted Ice (Stage 2)" },
{ "frosted_ice_2": "Frosted Ice (Stage 3)" },
{ "frosted_ice_3": "Frosted Ice (Stage 4)" },
{ "beetroots_stage_0": "Beetroots (Stage 1)" },
{ "beetroots_stage_1": "Beetroots (Stage 2)" },
{ "beetroots_stage_2": "Beetroots (Stage 3)" },
{ "beetroots_stage_3": "Beetroots (Stage 4)" },
{ "chain_command_block_back": "Chain Command Block (Back)" },
{ "chain_command_block_conditional": "Chain Command Block (Conditional) (Side)" },
{ "chain_command_block_front": "Chain Command Block (Front)" },
{ "chain_command_block_side": "Chain Command Block (Side)" },
{ "command_block_back": "Command Block (Back)" },
{ "command_block_conditional": "Command Block (Conditional) (Side)" },
{ "command_block_front": "Command Block (Front)" },
{ "command_block_side": "Command Block (Side)" },
{ "repeating_command_block_back": "Repeating Command Block (Back)" },
{ "repeating_command_block_conditional": "Repeating Command Block (Conditional) (Side)" },
{ "repeating_command_block_front": "Repeating Command Block (Front)" },
{ "repeating_command_block_side": "Repeating Command Block (Side)" },
{ "bone_block_side": "Bone Block (Side)" },
{ "bone_block_top": "Bone Block (Top)" },
{ "UNUSED_STEM": "" },
{ "UNUSED_ATTACHED_STEM": "" },
{ "observer_front": "Observer (Front)" },
{ "observer_side": "Observer (Side)" },
{ "observer_back": "Observer (Back)" },
{ "observer_back_lit": "Observer (On) (Back)" },
{ "observer_top": "Observer (Top)" },
{ "goldRing": "Gold Score Ring" },
{ "emeraldRing": "Emerald Score Ring" },
{ "structure_block": "Structure Block" },
{ "structure_block_corner": "Structure Block (Corner)" },
{ "structure_block_data": "Structure Block (Data)" },
{ "structure_block_load": "Structure Block (Load)" },
{ "structure_block_save": "Structure Block (Save)" },
{ "concrete_black": "Black Concrete" },
{ "concrete_blue": "Blue Concrete" },
{ "concrete_brown": "Brown Concrete" },
{ "concrete_cyan": "Cyan Concrete" },
{ "concrete_gray": "Gray Concrete" },
{ "concrete_green": "Green Concrete" },
{ "concrete_light_blue": "Light Blue Concrete" },
{ "concrete_lime": "Lime Concrete" },
{ "concrete_magenta": "Magenta Concrete" },
{ "concrete_orange": "Orange Concrete" },
{ "concrete_pink": "Pink Concrete" },
{ "concrete_purple": "Purple Concrete" },
{ "concrete_red": "Red Concrete" },
{ "concrete_silver": "Light Gray Concrete" },
{ "concrete_white": "White Concrete" },
{ "concrete_yellow": "Yellow Concrete" },
{ "concrete_powder_black": "Black Concrete Powder" },
{ "concrete_powder_blue": "Blue Concrete Powder" },
{ "concrete_powder_brown": "Brown Concrete Powder" },
{ "concrete_powder_cyan": "Cyan Concrete Powder" },
{ "concrete_powder_gray": "Gray Concrete Powder" },
{ "concrete_powder_green": "Green Concrete Powder" },
{ "concrete_powder_light_blue": "Light Blue Concrete Powder" },
{ "concrete_powder_lime": "Lime Concrete Powder" },
{ "concrete_powder_magenta": "Magenta Concrete Powder" },
{ "concrete_powder_orange": "Orange Concrete Powder" },
{ "concrete_powder_pink": "Pink Concrete Powder" },
{ "concrete_powder_purple": "Purple Concrete Powder" },
{ "concrete_powder_red": "Red Concrete Powder" },
{ "concrete_powder_silver": "Light Gray Concrete Powder" },
{ "concrete_powder_white": "White Concrete Powder" },
{ "concrete_powder_yellow": "Yellow Concrete Powder" },
{ "glazed_terracotta_black": "Black Glazed Terracotta" },
{ "glazed_terracotta_blue": "Blue Glazed Terracotta" },
{ "glazed_terracotta_brown": "Brown Glazed Terracotta" },
{ "glazed_terracotta_cyan": "Cyan Glazed Terracotta" },
{ "glazed_terracotta_gray": "Gray Glazed Terracotta" },
{ "glazed_terracotta_green": "Green Glazed Terracotta" },
{ "glazed_terracotta_light_blue": "Light Blue Glazed Terracotta" },
{ "glazed_terracotta_lime": "Lime Glazed Terracotta" },
{ "glazed_terracotta_magenta": "Magenta Glazed Terracotta" },
{ "glazed_terracotta_orange": "Orange Glazed Terracotta" },
{ "glazed_terracotta_pink": "Pink Glazed Terracotta" },
{ "glazed_terracotta_purple": "Purple Glazed Terracotta" },
{ "glazed_terracotta_red": "Red Glazed Terracotta" },
{ "glazed_terracotta_silver": "Light Gray Glazed Terracotta" },
{ "glazed_terracotta_white": "White Glazed Terracotta" },
{ "glazed_terracotta_yellow": "Yellow Glazed Terracotta" },
{ "shulker_top": "Shulker (Break Particles)" },
{ "UNUSED_NULL": "" },
{ "cauldron_water": "Cauldron Water" },
{ "seagrass_doubletall_top_a": "Tall Seagrass (Top)" },
{ "coral_blue": "Tube Coral" },
{ "coral_purple": "Bubble Coral" },
{ "coral_pink": "Brain Coral" },
{ "coral_red": "Fire Coral" },
{ "coral_yellow": "Horn Coral" },
{ "coral_plant_blue": "Tube Coral Plant" },
{ "coral_plant_purple": "Bubble Coral Plant" },
{ "coral_plant_pink": "Brain Coral Plant" },
{ "coral_plant_red": "Fire Coral Plant" },
{ "coral_plant_yellow": "Horn Coral Plant" },
{ "sea_pickle": "Sea Pickle" },
{ "blue_ice": "Blue Ice" },
{ "dried_kelp_top": "Dried Kelp Block (Top)" },
{ "dried_kelp_side": "Dried Kelp Block (Side)" },
{ "seagrass_carried": "Seagrass (Item)" },
{ "seagrass_doubletall_bottom_a": "Tall Seagrass (Bottom)" },
{ "coral_blue_dead": "Tube Coral" },
{ "coral_purple_dead": "Bubble Coral" },
{ "coral_pink_dead": "Brain Coral" },
{ "coral_red_dead": "Fire Coral" },
{ "coral_yellow_dead": "Horn Coral" },
{ "coral_fan_blue": "Tube Coral Fan" },
{ "coral_fan_purple": "Bubble Coral Fan" },
{ "coral_fan_pink": "Brain Coral Fan" },
{ "coral_fan_red": "Fire Coral Fan" },
{ "coral_fan_yellow": "Horn Coral Fan" },
{ "coral_layered_top_red": "Fire Coral (Overlay)" },
{ "coral_layered_top_yellow": "Horn Coral (Overlay)" },
{ "kelp_a": "Kelp (Bottom)" },
{ "UNUSED_KELP_PLANT0": "" },
{ "UNUSED_KELP_PLANT1": "" },
{ "UNUSED_KELP_PLANT2": "" },
{ "kelp_top_a": "Kelp (Top)" },
{ "UNUSED_KELP0": "" },
{ "UNUSED_KELP1": "" },
{ "UNUSED_KELP2": "" },
{ "seagrass": "Seagrass" },
{ "coral_fan_blue_dead": "Tube Coral Fan (Dead)" },
{ "coral_fan_purple_dead": "Bubble Coral Fan (Dead)" },
{ "coral_fan_pink_dead": "Brain Coral Fan (Dead)" },
{ "coral_fan_red_dead": "Red Coral Fan (Dead)" },
{ "coral_fan_yellow_dead": "Horn Coral Fan (Dead)" },
{ "UNUSED_UNKNOWN2": "" },
{ "spruce_trapdoor": "Spruce Trapdoor" },
{ "stripped_log_oak": "Stripped Oak Log (Side)" },
{ "stripped_log_oak_top": "Stripped Oak Log (Top)" },
{ "stripped_log_acacia": "Stripped Acacia Log (Side)" },
{ "stripped_log_acacia_top": "Stripped Acacia Log (Top)" },
{ "stripped_log_birch": "Stripped Birch Log (Side)" },
{ "stripped_log_birch_top": "Stripped Birch Log (Top)" },
{ "stripped_log_dark_oak": "Stripped Dark Oak Log (Side)" },
{ "stripped_log_dark_oak_top": "Stripped Dark Oak Log (Top)" },
{ "stripped_log_jungle": "Stripped Jungle Log (Side)" },
{ "stripped_log_jungle_top": "Stripped Birch Log (Top)" },
{ "stripped_log_spruce": "Stripped Spruce Log (Side)" },
{ "stripped_log_spruce_top": "Stripped Spruce Log (Top)" },
{ "acacia_trapdoor": "Acacia Trapdoor" },
{ "birch_trapdoor": "Birch Trapdoor" },
{ "dark_oak_trapdoor": "Dark Oak Trapdoor" },
{ "jungle_trapdoor": "Jungle Trapdoor" }
],
"Items": [
{ "helmetCloth": "Leather Helmet" },
{ "helmetChain": "Chain Helmet" },
{ "helmetIron": "Iron Helmet" },
{ "helmetDiamond": "Diamond Helmet" },
{ "helmetGold": "Golden Helmet" },
{ "flintAndSteel": "Flint and Steel" },
{ "flint": "Flint" },
{ "coal": "Coal" },
{ "string": "String" },
{ "seeds": "Seeds" },
{ "apple": "Apple" },
{ "appleGold": "Golden Apple" },
{ "egg": "Egg" },
{ "sugar": "Sugar" },
{ "snowball": "Snowball" },
{ "elytra": "Elytra" },
{ "chestplateCloth": "Leather Chestplate" },
{ "chestplateChain": "Chain Chestplate" },
{ "chestplateIron": "Iron Chestplate" },
{ "chestplateDiamond": "Diamond Chestplate" },
{ "chestplateGold": "Golden Chestplate" },
{ "bow": "Bow" },
{ "brick": "Brick" },
{ "ingotIron": "Iron Ingot" },
{ "feather": "Feather" },
{ "wheat": "Wheat" },
{ "painting": "Painting" },
{ "reeds": "Sugar Canes" },
{ "bone": "Bone" },
{ "cake": "Cake" },
{ "slimeball": "Slimeball" },
{ "broken_elytra": "Elytra (Broken)" },
{ "leggingsCloth": "Leather Leggings" },
{ "leggingsChain": "Chain Leggings" },
{ "leggingsIron": "Iron Leggings" },
{ "leggingsDiamond": "Diamond Leggings" },
{ "leggingsGold": "Golden Leggings" },
{ "arrow": "Arrow" },
{ "end_crystal": "End Crystal" },
{ "ingotGold": "Gold Ingot" },
{ "sulphur": "Gunpowder" },
{ "bread": "Bread" },
{ "sign": "Sign" },
{ "doorWood": "Oak Door" },
{ "doorIron": "Iron Door" },
{ "bed": "Bed" },
{ "fireball": "Fire Call" },
{ "chorus_fruit": "Chorus Fruit" },
{ "bootsCloth": "Leather Boots" },
{ "bootsChain": "Chain Boots" },
{ "bootsIron": "Iron Boots" },
{ "bootsDiamond": "Diamond Boots" },
{ "bootsGold": "Golden Boots" },
{ "stick": "Stick" },
{ "UNUSED_compass": "" },
{ "diamond": "Diamond" },
{ "redstone": "Redstone" },
{ "clay": "Clay" },
{ "paper": "Paper" },
{ "book": "Book" },
{ "map": "Map" },
{ "seeds_pumpkin": "Pumpkin Seeds" },
{ "seeds_melon": "Melon Seeds" },
{ "chorus_fruit_popped": "Chorus Fruit (Popped)" },
{ "swordWood": "Wooden Sword" },
{ "swordStone": "Stone Sword" },
{ "swordIron": "Iron Sword" },
{ "swordDiamond": "Diamond Sword" },
{ "swordGold": "Golden Sword" },
{ "fishingRod_uncast": "Fishing Rod" },
{ "UNUSED_clock": "" },
{ "bowl": "Bowl" },
{ "mushroomStew": "Mushroom Stew" },
{ "yellowDust": "Glowstone Dust" },
{ "bucket": "Bucket" },
{ "bucketWater": "Water Bucket" },
{ "bucketLava": "Lava Bucket" },
{ "milk": "Milk" },
{ "dyePowder_black": "Ink Sac" },
{ "dyePowder_gray": "Gray Dye" },
{ "shovelWood": "Wooden Shovel" },
{ "shovelStone": "Stone Shovel" },
{ "shovelIron": "Iron Shovel" },
{ "shovelDiamond": "Diamond Shovel" },
{ "shovelGold": "Golden Shovel" },
{ "fishingRod_cast": "Fishing Rod (Cast)" },
{ "repeater": "Redstone Repeater" },
{ "porkchopRaw": "Raw Porkchop" },
{ "porkchopCooked": "Cooked Porkchop" },
{ "fishRaw": "Raw Cod" },
{ "fishCooked": "Cooked Cod" },
{ "rottenFlesh": "Rotten Flesh" },
{ "cookie": "Cookie" },
{ "shears": "Shears" },
{ "dyePowder_red": "Rose Red" },
{ "dyePowder_pink": "Pink Dye" },
{ "pickaxeWood": "Wooden Pickaxe" },
{ "pickaxeStone": "Stone Pickaxe" },
{ "pickaxeIron": "Iron Pickaxe" },
{ "pickaxeDiamond": "Diamond Pickaxe" },
{ "pickaxeGold": "Golden Pickaxe" },
{ "bow_pull_0": "Bow (Pulling Stage 1)" },
{ "carrotOnAStick": "Carrot on a Stick" },
{ "leather": "Leather" },
{ "saddle": "Saddle" },
{ "beefRaw": "Raw Beef" },
{ "beefCooked": "Cooked Beef" },
{ "enderPearl": "Ender Pearl" },
{ "blazeRod": "Blaze Rod" },
{ "melon": "Melon" },
{ "dyePowder_green": "Cactus Green" },
{ "dyePowder_lime": "Lime Dye" },
{ "hatchetWood": "Wooden Axe" },
{ "hatchetStone": "Stone Axe" },
{ "hatchetIron": "Iron Axe" },
{ "hatchetDiamond": "Diamond Axe" },
{ "hatchetGold": "Golden Axe" },
{ "bow_pull_1": "Bow (Pulling Stage 2)" },
{ "potatoBaked": "Baked Potato" },
{ "potato": "Potato" },
{ "carrots": "Carrot" },
{ "chickenRaw": "Raw Chicken" },
{ "chickenCooked": "Cooked Chicken" },
{ "ghastTear": "Ghast Tear" },
{ "goldNugget": "Gold Nugget" },
{ "netherStalkSeeds": "Nether Wart" },
{ "dyePowder_brown": "Brown Dye" },
{ "dyePowder_yellow": "Yellow Dye" },
{ "hoeWood": "Wooden Hoe" },
{ "hoeStone": "Stone Hoe" },
{ "hoeIron": "Iron Hoe" },
{ "hoeDiamond": "Diamond Hoe" },
{ "hoeGold": "Golden Hoe" },
{ "bow_pull_2": "Bow (Pulling Stage 3)" },
{ "potatoPoisonous": "Poisonous Potato" },
{ "minecart": "Minecart" },
{ "boat": "Boat" },
{ "speckledMelon": "Speckled Melon" },
{ "fermentedSpiderEye": "Fermented Spider Eye" },
{ "spiderEye": "Spider Eye" },
{ "glassBottle": "Glass Bottle" },
{ "potion_contents": "Potion (Overlay)" },
{ "dyePowder_blue": "Lapis Lazuli" },
{ "dyePowder_light_blue": "Light Blue Dye" },
{ "helmetCloth_overlay": "Leather Helmet (Overlay)" },
{ "spectral_arrow": "Spectral Arrow" },
{ "iron_horse_armor": "Iron Horse Armor" },
{ "diamond_horse_armor": "Diamond Horse Armor" },
{ "gold_horse_armor": "Gold Horse Armor" },
{ "comparator": "Redstone Comparator" },
{ "carrotGolden": "Golden Carrot" },
{ "minecart_chest": "Minecart with Chest" },
{ "pumpkinPie": "Pumpkin Pie" },
{ "monsterPlacer": "Spawn Egg" },
{ "potion_splash": "Splash Potion" },
{ "eyeOfEnder": "Eye of Ender" },
{ "cauldron": "Cauldron" },
{ "blazePowder": "Blaze Powder" },
{ "dyePowder_purple": "Purple Dye" },
{ "dyePowder_magenta": "Magenta Dye" },
{ "chestplateCloth_overlay": "Leather Chestplate (Overlay)" },
{ "tipped_arrow_base": "Tipped Arrow" },
{ "dragon_breath": "Dragon's Breath" },
{ "name_tag": "Name Tag" },
{ "lead": "Lead" },
{ "netherbrick": "Nether Brick" },
{ "fish_clownfish_raw": "Clownfish" },
{ "minecart_furnace": "Minecart with Furnace" },
{ "charcoal": "Charcoal" },
{ "monsterPlacer_overlay": "Spawn Egg (Overlay)" },
{ "bed_overlay": "Bed (Overlay)" },
{ "expBottle": "Experience Bottle" },
{ "brewingStand": "Brewing Stand" },
{ "magmaCream": "Magma Cream" },
{ "dyePowder_cyan": "Cyan Dye" },
{ "dyePowder_orange": "Orange Dye" },
{ "leggingsCloth_overlay": "Leather Leggings (Overlay)" },
{ "tipped_arrow_head": "Tipped Arrow (Overlay)" },
{ "potion_bottle_lingering": "Lingering Potion" },
{ "barrier": "Barrier" },
{ "mutton_raw": "Raw Mutton" },
{ "rabbit_raw": "Raw Rabbit" },
{ "fish_pufferfish_raw": "Pufferfish" },
{ "minecart_hopper": "Minecart with Hopper" },
{ "hopper": "Hopper" },
{ "nether_star": "Nether Star" },
{ "emerald": "Emerald" },
{ "writingBook": "Book and Quill" },
{ "written_book": "Written Book" },
{ "flower_pot": "Flower Pot" },
{ "dyePowder_silver": "Light Gray Dye" },
{ "dyePowder_white": "White Dye" },
{ "bootsCloth_overlay": "Leather Boots (Overlay)" },
{ "beetroot": "Beetroot" },
{ "beetroot_seeds": "Beetroot Seeds" },
{ "beetroot_soup": "Beetroot Soup" },
{ "mutton_cooked": "Cooked Mutton" },
{ "rabbit_cooked": "Cooked Rabbit" },
{ "fish_salmon_raw": "Raw Salmon" },
{ "minecart_tnt": "Minecart with TNT" },
{ "wooden_armorstand": "Armor Stand" },
{ "fireworks": "Firework Rocket" },
{ "fireworks_charge": "Firework Star" },
{ "fireworks_charge_overlay": "Firework Star (Overlay)" },
{ "netherquartz": "Nether Quartz" },
{ "map_empty": "Empty Map" },
{ "frame": "Item Frame" },
{ "enchantedBook": "Enchanted Book" },
{ "door_acacia": "Acacia Door" },
{ "door_birch": "Birch Door" },
{ "door_jungle": "Jungle Door" },
{ "door_dark_oak": "Dark Oak Door" },
{ "door_spruce": "Spruce Door" },
{ "rabbit_stew": "Rabbit Stew" },
{ "fish_salmon_cooked": "Cooked Salmon" },
{ "minecart_command_block": "Minecart with Command Block" },
{ "acacia_boat": "Acacia Boat" },
{ "birch_boat": "Birch Boat" },
{ "dark_oak_boat": "Dark Oak Boat" },
{ "jungle_boat": "Jungle Boat" },
{ "spruce_boat": "Spruce Boat" },
{ "prismarine_shard": "Prismarine Shard" },
{ "prismarine_crystals": "Prismarine Crystals" },
{ "leather_horse_armor_base": "Leather Horse Armor" },
{ "structure_void": "Structure Void" },
{ "map_filled_markings": "Filled Map (Overlay)" },
{ "totem": "Totem of Undying" },
{ "shulker_shell": "Shulker Shell" },
{ "iron_nugget": "Iron Nugget" },
{ "rabbit_foot": "Rabbit Foot" },
{ "rabbit_hide": "Rabbit Hide" },
{ "UNUSED_COMPASS_P0": "" },
{ "UNUSED_COMPASS_P1": "" },
{ "UNUSED_COMPASS_P2": "" },
{ "UNUSED_COMPASS_P3": "" },
{ "UNUSED_CLOCK_P0": "" },
{ "UNUSED_CLOCK_P1": "" },
{ "UNUSED_CLOCK_P2": "" },
{ "UNUSED_CLOCK_P3": "" },
{ "dragonFireball": "Dragon Fireball" },
{ "record_13": "Music Disc (C418 - 13)" },
{ "record_cat": "Music Disc (C418 - cat)" },
{ "record_blocks": "Music Disc (C418 - blocks)" },
{ "record_chirp": "Music Disc (C418 - chirp)" },
{ "record_far": "Music Disc (C418 - far)" },
{ "record_mall": "Music Disc (C418 - mall)" },
{ "record_mellohi": "Music Disc (C418 - mellohi)" },
{ "record_stal": "Music Disc (C418 - stal)" },
{ "record_strad": "Music Disc (C418 - strad)" },
{ "record_ward": "Music Disc (C418 - ward)" },
{ "record_11": "Music Disc (C418 - 11)" },
{ "record_where are we now": "Music Disc (C418 - wait)" },
{ "bucketFish": "Bucket of Cod" },
{ "bucketSalmon": "Bucket of Salmon" },
{ "bucketPuffer": "Bucket of Pufferfish" },
{ "bucketTropical": "Bucket of Tropical Fish" },
{ "leather_horse_armor_detail": "Leather Horse Armor (Overlay)" },
{ "UNUSED1": "" },
{ "UNUSED2": "" },
{ "UNUSED3": "" },
{ "UNUSED4": "" },
{ "UNUSED5": "" },
{ "UNUSED6": "" },
{ "kelp": "Kelp" },
{ "dried_kelp": "Dried Kelp" },
{ "sea_pickle": "Sea Pickle" },
{ "nautilus": "Nautilus Shell" },
{ "nautilus_core": "Heart of the Sea" },
{ "turtle_helmet": "Turtle Helmet" },
{ "turtle_shell_piece": "Scute" },
{ "trident": "Trident" },
{ "phantom_membrane": "Phantom Membrane" }
]
}