From c4e797d4032ad53c461fd1503846481f29b65a90 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Mon, 11 Mar 2024 16:54:52 -0400 Subject: [PATCH 01/29] Fix for tiles with only one variant not displaying correctly --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index fe569733..63829c17 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -164,9 +164,10 @@ namespace PckStudio.Forms.Editor selectTilePictureBox.Start(animation); } - if (variantComboBox.Enabled = variantLabel.Visible = variantComboBox.Visible = - dataTile.Tile.HasColourEntry) + if (dataTile.Tile.HasColourEntry) { + variantComboBox.Enabled = variantLabel.Visible = variantComboBox.Visible = dataTile.Tile.ColourEntry.Variants.Length > 1; + if (dataTile.Tile.ColourEntry.IsWaterColour && _colourTable.WaterColors.Count > 0) { foreach (var col in _colourTable.WaterColors) @@ -178,10 +179,7 @@ namespace PckStudio.Forms.Editor dataTile.Tile.ColourEntry.DefaultName = _colourTable.WaterColors[0].Name; } - if (dataTile.Tile.ColourEntry.Variants.Length > 1) - { - variantComboBox.Items.AddRange(dataTile.Tile.ColourEntry.Variants); - } + variantComboBox.Items.AddRange(dataTile.Tile.ColourEntry.Variants); variantComboBox.SelectedItem = dataTile.Tile.ColourEntry.DefaultName; } From f2c990be11ce72538822e925c090094548b32fd4 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Tue, 12 Mar 2024 02:01:34 -0400 Subject: [PATCH 02/29] Adjusted variant column size --- .../Editor/TextureAtlasEditor.Designer.cs | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index 9487197b..98e76ae4 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -58,7 +58,7 @@ this.variantLabel.AutoSize = true; this.variantLabel.Location = new System.Drawing.Point(3, 254); this.variantLabel.Name = "variantLabel"; - this.variantLabel.Size = new System.Drawing.Size(82, 28); + this.variantLabel.Size = new System.Drawing.Size(56, 28); this.variantLabel.TabIndex = 18; this.variantLabel.Text = "Variant:"; this.variantLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; @@ -90,14 +90,14 @@ // saveToolStripMenuItem // this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; - this.saveToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.saveToolStripMenuItem.Size = new System.Drawing.Size(131, 22); this.saveToolStripMenuItem.Text = "Save"; this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); // // extractTileToolStripMenuItem // this.extractTileToolStripMenuItem.Name = "extractTileToolStripMenuItem"; - this.extractTileToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.extractTileToolStripMenuItem.Size = new System.Drawing.Size(131, 22); this.extractTileToolStripMenuItem.Text = "Extract Tile"; this.extractTileToolStripMenuItem.Click += new System.EventHandler(this.extractTileToolStripMenuItem_Click); // @@ -117,7 +117,7 @@ this.applyColorMaskToolStripMenuItem.CheckOnClick = true; this.applyColorMaskToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.applyColorMaskToolStripMenuItem.Name = "applyColorMaskToolStripMenuItem"; - this.applyColorMaskToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.applyColorMaskToolStripMenuItem.Size = new System.Drawing.Size(168, 22); this.applyColorMaskToolStripMenuItem.Text = "Apply Color Mask"; this.applyColorMaskToolStripMenuItem.CheckedChanged += new System.EventHandler(this.applyColorMaskToolStripMenuItem_CheckedChanged); // @@ -127,7 +127,7 @@ this.playAnimationsToolStripMenuItem.CheckOnClick = true; this.playAnimationsToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.playAnimationsToolStripMenuItem.Name = "playAnimationsToolStripMenuItem"; - this.playAnimationsToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.playAnimationsToolStripMenuItem.Size = new System.Drawing.Size(168, 22); this.playAnimationsToolStripMenuItem.Text = "Play Animations"; this.playAnimationsToolStripMenuItem.CheckedChanged += new System.EventHandler(this.playAnimationsToolStripMenuItem_CheckedChanged); // @@ -136,9 +136,9 @@ this.tableLayoutPanel1.AutoSize = true; this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 15F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 60F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10.52632F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 26.31579F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 63.15789F)); this.tableLayoutPanel1.Controls.Add(this.originalPictureBox, 2, 0); this.tableLayoutPanel1.Controls.Add(this.selectTilePictureBox, 0, 0); this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 5); @@ -164,10 +164,10 @@ this.originalPictureBox.BackColor = System.Drawing.Color.Transparent; this.originalPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; this.originalPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; - this.originalPictureBox.Location = new System.Drawing.Point(238, 3); + this.originalPictureBox.Location = new System.Drawing.Point(220, 3); this.originalPictureBox.Name = "originalPictureBox"; this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 6); - this.originalPictureBox.Size = new System.Drawing.Size(349, 559); + this.originalPictureBox.Size = new System.Drawing.Size(367, 559); this.originalPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.originalPictureBox.TabIndex = 4; this.originalPictureBox.TabStop = false; @@ -186,7 +186,7 @@ this.selectTilePictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.selectTilePictureBox.Location = new System.Drawing.Point(3, 3); this.selectTilePictureBox.Name = "selectTilePictureBox"; - this.selectTilePictureBox.Size = new System.Drawing.Size(229, 220); + this.selectTilePictureBox.Size = new System.Drawing.Size(211, 220); this.selectTilePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.selectTilePictureBox.TabIndex = 0; this.selectTilePictureBox.TabStop = false; @@ -200,7 +200,7 @@ this.tableLayoutPanel1.SetColumnSpan(this.replaceButton, 2); this.replaceButton.Location = new System.Drawing.Point(3, 539); this.replaceButton.Name = "replaceButton"; - this.replaceButton.Size = new System.Drawing.Size(229, 23); + this.replaceButton.Size = new System.Drawing.Size(211, 23); this.replaceButton.TabIndex = 14; this.replaceButton.Text = "Replace"; this.replaceButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -215,7 +215,7 @@ this.tableLayoutPanel1.SetColumnSpan(this.animationButton, 2); this.animationButton.Location = new System.Drawing.Point(3, 511); this.animationButton.Name = "animationButton"; - this.animationButton.Size = new System.Drawing.Size(229, 22); + this.animationButton.Size = new System.Drawing.Size(211, 22); this.animationButton.TabIndex = 16; this.animationButton.Text = "Animation"; this.animationButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -230,7 +230,7 @@ this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2); this.tileNameLabel.Location = new System.Drawing.Point(3, 235); this.tileNameLabel.Name = "tileNameLabel"; - this.tileNameLabel.Size = new System.Drawing.Size(229, 19); + this.tileNameLabel.Size = new System.Drawing.Size(211, 19); this.tileNameLabel.TabIndex = 19; this.tileNameLabel.Text = "TileName"; this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -242,9 +242,9 @@ this.variantComboBox.Enabled = false; this.variantComboBox.FormattingEnabled = true; this.variantComboBox.ItemHeight = 23; - this.variantComboBox.Location = new System.Drawing.Point(91, 257); + this.variantComboBox.Location = new System.Drawing.Point(65, 257); this.variantComboBox.Name = "variantComboBox"; - this.variantComboBox.Size = new System.Drawing.Size(141, 29); + this.variantComboBox.Size = new System.Drawing.Size(149, 29); this.variantComboBox.TabIndex = 17; this.variantComboBox.Theme = MetroFramework.MetroThemeStyle.Dark; this.variantComboBox.UseSelectable = true; From 8213fe391f7bcd7cedb010aa2ec0084f1f39a592 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 05:21:09 -0400 Subject: [PATCH 03/29] Added Custom Color support for specific tiles -Custom Color Tiles are Leather Armor, Potion (Overlay) / Potion Contents, Leather Horse Armor, and Cauldron Water --- .../Editor/TextureAtlasEditor.Designer.cs | 129 ++++++++++++------ PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 51 ++++++- PCK-Studio/Internal/Json/ColorEntry.cs | 3 + PCK-Studio/Resources/tileData.json | 40 +----- 4 files changed, 148 insertions(+), 75 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index 98e76ae4..ca8a591d 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -37,13 +37,16 @@ this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.applyColorMaskToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.playAnimationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.sToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.originalPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); this.selectTilePictureBox = new PckStudio.ToolboxItems.AnimationPictureBox(); this.replaceButton = new MetroFramework.Controls.MetroButton(); - this.animationButton = new MetroFramework.Controls.MetroButton(); this.tileNameLabel = new MetroFramework.Controls.MetroLabel(); this.variantComboBox = new MetroFramework.Controls.MetroComboBox(); + this.setColorButton = new MetroFramework.Controls.MetroButton(); + this.animationButton = new MetroFramework.Controls.MetroButton(); + this.clearColorButton = new MetroFramework.Controls.MetroButton(); this.menuStrip1.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.originalPictureBox)).BeginInit(); @@ -56,9 +59,9 @@ | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.variantLabel.AutoSize = true; - this.variantLabel.Location = new System.Drawing.Point(3, 254); + this.variantLabel.Location = new System.Drawing.Point(3, 232); this.variantLabel.Name = "variantLabel"; - this.variantLabel.Size = new System.Drawing.Size(56, 28); + this.variantLabel.Size = new System.Drawing.Size(55, 25); this.variantLabel.TabIndex = 18; this.variantLabel.Text = "Variant:"; this.variantLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; @@ -69,7 +72,8 @@ this.menuStrip1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20))))); this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.fileToolStripMenuItem, - this.viewToolStripMenuItem}); + this.viewToolStripMenuItem, + this.sToolStripMenuItem}); this.menuStrip1.Location = new System.Drawing.Point(20, 60); this.menuStrip1.Name = "menuStrip1"; this.menuStrip1.Size = new System.Drawing.Size(590, 24); @@ -131,31 +135,45 @@ this.playAnimationsToolStripMenuItem.Text = "Play Animations"; this.playAnimationsToolStripMenuItem.CheckedChanged += new System.EventHandler(this.playAnimationsToolStripMenuItem_CheckedChanged); // + // sToolStripMenuItem + // + this.sToolStripMenuItem.Name = "sToolStripMenuItem"; + this.sToolStripMenuItem.Size = new System.Drawing.Size(24, 20); + this.sToolStripMenuItem.Text = "s"; + // // tableLayoutPanel1 // this.tableLayoutPanel1.AutoSize = true; this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10.52632F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 26.31579F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 63.15789F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10.43842F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 26.09603F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 63.46555F)); this.tableLayoutPanel1.Controls.Add(this.originalPictureBox, 2, 0); this.tableLayoutPanel1.Controls.Add(this.selectTilePictureBox, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 5); - this.tableLayoutPanel1.Controls.Add(this.animationButton, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 6); this.tableLayoutPanel1.Controls.Add(this.tileNameLabel, 0, 1); this.tableLayoutPanel1.Controls.Add(this.variantComboBox, 1, 2); this.tableLayoutPanel1.Controls.Add(this.variantLabel, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.setColorButton, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.animationButton, 1, 6); + this.tableLayoutPanel1.Controls.Add(this.clearColorButton, 1, 4); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(20, 84); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 6; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5F)); + this.tableLayoutPanel1.RowCount = 7; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.09524F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.09524F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel1.Size = new System.Drawing.Size(590, 565); this.tableLayoutPanel1.TabIndex = 17; // @@ -164,10 +182,10 @@ this.originalPictureBox.BackColor = System.Drawing.Color.Transparent; this.originalPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; this.originalPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; - this.originalPictureBox.Location = new System.Drawing.Point(220, 3); + this.originalPictureBox.Location = new System.Drawing.Point(217, 3); this.originalPictureBox.Name = "originalPictureBox"; - this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 6); - this.originalPictureBox.Size = new System.Drawing.Size(367, 559); + this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 7); + this.originalPictureBox.Size = new System.Drawing.Size(370, 533); this.originalPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.originalPictureBox.TabIndex = 4; this.originalPictureBox.TabStop = false; @@ -186,7 +204,7 @@ this.selectTilePictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.selectTilePictureBox.Location = new System.Drawing.Point(3, 3); this.selectTilePictureBox.Name = "selectTilePictureBox"; - this.selectTilePictureBox.Size = new System.Drawing.Size(211, 220); + this.selectTilePictureBox.Size = new System.Drawing.Size(208, 201); this.selectTilePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.selectTilePictureBox.TabIndex = 0; this.selectTilePictureBox.TabStop = false; @@ -198,39 +216,24 @@ | System.Windows.Forms.AnchorStyles.Right))); this.replaceButton.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.replaceButton, 2); - this.replaceButton.Location = new System.Drawing.Point(3, 539); + this.replaceButton.Location = new System.Drawing.Point(3, 517); this.replaceButton.Name = "replaceButton"; - this.replaceButton.Size = new System.Drawing.Size(211, 23); + this.replaceButton.Size = new System.Drawing.Size(208, 19); this.replaceButton.TabIndex = 14; this.replaceButton.Text = "Replace"; this.replaceButton.Theme = MetroFramework.MetroThemeStyle.Dark; this.replaceButton.UseSelectable = true; this.replaceButton.Click += new System.EventHandler(this.replaceButton_Click); // - // animationButton - // - this.animationButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.animationButton.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.animationButton, 2); - this.animationButton.Location = new System.Drawing.Point(3, 511); - this.animationButton.Name = "animationButton"; - this.animationButton.Size = new System.Drawing.Size(211, 22); - this.animationButton.TabIndex = 16; - this.animationButton.Text = "Animation"; - this.animationButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.animationButton.UseSelectable = true; - this.animationButton.Click += new System.EventHandler(this.animationButton_Click); - // // tileNameLabel // this.tileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.tileNameLabel.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2); - this.tileNameLabel.Location = new System.Drawing.Point(3, 235); + this.tileNameLabel.Location = new System.Drawing.Point(3, 213); this.tileNameLabel.Name = "tileNameLabel"; - this.tileNameLabel.Size = new System.Drawing.Size(211, 19); + this.tileNameLabel.Size = new System.Drawing.Size(208, 19); this.tileNameLabel.TabIndex = 19; this.tileNameLabel.Text = "TileName"; this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -242,14 +245,55 @@ this.variantComboBox.Enabled = false; this.variantComboBox.FormattingEnabled = true; this.variantComboBox.ItemHeight = 23; - this.variantComboBox.Location = new System.Drawing.Point(65, 257); + this.variantComboBox.Location = new System.Drawing.Point(64, 235); this.variantComboBox.Name = "variantComboBox"; - this.variantComboBox.Size = new System.Drawing.Size(149, 29); + this.variantComboBox.Size = new System.Drawing.Size(147, 29); this.variantComboBox.TabIndex = 17; this.variantComboBox.Theme = MetroFramework.MetroThemeStyle.Dark; this.variantComboBox.UseSelectable = true; this.variantComboBox.SelectedIndexChanged += new System.EventHandler(this.variantComboBox_SelectedIndexChanged); // + // setColorButton + // + this.setColorButton.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.tableLayoutPanel1.SetColumnSpan(this.setColorButton, 2); + this.setColorButton.Location = new System.Drawing.Point(3, 467); + this.setColorButton.Name = "setColorButton"; + this.setColorButton.Size = new System.Drawing.Size(208, 19); + this.setColorButton.TabIndex = 25; + this.setColorButton.Text = "Set Custom Colour"; + this.setColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.setColorButton.UseSelectable = true; + this.setColorButton.Click += new System.EventHandler(this.setColorButton_Click); + // + // animationButton + // + this.animationButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.animationButton.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.animationButton, 2); + this.animationButton.Location = new System.Drawing.Point(3, 542); + this.animationButton.Name = "animationButton"; + this.animationButton.Size = new System.Drawing.Size(208, 20); + this.animationButton.TabIndex = 16; + this.animationButton.Text = "Animation"; + this.animationButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.animationButton.UseSelectable = true; + this.animationButton.Click += new System.EventHandler(this.animationButton_Click); + // + // clearColorButton + // + this.clearColorButton.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.tableLayoutPanel1.SetColumnSpan(this.clearColorButton, 2); + this.clearColorButton.Location = new System.Drawing.Point(3, 492); + this.clearColorButton.Name = "clearColorButton"; + this.clearColorButton.Size = new System.Drawing.Size(208, 19); + this.clearColorButton.TabIndex = 24; + this.clearColorButton.Text = "Clear Custom Colour"; + this.clearColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.clearColorButton.UseSelectable = true; + this.clearColorButton.Click += new System.EventHandler(this.clearColorButton_Click); + // // TextureAtlasEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -294,5 +338,8 @@ private System.Windows.Forms.ToolStripMenuItem playAnimationsToolStripMenuItem; private MetroFramework.Controls.MetroLabel tileNameLabel; private MetroFramework.Controls.MetroLabel variantLabel; + private MetroFramework.Controls.MetroButton clearColorButton; + private MetroFramework.Controls.MetroButton setColorButton; + private System.Windows.Forms.ToolStripMenuItem sToolStripMenuItem; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 63829c17..09403f6f 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -164,8 +164,11 @@ namespace PckStudio.Forms.Editor selectTilePictureBox.Start(animation); } - if (dataTile.Tile.HasColourEntry) + if (setColorButton.Enabled = clearColorButton.Enabled = dataTile.Tile.HasColourEntry) { + setColorButton.Enabled = clearColorButton.Enabled = dataTile.Tile.ColourEntry.HasCustomColour; + clearColorButton.Enabled = false; + variantComboBox.Enabled = variantLabel.Visible = variantComboBox.Visible = dataTile.Tile.ColourEntry.Variants.Length > 1; if (dataTile.Tile.ColourEntry.IsWaterColour && _colourTable.WaterColors.Count > 0) @@ -472,5 +475,51 @@ namespace PckStudio.Forms.Editor if (selectTilePictureBox.IsPlaying) selectTilePictureBox.Stop(); } + + private void setColorButton_Click(object sender, EventArgs e) + { + ColorDialog colorPick = new ColorDialog(); + colorPick.AllowFullOpen = true; + colorPick.AnyColor = true; + colorPick.SolidColorOnly = true; + + // custom colors are read as BGR for some reason, so hex values are "backwards" + // values below are the default Minecraft dyed leather armor values for convenience + + colorPick.CustomColors = new int[] { + 0x262EB0, // Red + 0x1D80F9, // Orange + 0x3DD8FE, // Yellow + 0x1FC780, // Lime + 0x167C5E, // Green + 0xDAB33A, // Light Blue + 0x9C9C16, // Cyan + 0xAA443C, // Blue + 0xB83289, // Purple + 0xBD4EC7, // Magenta + 0xAA8BF3, // Pink + 0xFEFFF9, // White + 0x979D9D, // Light Gray + 0x524F47, // Gray + 0x211D1D, // Black + 0x325483 // Brown + }; + + if (colorPick.ShowDialog() != DialogResult.OK) return; + + selectTilePictureBox.BlendColor = colorPick.Color; + selectTilePictureBox.Image = dataTile.Texture; + variantComboBox.Enabled = false; + clearColorButton.Enabled = true; + } + + private void clearColorButton_Click(object sender, EventArgs e) + { + variantComboBox.Enabled = true; + + variantComboBox_SelectedIndexChanged(sender, e); + + clearColorButton.Enabled = false; + } } } \ No newline at end of file diff --git a/PCK-Studio/Internal/Json/ColorEntry.cs b/PCK-Studio/Internal/Json/ColorEntry.cs index 8523a311..39390d81 100644 --- a/PCK-Studio/Internal/Json/ColorEntry.cs +++ b/PCK-Studio/Internal/Json/ColorEntry.cs @@ -15,6 +15,9 @@ namespace PckStudio.Internal.Json [JsonProperty("isWaterColour", DefaultValueHandling = DefaultValueHandling.Populate)] public bool IsWaterColour { get; set; } + [JsonProperty("hasCustomColour", DefaultValueHandling = DefaultValueHandling.Populate)] + public bool HasCustomColour { get; set; } + [JsonProperty("variants", DefaultValueHandling = DefaultValueHandling.Populate)] public string[] Variants { get; set; } } diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index d617d7a5..2cc73295 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -7,7 +7,6 @@ "displayName": "Grass Block (Top)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -170,7 +169,6 @@ "displayName": "Grass Side (Overlay)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -185,7 +183,6 @@ "displayName": "Tall Grass", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -248,7 +245,6 @@ "displayName": "Oak Leaves", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -264,7 +260,6 @@ "displayName": "Oak Leaves (Opaque)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -288,7 +283,6 @@ "displayName": "Fern", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -524,7 +518,6 @@ "displayName": "Stem", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Tile_StemMin", "variants": [ "Tile_StemMin", @@ -597,7 +590,6 @@ "displayName": "Stem (Attached)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Tile_StemMin", "variants": [ "Tile_StemMin", @@ -626,7 +618,6 @@ "displayName": "Spruce Leaves", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Evergreen", "variants": [ "Foliage_Default", @@ -642,7 +633,6 @@ "displayName": "Spruce Leaves (Opaque)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Evergreen", "variants": [ "Foliage_Default", @@ -694,7 +684,6 @@ "displayName": "Vines", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -790,7 +779,6 @@ "displayName": "Redstone Dust (Cross)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Tile_RedstoneDust", "variants": [ "Tile_RedstoneDust", @@ -805,7 +793,6 @@ "displayName": "Redstone Dust (Line)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Tile_RedstoneDust", "variants": [ "Tile_RedstoneDust", @@ -940,7 +927,6 @@ "displayName": "Jungle Leaves", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -956,7 +942,6 @@ "displayName": "Jungle Leaves (Opaque)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -1554,7 +1539,6 @@ "displayName": "Large Fern (Top)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -1569,7 +1553,6 @@ "displayName": "Double Tall Grass (Top)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -1620,7 +1603,6 @@ "displayName": "Acacia Leaves", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -1636,7 +1618,6 @@ "displayName": "Acacia Leaves (Opaque)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -1664,7 +1645,6 @@ "displayName": "Large Fern (Bottom)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -1679,7 +1659,6 @@ "displayName": "Double Tall Grass (Bottom)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -1730,7 +1709,6 @@ "displayName": "Dark Oak Leaves", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -1746,7 +1724,6 @@ "displayName": "Dark Oak Leaves (Opaque)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -1818,7 +1795,6 @@ "displayName": "Birch Leaves", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Birch", "variants": [ "Foliage_Default", @@ -1834,7 +1810,6 @@ "displayName": "Birch Leaves (Opaque)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Birch", "variants": [ "Foliage_Default", @@ -2318,7 +2293,7 @@ "displayName": "Cauldron Water", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, + "hasCustomColour": true, "defaultName": "Cauldron_Water", "variants": [ "Cauldron_Water", @@ -2924,7 +2899,7 @@ "displayName": "Leather Cap", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, + "hasCustomColour": true, "defaultName": "Armour_Default_Leather_Colour", "variants": [ "Armour_Default_Leather_Colour" ] } @@ -2994,7 +2969,7 @@ "displayName": "Leather Tunic", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, + "hasCustomColour": true, "defaultName": "Armour_Default_Leather_Colour", "variants": [ "Armour_Default_Leather_Colour" ] } @@ -3064,7 +3039,7 @@ "displayName": "Leather Pants", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, + "hasCustomColour": true, "defaultName": "Armour_Default_Leather_Colour", "variants": [ "Armour_Default_Leather_Colour" ] } @@ -3134,7 +3109,7 @@ "displayName": "Leather Boots", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, + "hasCustomColour": true, "defaultName": "Armour_Default_Leather_Colour", "variants": [ "Armour_Default_Leather_Colour" ] } @@ -3512,8 +3487,8 @@ "displayName": "Potion (Overlay)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Potion_BaseColour", + "hasCustomColour": true, "variants": [ "Potion_BaseColour", "Effect_MovementSpeed", @@ -3664,7 +3639,6 @@ "displayName": "Bed (Overlay)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Bed_White", "variants": [ "Bed_Black", @@ -3899,7 +3873,7 @@ "displayName": "Leather Horse Armor", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, + "hasCustomColour": true, "defaultName": "Armour_Default_Leather_Colour", "variants": [ "Armour_Default_Leather_Colour" ] } From 513e73fa1a6ca4a45794be644280659f20ec7de2 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 05:34:44 -0400 Subject: [PATCH 04/29] Update tileData.json -Filled empty clock and compass slots for texture atlas editor --- PCK-Studio/Resources/tileData.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 2cc73295..39076f79 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -3908,34 +3908,34 @@ }, { "internalName": "compass", - "displayName": "Compass" - }, - { - "internalName": "", "displayName": "" }, { - "internalName": "", + "internalName": "compass", "displayName": "" }, { - "internalName": "", + "internalName": "compass", + "displayName": "" + }, + { + "internalName": "compass", "displayName": "" }, { "internalName": "clock", - "displayName": "Clock" - }, - { - "internalName": "", "displayName": "" }, { - "internalName": "", + "internalName": "clock", "displayName": "" }, { - "internalName": "", + "internalName": "clock", + "displayName": "" + }, + { + "internalName": "clock", "displayName": "" }, { From f6e72b0e6ede61cb86f2f7c7416a6d954f73c796 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 07:01:31 -0400 Subject: [PATCH 05/29] Added atlas editor support for moon phases --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 26 +++++++----- PCK-Studio/Internal/Json/Tiles.cs | 21 ++++++++++ PCK-Studio/MainForm.cs | 14 +++++-- PCK-Studio/PckStudio.csproj | 1 + PCK-Studio/Properties/Resources.Designer.cs | 38 +++++++++++------- PCK-Studio/Properties/Resources.resx | 3 ++ PCK-Studio/Resources/moon_phases.png | Bin 0 -> 1569 bytes PCK-Studio/Resources/tileData.json | 34 ++++++++++++++++ 8 files changed, 108 insertions(+), 29 deletions(-) create mode 100644 PCK-Studio/Resources/moon_phases.png diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 09403f6f..12ed5b6e 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -94,6 +94,7 @@ namespace PckStudio.Forms.Editor { "terrain" => (Tiles.BlockTileInfos, "blocks"), "items" => (Tiles.ItemTileInfos, "items"), + "moon_phases" => (Tiles.MoonPhasesTileInfos, "moon_phases"), _ => (null, null), }; originalPictureBox.Image = atlas; @@ -151,17 +152,20 @@ namespace PckStudio.Forms.Editor selectTilePictureBox.BlendColor = GetBlendColor(); selectTilePictureBox.UseBlendColor = applyColorMaskToolStripMenuItem.Checked; - bool hasAnimation = - _pckFile.TryGetValue($"res/textures/{_atlasType}/{dataTile.Tile.InternalName}.png", PckFileType.TextureFile, out var animationFile); - animationButton.Text = hasAnimation ? "Edit Animation" : "Create Animation"; - replaceButton.Enabled = !hasAnimation; - - if (playAnimationsToolStripMenuItem.Checked && - hasAnimation && - animationFile.Size > 0) + if (animationButton.Enabled = _atlasType == "blocks" || _atlasType == "items") { - var animation = AnimationHelper.GetAnimationFromFile(animationFile); - selectTilePictureBox.Start(animation); + bool hasAnimation = + _pckFile.TryGetValue($"res/textures/{_atlasType}/{dataTile.Tile.InternalName}.png", PckFileType.TextureFile, out var animationFile); + animationButton.Text = hasAnimation ? "Edit Animation" : "Create Animation"; + replaceButton.Enabled = !hasAnimation; + + if (playAnimationsToolStripMenuItem.Checked && + hasAnimation && + animationFile.Size > 0) + { + var animation = AnimationHelper.GetAnimationFromFile(animationFile); + selectTilePictureBox.Start(animation); + } } if (setColorButton.Enabled = clearColorButton.Enabled = dataTile.Tile.HasColourEntry) @@ -504,7 +508,7 @@ namespace PckStudio.Forms.Editor 0x211D1D, // Black 0x325483 // Brown }; - + if (colorPick.ShowDialog() != DialogResult.OK) return; selectTilePictureBox.BlendColor = colorPick.Color; diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index b6e7942c..924e51bc 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -17,6 +17,8 @@ namespace PckStudio.Internal.Json public List Blocks { get; set; } [JsonProperty("items")] public List Items { get; set; } + [JsonProperty("moon_phases")] + public List MoonPhases { get; set; } } internal static class Tiles @@ -27,6 +29,7 @@ namespace PckStudio.Internal.Json internal static List ItemTileInfos => JsonTileData.Items; internal static List BlockTileInfos => JsonTileData.Blocks; + internal static List MoonPhasesTileInfos => JsonTileData.MoonPhases; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_sheet.SplitHorizontal(16).ToArray(); @@ -34,6 +37,9 @@ namespace PckStudio.Internal.Json private static Image[] _blockImages; public static Image[] BlockImages => _blockImages ??= Resources.terrain_sheet.SplitHorizontal(16).ToArray(); + private static Image[] _moonPhasesImages; + public static Image[] MoonPhasesImages => _moonPhasesImages ??= Resources.moon_phases_sheet.SplitHorizontal(8).ToArray(); + private static ImageList _itemImageList; public static ImageList ItemImageList { @@ -63,5 +69,20 @@ namespace PckStudio.Internal.Json return _blockImageList; } } + + private static ImageList _moonPhasesImageList; + public static ImageList MoonPhasesImageList + { + get + { + if (_moonPhasesImageList is null) + { + _moonPhasesImageList = new ImageList(); + _moonPhasesImageList.ColorDepth = ColorDepth.Depth32Bit; + _moonPhasesImageList.Images.AddRange(MoonPhasesImages); + } + return _moonPhasesImageList; + } + } } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index d9c7cb3d..ce1f4237 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -375,11 +375,19 @@ namespace PckStudio return; } - if (file.Filename == "res/terrain.png" || file.Filename == "res/items.png") + bool isTerrainOrItems = file.Filename == "res/terrain.png" || file.Filename == "res/items.png"; + bool isMoon = file.Filename == "res/terrain/moon_phases.png"; + + if (isTerrainOrItems || isMoon) { var img = file.GetTexture(); - var res = img.Width / 16; // texture count on X axes - var size = new Size(res, res); + + var columnCount = 0; + if (isTerrainOrItems) columnCount = 16; + else if (isMoon) columnCount = 4; + + var resolution = img.Width / columnCount; + var size = new Size(resolution, resolution); var viewer = new TextureAtlasEditor(currentPCK, file.Filename, img, size); if (viewer.ShowDialog() == DialogResult.OK) { diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 3013435f..5dfbced4 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -689,6 +689,7 @@ + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index 88909123..aedf0101 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -414,6 +414,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap moon_phases_sheet { + get { + object obj = ResourceManager.GetObject("moon_phases_sheet", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// @@ -617,30 +627,28 @@ namespace PckStudio.Properties { /// /// Looks up a localized string similar to { /// "COMMENT_1": "Tile data research by MattNL", - /// "COMMENT_2": "JSON conversion by PhoenixARC", + /// "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", /// "blocks": [ /// { /// "internalName": "grass_top", - /// "displayName": "Grass Block (Top)" + /// "displayName": "Grass Block (Top)", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "defaultName": "Grass_Common", + /// "variants": [ + /// "Grass_Common", + /// "Grass_Mesa", + /// "Grass_Swamp1", + /// "Grass_Swamp2" + /// ] + /// } /// }, /// { /// "internalName": "stone", /// "displayName": "Stone" /// }, /// { - /// "internalName": "dirt", - /// "displayName": "Dirt" - /// }, - /// { - /// "internalName": "grass_side", - /// "displayName": "Grass Block (Side)" - /// }, - /// { - /// "internalName": "planks_oak", - /// "displayName": "Oak Planks" - /// }, - /// { - /// "internalName": [rest of string was truncated]";. + /// "internalName": [rest of string was truncated]";. /// public static string tileData { get { diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index 58f5451c..e4d8ab0b 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -328,4 +328,7 @@ ..\..\ProjectLogo.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\moon_phases.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/PCK-Studio/Resources/moon_phases.png b/PCK-Studio/Resources/moon_phases.png new file mode 100644 index 0000000000000000000000000000000000000000..ce239ea7b40a685b1d74de6d8feca11ad580cd68 GIT binary patch literal 1569 zcmV++2HyFJP)N2bPDNB8 zb~7$DE-^4L^m3s900o^%L_t(|UhP~2Nz&P z6?dSD1t(z5mP2p>_S^&BbZbUqjU z=0}G=(T7;>A+&Akd&7A@Iah6Tp&D)DOC^bsp)=sF01!vyQ~<#*;YTMQWOD?vW`7KR znfk$aF&Hn0lS|X^5nmb^I=!*#3MwN(1B}>41I|KeaufU#euy9rPb3qHeZ_u1IYYcN z^~vmdG`~q^s?o+ZzQiu-5N9};HJ~BE?gW_tf?v*0qe-(#L~f7r{>Wl~HJn_5^zqrF z@%iJ)#S=7a;3K}ouEBU^X)wZ{QzD{HpfX!3fZ$V%7W1PLG!c}BKhnC&JSz5A$@IZ! z{t%2$7q`>J-E{d>HEb+y@g;WQ0MJE7iiePN65e$P(N7WPg0R-Bv>1YDZdGR2|wuwndTo3e+;mc_irfn?|%RJ zYucA@-?9DX?fZ8hKCuRri!dH6SY(rhvbm6&{(IpA^X048D#cL?ix2Rc@EJJ=?tT51 z07xJv{4vZT(IeF$*ugk>|MByek%7-g{ot0ygKMi3Bs>hb0{GzD|3+ARm!nYlKt@E` zp~C^>hpz>oJFip#L^P&4tRWJPEda~#@$**_;9e&p)d@HY0fgp4c>z4}xo`156BfTn zfH2qZ#=aK72j3N7biw%t6CMn?NcvzLyrY?Z0GiOS3kTpZ&O#W9y#%Plw*?4`@5X5; z{KD{u27dS+0&w0p{QydEH2Ix?@4|44r+b(qfQ`@6at{cLU!MSFJ;3k!{ZbJ30B&`p zAOl`g3Nk@sXX;QXE=&r-$XPZ>BI7eJ+{{P6K_=}1{`iKYI`G#82s4QYGYIo-aN#u6 zP;bi+a2jgk*D(z}7=CUdY%&v=wMQan0PLf&6*cVjgAfKcW^zA#4|8t0 z06zYA#~q!V=jsn~0vHWKnP+VQ*xSk+1;ppr=duZQl6&KO*wf1d@UvfUwx<^g5U~Eh z6##~Kw1C%dGAFyox4}PF0Rq+^8tK6jb5g zKl~ufvmn1gY;*mAn}T>84vTLz;Gx+2`j2uN%Aw>pjoV_HYscx);O}@Nb~^t3bRmr` z3(fuck@|qhOD#x!K(^pZoQHAgdOot8OuXfGU0}2drl`CLd#Vn=kn-|#2_cTlIjd)mpeck^3eewSR{HIP) Tt|iYb00000NkvXXu0mjfYU}K5 literal 0 HcmV?d00001 diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 39076f79..456dfe04 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -4134,5 +4134,39 @@ "internalName": "", "displayName": "" } + ], + "moon_phases": [ + { + "internalName": "moon_phase_0", + "displayName": "Full Moon" + }, + { + "internalName": "moon_phase_1", + "displayName": "Waning Gibbous" + }, + { + "internalName": "moon_phase_2", + "displayName": "Last Quarter" + }, + { + "internalName": "moon_phase_3", + "displayName": "Waning Crescent" + }, + { + "internalName": "moon_phase_4", + "displayName": "New Moon" + }, + { + "internalName": "moon_phase_5", + "displayName": "Waxing Crescent" + }, + { + "internalName": "moon_phase_6", + "displayName": "First Quarter" + }, + { + "internalName": "moon_phase_7", + "displayName": "Waxing Gibbous" + }, ] } From 3bf0075206f18e997ea704e7ed4cdf9b10509d83 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 07:29:59 -0400 Subject: [PATCH 06/29] Improved keyboard navigation --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 45 ++++++++----------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 12ed5b6e..b2ebaca2 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -76,7 +76,17 @@ namespace PckStudio.Forms.Editor private int SelectedIndex { - set => SetImageDisplayed(value); + set { + if (value < 0) + { + value = _tiles.Count + value; + } + else if (value >= _tiles.Count) + { + value = value - _tiles.Count; + } + SetImageDisplayed(value); + } } private const ImageLayoutDirection _imageLayout = ImageLayoutDirection.Horizontal; @@ -348,34 +358,17 @@ namespace PckStudio.Forms.Editor switch (keyData) { case Keys.Left: - if (_tiles.IndexInRange(_selectedTile.Index - 1)) - { - SelectedIndex = _selectedTile.Index - 1; - return true; - } - break; + SelectedIndex = _selectedTile.Index - 1; + return true; case Keys.Right: - if (_tiles.IndexInRange(_selectedTile.Index + 1)) - { - SelectedIndex = _selectedTile.Index + 1; - return true; - } - break; + SelectedIndex = _selectedTile.Index + 1; + return true; case Keys.Up: - if (_tiles.IndexInRange(_selectedTile.Index - _rowCount)) - { - SelectedIndex = _selectedTile.Index - _rowCount; - return true; - } - break; - + SelectedIndex = _selectedTile.Index - _rowCount; + return true; case Keys.Down: - if (_tiles.IndexInRange(_selectedTile.Index + _rowCount)) - { - SelectedIndex = _selectedTile.Index + _rowCount; - return true; - } - break; + SelectedIndex = _selectedTile.Index + _rowCount; + return true; } return false; From 16183baf7f93ff3d22e3f09ad29b112a47eda21e Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 15:31:03 -0400 Subject: [PATCH 07/29] Moved atlas resources --- PCK-Studio/Properties/Resources.resx | 12 +- .../Resources/atlases/additional_mapicons.png | Bin 0 -> 4599 bytes .../Resources/{ => atlases}/entities.png | Bin .../Resources/{ => atlases}/entityData.json | 0 PCK-Studio/Resources/{ => atlases}/items.png | Bin PCK-Studio/Resources/atlases/map_icons.png | Bin 0 -> 6329 bytes .../Resources/{ => atlases}/moon_phases.png | Bin .../Resources/{ => atlases}/terrain.png | Bin .../Resources/{ => atlases}/tileData.json | 156 +++++++++++++++++- 9 files changed, 161 insertions(+), 7 deletions(-) create mode 100644 PCK-Studio/Resources/atlases/additional_mapicons.png rename PCK-Studio/Resources/{ => atlases}/entities.png (100%) rename PCK-Studio/Resources/{ => atlases}/entityData.json (100%) rename PCK-Studio/Resources/{ => atlases}/items.png (100%) create mode 100644 PCK-Studio/Resources/atlases/map_icons.png rename PCK-Studio/Resources/{ => atlases}/moon_phases.png (100%) rename PCK-Studio/Resources/{ => atlases}/terrain.png (100%) rename PCK-Studio/Resources/{ => atlases}/tileData.json (96%) diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index e4d8ab0b..ecd55109 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -173,7 +173,7 @@ ..\Resources\iconImageList\GRH ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\tileData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + ..\Resources\atlases\tileData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 ..\Resources\pckClosed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -227,7 +227,7 @@ ..\Resources\iconImageList\INFO ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\terrain.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\atlases\terrain.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\fileTemplates\tu53colours.col;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -236,7 +236,7 @@ ..\Resources\icons\clock.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\items.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\atlases\items.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\..\CHANGELOG.md;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 @@ -281,10 +281,10 @@ ..\Resources\iconImageList\blank.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\entities.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\atlases\entities.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\entityData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + ..\Resources\atlases\entityData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 ..\Resources\icons\file_delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -329,6 +329,6 @@ ..\..\ProjectLogo.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\moon_phases.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\atlases\moon_phases.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/additional_mapicons.png b/PCK-Studio/Resources/atlases/additional_mapicons.png new file mode 100644 index 0000000000000000000000000000000000000000..11b7256ad3a96ddec53dd26fc17e0421d18e28a6 GIT binary patch literal 4599 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 literal 0 HcmV?d00001 diff --git a/PCK-Studio/Resources/moon_phases.png b/PCK-Studio/Resources/atlases/moon_phases.png similarity index 100% rename from PCK-Studio/Resources/moon_phases.png rename to PCK-Studio/Resources/atlases/moon_phases.png diff --git a/PCK-Studio/Resources/terrain.png b/PCK-Studio/Resources/atlases/terrain.png similarity index 100% rename from PCK-Studio/Resources/terrain.png rename to PCK-Studio/Resources/atlases/terrain.png diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/atlases/tileData.json similarity index 96% rename from PCK-Studio/Resources/tileData.json rename to PCK-Studio/Resources/atlases/tileData.json index 456dfe04..fd5a2204 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/atlases/tileData.json @@ -2282,7 +2282,29 @@ }, { "internalName": "shulker_top", - "displayName": "Shulker Box (Break Particles)" + "displayName": "Shulker Box (Break Particles)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Shulker_Box_Purple", + "variants": [ + "Shulker_Box_Black", + "Shulker_Box_Blue", + "Shulker_Box_Brown", + "Shulker_Box_Cyan", + "Shulker_Box_Grey", + "Shulker_Box_Green", + "Shulker_Box_Light_Blue", + "Shulker_Box_Light_Green", + "Shulker_Box_Magenta", + "Shulker_Box_Orange", + "Shulker_Box_Pink", + "Shulker_Box_Purple", + "Shulker_Box_Red", + "Shulker_Box_Silver", + "Shulker_Box_White", + "Shulker_Box_Yellow" + ] + } }, { "internalName": "", @@ -4167,6 +4189,138 @@ { "internalName": "moon_phase_7", "displayName": "Waxing Gibbous" + } + ], + "map_icons": [ + { + "internalName": "player_1", + "displayName": "Player 1" }, + { + "internalName": "player_2", + "displayName": "Player 2" + }, + { + "internalName": "player_3", + "displayName": "Player 3" + }, + { + "internalName": "player_4", + "displayName": "Player 4" + }, + { + "internalName": "target_x", + "displayName": "Unused" + }, + { + "internalName": "target_point", + "displayName": "Unused" + }, + { + "internalName": "player_off_map", + "displayName": "Unused" + }, + { + "internalName": "frame", + "displayName": "Item Frame" + }, + { + "internalName": "player_5", + "displayName": "Player 5" + }, + { + "internalName": "player_6", + "displayName": "Player 6" + }, + { + "internalName": "player_7", + "displayName": "Player 7" + }, + { + "internalName": "player_8", + "displayName": "Player 8" + }, + { + "internalName": "structure", + "displayName": "Structure (Explorer Map)" + }, + { + "internalName": "player_off_limits", + "displayName": "Unused" + }, + { + "internalName": "mansion", + "displayName": "Woodland Mansion (Explorer Map)" + }, + { + "internalName": "monument", + "displayName": "Ocean Monument (Explorer Map)" + } + ], + "additional_map_icons": [ + { + "internalName": "player_1_off_map", + "displayName": "Player 1 (Off Map)" + }, + { + "internalName": "player_2_off_map", + "displayName": "Player 2 (Off Map)" + }, + { + "internalName": "player_3_off_map", + "displayName": "Player 3 (Off Map)" + }, + { + "internalName": "player_4_off_map", + "displayName": "Player 4 (Off Map)" + }, + { + "internalName": "treasure", + "displayName": "Buried Treasure" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "player_5_off_map", + "displayName": "Player 5 (Off Map)" + }, + { + "internalName": "player_6_off_map", + "displayName": "Player 6 (Off Map)" + }, + { + "internalName": "player_7_off_map", + "displayName": "Player 7 (Off Map)" + }, + { + "internalName": "player_8_off_map", + "displayName": "Player 8 (Off Map)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + } ] } From ceceebfe4cbba55b91e01d6355596f9662bc4764 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 16:35:49 -0400 Subject: [PATCH 08/29] Added MapIcon support to Atlas Editor --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 11 ++++- PCK-Studio/Internal/Json/Tiles.cs | 47 +++++++++++++++---- PCK-Studio/MainForm.cs | 8 ++-- PCK-Studio/PckStudio.csproj | 24 +++++----- PCK-Studio/Properties/Resources.Designer.cs | 20 ++++++++ PCK-Studio/Properties/Resources.resx | 6 +++ 6 files changed, 91 insertions(+), 25 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index b2ebaca2..2b1aedf6 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -104,7 +104,9 @@ namespace PckStudio.Forms.Editor { "terrain" => (Tiles.BlockTileInfos, "blocks"), "items" => (Tiles.ItemTileInfos, "items"), - "moon_phases" => (Tiles.MoonPhasesTileInfos, "moon_phases"), + "mapicons" => (Tiles.MapIconTileInfos, "map_icons"), + "additionalmapicons" => (Tiles.AdditionalMapIconTileInfos, "additional_map_icons"), + "moon_phases" => (Tiles.MoonPhaseTileInfos, "moon_phases"), _ => (null, null), }; originalPictureBox.Image = atlas; @@ -152,6 +154,13 @@ namespace PckStudio.Forms.Editor dataTile = _selectedTile; + if (string.IsNullOrEmpty(dataTile.Tile.InternalName)) + { + selectTilePictureBox.Image = dataTile.Texture; + tileNameLabel.Text = "Unused"; + return; + } + if (string.IsNullOrEmpty(dataTile.Tile.DisplayName)) { dataTile = _tiles.Find(t => t.Tile.InternalName == _selectedTile.Tile.InternalName); diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index 924e51bc..a7e95c9a 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -19,6 +19,10 @@ namespace PckStudio.Internal.Json public List Items { get; set; } [JsonProperty("moon_phases")] public List MoonPhases { get; set; } + [JsonProperty("map_icons")] + public List MapIcons { get; set; } + [JsonProperty("additional_map_icons")] + public List AdditionalMapIcons { get; set; } } internal static class Tiles @@ -29,7 +33,9 @@ namespace PckStudio.Internal.Json internal static List ItemTileInfos => JsonTileData.Items; internal static List BlockTileInfos => JsonTileData.Blocks; - internal static List MoonPhasesTileInfos => JsonTileData.MoonPhases; + internal static List MoonPhaseTileInfos => JsonTileData.MoonPhases; + internal static List MapIconTileInfos => JsonTileData.MapIcons; + internal static List AdditionalMapIconTileInfos => JsonTileData.AdditionalMapIcons; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_sheet.SplitHorizontal(16).ToArray(); @@ -37,8 +43,14 @@ namespace PckStudio.Internal.Json private static Image[] _blockImages; public static Image[] BlockImages => _blockImages ??= Resources.terrain_sheet.SplitHorizontal(16).ToArray(); - private static Image[] _moonPhasesImages; - public static Image[] MoonPhasesImages => _moonPhasesImages ??= Resources.moon_phases_sheet.SplitHorizontal(8).ToArray(); + private static Image[] _moonPhaseImages; + public static Image[] MoonPhaseImages => _moonPhaseImages ??= Resources.moon_phases_sheet.SplitHorizontal(4).ToArray(); + + private static Image[] _mapIconImages; + public static Image[] MapIconImages => _mapIconImages ??= Resources.map_icons_sheet.SplitHorizontal(4).ToArray(); + + private static Image[] _additionalMapIconImages; + public static Image[] AdditionalMapIconImages => _mapIconImages ??= Resources.additional_map_icons_sheet.SplitHorizontal(4).ToArray(); private static ImageList _itemImageList; public static ImageList ItemImageList @@ -70,18 +82,33 @@ namespace PckStudio.Internal.Json } } - private static ImageList _moonPhasesImageList; - public static ImageList MoonPhasesImageList + private static ImageList _moonPhaseImageList; + public static ImageList MoonPhaseImageList { get { - if (_moonPhasesImageList is null) + if (_moonPhaseImageList is null) { - _moonPhasesImageList = new ImageList(); - _moonPhasesImageList.ColorDepth = ColorDepth.Depth32Bit; - _moonPhasesImageList.Images.AddRange(MoonPhasesImages); + _moonPhaseImageList = new ImageList(); + _moonPhaseImageList.ColorDepth = ColorDepth.Depth32Bit; + _moonPhaseImageList.Images.AddRange(MoonPhaseImages); } - return _moonPhasesImageList; + return _moonPhaseImageList; + } + } + + private static ImageList _mapIconImageList; + public static ImageList MapIconImageList + { + get + { + if (_mapIconImageList is null) + { + _mapIconImageList = new ImageList(); + _mapIconImageList.ColorDepth = ColorDepth.Depth32Bit; + _mapIconImageList.Images.AddRange(MapIconImages); + } + return _mapIconImageList; } } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index ce1f4237..fc50240c 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -376,15 +376,17 @@ namespace PckStudio } bool isTerrainOrItems = file.Filename == "res/terrain.png" || file.Filename == "res/items.png"; - bool isMoon = file.Filename == "res/terrain/moon_phases.png"; + bool isMoonPhases = file.Filename == "res/terrain/moon_phases.png"; + bool isMapIcons = file.Filename == "res/misc/mapicons.png"; + bool isAdditionalMapIcons = file.Filename == "res/misc/additionalmapicons.png"; - if (isTerrainOrItems || isMoon) + if (isTerrainOrItems || isMoonPhases || isMapIcons || isAdditionalMapIcons) { var img = file.GetTexture(); var columnCount = 0; if (isTerrainOrItems) columnCount = 16; - else if (isMoon) columnCount = 4; + else if (isMoonPhases || isMapIcons || isAdditionalMapIcons) columnCount = 4; var resolution = img.Width / columnCount; var size = new Size(resolution, resolution); diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 5dfbced4..3d6c6f18 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -139,6 +139,11 @@ + + True + True + Resources.resx + Component @@ -613,11 +618,6 @@ SettingsSingleFileGenerator Settings.Designer.cs - - True - True - Resources.resx - True Settings.settings @@ -628,7 +628,8 @@ - + + @@ -644,16 +645,13 @@ - - - @@ -679,7 +677,12 @@ - + + + + + + @@ -689,7 +692,6 @@ - diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index aedf0101..a3b953f4 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -70,6 +70,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap additional_map_icons_sheet { + get { + object obj = ResourceManager.GetObject("additional_map_icons_sheet", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -404,6 +414,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap map_icons_sheet { + get { + object obj = ResourceManager.GetObject("map_icons_sheet", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index ecd55109..5cfa8456 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -331,4 +331,10 @@ ..\Resources\atlases\moon_phases.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\additional_mapicons.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\atlases\map_icons.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file From 42d6d44e2ce79c97b8f73eab3d0853e08babbf16 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 18:48:06 -0400 Subject: [PATCH 09/29] Added highlight for selected tiles in Atlas Editor --- .../Editor/TextureAtlasEditor.Designer.cs | 19 +++-------- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 33 ++++++++++++++++--- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index ca8a591d..0fdbfdd5 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -37,7 +37,6 @@ this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.applyColorMaskToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.playAnimationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.sToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.originalPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); this.selectTilePictureBox = new PckStudio.ToolboxItems.AnimationPictureBox(); @@ -72,8 +71,7 @@ this.menuStrip1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20))))); this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.fileToolStripMenuItem, - this.viewToolStripMenuItem, - this.sToolStripMenuItem}); + this.viewToolStripMenuItem}); this.menuStrip1.Location = new System.Drawing.Point(20, 60); this.menuStrip1.Name = "menuStrip1"; this.menuStrip1.Size = new System.Drawing.Size(590, 24); @@ -94,14 +92,14 @@ // saveToolStripMenuItem // this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; - this.saveToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.saveToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.saveToolStripMenuItem.Text = "Save"; this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); // // extractTileToolStripMenuItem // this.extractTileToolStripMenuItem.Name = "extractTileToolStripMenuItem"; - this.extractTileToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.extractTileToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.extractTileToolStripMenuItem.Text = "Extract Tile"; this.extractTileToolStripMenuItem.Click += new System.EventHandler(this.extractTileToolStripMenuItem_Click); // @@ -121,7 +119,7 @@ this.applyColorMaskToolStripMenuItem.CheckOnClick = true; this.applyColorMaskToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.applyColorMaskToolStripMenuItem.Name = "applyColorMaskToolStripMenuItem"; - this.applyColorMaskToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.applyColorMaskToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.applyColorMaskToolStripMenuItem.Text = "Apply Color Mask"; this.applyColorMaskToolStripMenuItem.CheckedChanged += new System.EventHandler(this.applyColorMaskToolStripMenuItem_CheckedChanged); // @@ -131,16 +129,10 @@ this.playAnimationsToolStripMenuItem.CheckOnClick = true; this.playAnimationsToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.playAnimationsToolStripMenuItem.Name = "playAnimationsToolStripMenuItem"; - this.playAnimationsToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.playAnimationsToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.playAnimationsToolStripMenuItem.Text = "Play Animations"; this.playAnimationsToolStripMenuItem.CheckedChanged += new System.EventHandler(this.playAnimationsToolStripMenuItem_CheckedChanged); // - // sToolStripMenuItem - // - this.sToolStripMenuItem.Name = "sToolStripMenuItem"; - this.sToolStripMenuItem.Size = new System.Drawing.Size(24, 20); - this.sToolStripMenuItem.Text = "s"; - // // tableLayoutPanel1 // this.tableLayoutPanel1.AutoSize = true; @@ -340,6 +332,5 @@ private MetroFramework.Controls.MetroLabel variantLabel; private MetroFramework.Controls.MetroButton clearColorButton; private MetroFramework.Controls.MetroButton setColorButton; - private System.Windows.Forms.ToolStripMenuItem sToolStripMenuItem; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 2b1aedf6..da035dfb 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -37,13 +37,14 @@ namespace PckStudio.Forms.Editor { internal partial class TextureAtlasEditor : MetroForm { + private Image _workingTexture; public Image FinalTexture { get { if (DialogResult != DialogResult.OK) return null; - return (Image)originalPictureBox.Image.Clone(); + return _workingTexture; } } @@ -96,6 +97,9 @@ namespace PckStudio.Forms.Editor InitializeComponent(); AcquireColorTable(pckFile); + + _workingTexture = atlas; + _areaSize = areaSize; _pckFile = pckFile; _rowCount = atlas.Width / areaSize.Width; @@ -109,7 +113,9 @@ namespace PckStudio.Forms.Editor "moon_phases" => (Tiles.MoonPhaseTileInfos, "moon_phases"), _ => (null, null), }; - originalPictureBox.Image = atlas; + + originalPictureBox.Image = (Image)((Bitmap)atlas).Clone(new Rectangle(new Point(0, 0), new Size(atlas.Width - 1, atlas.Height - 1)), PixelFormat.Format32bppArgb); + var images = atlas.Split(_areaSize, _imageLayout); var tiles = images.enumerate().Select( @@ -154,6 +160,25 @@ namespace PckStudio.Forms.Editor dataTile = _selectedTile; + var graphicsConfig = new GraphicsConfig() + { + InterpolationMode = selectTilePictureBox.InterpolationMode, + PixelOffsetMode = PixelOffsetMode.HighQuality + }; + using (var g = Graphics.FromImage(originalPictureBox.Image)) + { + g.ApplyConfig(graphicsConfig); + g.Clear(Color.Transparent); + g.DrawImage(_workingTexture, new Point(0, 0)); + g.DrawRectangle( + Pens.White, + new Rectangle(_selectedTile.Area.X, _selectedTile.Area.Y, + _selectedTile.Area.Width, + _selectedTile.Area.Height)); + } + + originalPictureBox.Invalidate(); + if (string.IsNullOrEmpty(dataTile.Tile.InternalName)) { selectTilePictureBox.Image = dataTile.Texture; @@ -318,7 +343,7 @@ namespace PckStudio.Forms.Editor }; if (texture.Size != _areaSize) texture = texture.Resize(_areaSize, graphicsConfig); - using (var g = Graphics.FromImage(originalPictureBox.Image)) + using (var g = Graphics.FromImage(_workingTexture)) { g.ApplyConfig(graphicsConfig); g.Fill(_selectedTile.Area, Color.Transparent); @@ -390,7 +415,7 @@ namespace PckStudio.Forms.Editor int index = GetSelectedImageIndex( originalPictureBox.Size, - originalPictureBox.Image.Size, + _workingTexture.Size, _areaSize, e.Location, originalPictureBox.SizeMode, From 86cdc74a9d47cf0593598850e16dc4a72b2ada85 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 18:56:50 -0400 Subject: [PATCH 10/29] Fix for SetTile not updating the texture properly --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 44 +++++++++++-------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index da035dfb..20f9029a 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -140,6 +140,28 @@ namespace PckStudio.Forms.Editor return false; } + private void updatePictureBoxDisplay() + { + var graphicsConfig = new GraphicsConfig() + { + InterpolationMode = selectTilePictureBox.InterpolationMode, + PixelOffsetMode = PixelOffsetMode.HighQuality + }; + using (var g = Graphics.FromImage(originalPictureBox.Image)) + { + g.ApplyConfig(graphicsConfig); + g.Clear(Color.Transparent); + g.DrawImage(_workingTexture, new Point(0, 0)); + g.DrawRectangle( + Pens.White, + new Rectangle(_selectedTile.Area.X, _selectedTile.Area.Y, + _selectedTile.Area.Width, + _selectedTile.Area.Height)); + } + + originalPictureBox.Invalidate(); + } + private void SetImageDisplayed(int index) { tileNameLabel.Text = string.Empty; @@ -160,24 +182,7 @@ namespace PckStudio.Forms.Editor dataTile = _selectedTile; - var graphicsConfig = new GraphicsConfig() - { - InterpolationMode = selectTilePictureBox.InterpolationMode, - PixelOffsetMode = PixelOffsetMode.HighQuality - }; - using (var g = Graphics.FromImage(originalPictureBox.Image)) - { - g.ApplyConfig(graphicsConfig); - g.Clear(Color.Transparent); - g.DrawImage(_workingTexture, new Point(0, 0)); - g.DrawRectangle( - Pens.White, - new Rectangle(_selectedTile.Area.X, _selectedTile.Area.Y, - _selectedTile.Area.Width, - _selectedTile.Area.Height)); - } - - originalPictureBox.Invalidate(); + updatePictureBoxDisplay(); if (string.IsNullOrEmpty(dataTile.Tile.InternalName)) { @@ -352,7 +357,8 @@ namespace PckStudio.Forms.Editor _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, texture); selectTilePictureBox.Image = texture; - originalPictureBox.Invalidate(); + + updatePictureBoxDisplay(); } private Color GetBlendColor() From 7b5ef21ab84eeabf2aa2506511e12b41cb44abbb Mon Sep 17 00:00:00 2001 From: MattN-L Date: Thu, 14 Mar 2024 15:20:38 -0400 Subject: [PATCH 11/29] Updated Minecraft dye colors for custom color form --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 20f9029a..ae0609e2 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -524,22 +524,22 @@ namespace PckStudio.Forms.Editor // values below are the default Minecraft dyed leather armor values for convenience colorPick.CustomColors = new int[] { - 0x262EB0, // Red - 0x1D80F9, // Orange - 0x3DD8FE, // Yellow - 0x1FC780, // Lime - 0x167C5E, // Green - 0xDAB33A, // Light Blue - 0x9C9C16, // Cyan - 0xAA443C, // Blue - 0xB83289, // Purple - 0xBD4EC7, // Magenta - 0xAA8BF3, // Pink - 0xFEFFF9, // White - 0x979D9D, // Light Gray - 0x524F47, // Gray - 0x211D1D, // Black - 0x325483 // Brown + 0xfefff9, // White + 0x1d80f9, // Orange + 0xbd4ec7, // Magenta + 0xdab33a, // Light Blue + 0x3dd8fe, // Yellow + 0x1fc780, // Lime + 0xaa8bf3, // Pink + 0x524f47, // Gray + 0x979d9d, // Light Gray + 0x9c9c16, // Cyan + 0xb83289, // Purple + 0xaa443c, // Blue + 0x325483, // Brown + 0x167c5e, // Green + 0x262eb0, // Red + 0x211d1d // Black }; if (colorPick.ShowDialog() != DialogResult.OK) return; From 627cb01bf63dc2181a17f91712f89ef2d4cf8d45 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Thu, 14 Mar 2024 16:52:07 -0400 Subject: [PATCH 12/29] Added Atlas Editor support for Experience Orbs --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 23 +++- PCK-Studio/Internal/Json/Tiles.cs | 43 ++++++- PCK-Studio/MainForm.cs | 8 +- PCK-Studio/PckStudio.csproj | 1 + PCK-Studio/Properties/Resources.Designer.cs | 10 ++ PCK-Studio/Properties/Resources.resx | 3 + .../Resources/atlases/experience_orbs.png | Bin 0 -> 583 bytes PCK-Studio/Resources/atlases/tileData.json | 121 ++++++++++++++++++ 8 files changed, 204 insertions(+), 5 deletions(-) create mode 100644 PCK-Studio/Resources/atlases/experience_orbs.png diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index ae0609e2..21b9eb4e 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -1,4 +1,4 @@ -/* Copyright (c) 2023-present miku-666 +/* Copyright (c) 2023-present miku-666, MattNL * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. @@ -111,9 +111,11 @@ namespace PckStudio.Forms.Editor "mapicons" => (Tiles.MapIconTileInfos, "map_icons"), "additionalmapicons" => (Tiles.AdditionalMapIconTileInfos, "additional_map_icons"), "moon_phases" => (Tiles.MoonPhaseTileInfos, "moon_phases"), + "xporb" => (Tiles.ExperienceOrbTileInfos, "experience_orbs"), _ => (null, null), }; + // there's got to be a better way to get around this clone exception originalPictureBox.Image = (Image)((Bitmap)atlas).Clone(new Rectangle(new Point(0, 0), new Size(atlas.Width - 1, atlas.Height - 1)), PixelFormat.Format32bppArgb); var images = atlas.Split(_areaSize, _imageLayout); @@ -368,9 +370,12 @@ namespace PckStudio.Forms.Editor var col = FindBlendColorByKey(dataTile.Tile.ColourEntry.DefaultName); return col; } + return Color.White; } + int xp_orb_red = 0x0; + bool xp_orb_reverse = false; private Color FindBlendColorByKey(string colorKey) { if (_colourTable is not null && @@ -390,6 +395,18 @@ namespace PckStudio.Forms.Editor return waterColor.SurfaceColor; } } + + // Experience Orbs are hardcoded within a range and do not have color table entries + if (colorKey == "experience_orb") + { + if (xp_orb_red == 0) xp_orb_reverse = false; + if (xp_orb_red == 0xFF) xp_orb_reverse = true; + + xp_orb_red += xp_orb_reverse ? -0x05 : 0x05; + + return Color.FromArgb(xp_orb_red, 255, 0); + } + return Color.White; } @@ -397,6 +414,10 @@ namespace PckStudio.Forms.Editor { switch (keyData) { + case Keys.R: + // Reselects the specific tile. Can be held to for cycling through colors for XP orbs + SelectedIndex = _selectedTile.Index; + return true; case Keys.Left: SelectedIndex = _selectedTile.Index - 1; return true; diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index a7e95c9a..68691564 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -15,14 +15,21 @@ namespace PckStudio.Internal.Json { [JsonProperty("blocks")] public List Blocks { get; set; } + [JsonProperty("items")] public List Items { get; set; } + [JsonProperty("moon_phases")] public List MoonPhases { get; set; } + [JsonProperty("map_icons")] public List MapIcons { get; set; } + [JsonProperty("additional_map_icons")] public List AdditionalMapIcons { get; set; } + + [JsonProperty("experience_orbs")] + public List ExperienceOrbs { get; set; } } internal static class Tiles @@ -36,6 +43,7 @@ namespace PckStudio.Internal.Json internal static List MoonPhaseTileInfos => JsonTileData.MoonPhases; internal static List MapIconTileInfos => JsonTileData.MapIcons; internal static List AdditionalMapIconTileInfos => JsonTileData.AdditionalMapIcons; + internal static List ExperienceOrbTileInfos => JsonTileData.ExperienceOrbs; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_sheet.SplitHorizontal(16).ToArray(); @@ -50,7 +58,10 @@ namespace PckStudio.Internal.Json public static Image[] MapIconImages => _mapIconImages ??= Resources.map_icons_sheet.SplitHorizontal(4).ToArray(); private static Image[] _additionalMapIconImages; - public static Image[] AdditionalMapIconImages => _mapIconImages ??= Resources.additional_map_icons_sheet.SplitHorizontal(4).ToArray(); + public static Image[] AdditionalMapIconImages => _additionalMapIconImages ??= Resources.additional_map_icons_sheet.SplitHorizontal(4).ToArray(); + + private static Image[] _experienceOrbIconImages; + public static Image[] ExperienceOrbIconImages => _experienceOrbIconImages ??= Resources.experience_orbs_sheet.SplitHorizontal(4).ToArray(); private static ImageList _itemImageList; public static ImageList ItemImageList @@ -111,5 +122,35 @@ namespace PckStudio.Internal.Json return _mapIconImageList; } } + + private static ImageList _additionalMapIconImageList; + public static ImageList AdditionalMapIconImageList + { + get + { + if (_additionalMapIconImageList is null) + { + _additionalMapIconImageList = new ImageList(); + _additionalMapIconImageList.ColorDepth = ColorDepth.Depth32Bit; + _additionalMapIconImageList.Images.AddRange(AdditionalMapIconImages); + } + return _additionalMapIconImageList; + } + } + + private static ImageList _experienceOrbsImageList; + public static ImageList ExperienceOrbsImageList + { + get + { + if (_experienceOrbsImageList is null) + { + _experienceOrbsImageList = new ImageList(); + _experienceOrbsImageList.ColorDepth = ColorDepth.Depth32Bit; + _experienceOrbsImageList.Images.AddRange(ExperienceOrbIconImages); + } + return _experienceOrbsImageList; + } + } } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index fc50240c..9439a115 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -379,14 +379,16 @@ namespace PckStudio bool isMoonPhases = file.Filename == "res/terrain/moon_phases.png"; bool isMapIcons = file.Filename == "res/misc/mapicons.png"; bool isAdditionalMapIcons = file.Filename == "res/misc/additionalmapicons.png"; + bool isXPOrbs = file.Filename == "res/item/xporb.png"; - if (isTerrainOrItems || isMoonPhases || isMapIcons || isAdditionalMapIcons) + if (isTerrainOrItems || isMoonPhases || isMapIcons || isAdditionalMapIcons || isXPOrbs) { var img = file.GetTexture(); - var columnCount = 0; + // all of the other atlases so far use 4 + var columnCount = 4; + if (isTerrainOrItems) columnCount = 16; - else if (isMoonPhases || isMapIcons || isAdditionalMapIcons) columnCount = 4; var resolution = img.Width / columnCount; var size = new Size(resolution, resolution); diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 3d6c6f18..35eeeb95 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -680,6 +680,7 @@ + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index a3b953f4..9a8e5b0d 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -294,6 +294,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap experience_orbs_sheet { + get { + object obj = ResourceManager.GetObject("experience_orbs_sheet", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index 5cfa8456..9c8afa9a 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -337,4 +337,7 @@ ..\Resources\atlases\map_icons.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\experience_orbs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/experience_orbs.png b/PCK-Studio/Resources/atlases/experience_orbs.png new file mode 100644 index 0000000000000000000000000000000000000000..1a2d58a36c8a49b5c5c86ae387325467fb74e82a GIT binary patch literal 583 zcmV-N0=WH&P)Px#1ZP1_K>z@;j|==^1poj57*I@9MR0I%prD|^!NLFk|Np?i|B#UXY-|7k0D?BJ z)c^nh2y{|TQ~&?}|NsC00N#VWSpWb432;bRa{vGi!vFvd!vV){sAK>D0i;PpK~z{r z-Ia@O!ypVrNhs|9|9J8f0}hP2lcri~rQ_H)30#Nt6^t|{PUB|+3BzSyU}#7eh9)et z%(5X}H-;oSCKc>Zg>+$sC`i310Oy=DF{iFpFBN*nz5y99XDa{=RzR;m3A|o!7Kpw= zbP>bbIK^7fG14vu!M&9a;=c+k-g#vH?+ct&w?^ZAG`lc4u``nAgJyO7jougboTuf@ z%6&rnMM3)2yLcIf2^%mY2^PR%YvYDoiZb>i=bHptK@+eIch05O0*|2OwQ|E-1j4Tn zUBvJ*F2Dtv{z@SD3c*E;Ze!R;o^?lFTiG9;kr%_Hg6;B-ZMeykc$2{R zga=G(V7BFy;jc5sDNois Date: Thu, 14 Mar 2024 18:54:57 -0400 Subject: [PATCH 13/29] Added Slider for XP Orb colors --- .../Editor/TextureAtlasEditor.Designer.cs | 132 ++++++++++++------ PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 27 ++-- 2 files changed, 100 insertions(+), 59 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index 0fdbfdd5..3833e018 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -33,11 +33,11 @@ this.menuStrip1 = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.extractTileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.applyColorMaskToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.playAnimationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.colorSliderLabel = new MetroFramework.Controls.MetroLabel(); this.originalPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); this.selectTilePictureBox = new PckStudio.ToolboxItems.AnimationPictureBox(); this.replaceButton = new MetroFramework.Controls.MetroButton(); @@ -46,6 +46,8 @@ this.setColorButton = new MetroFramework.Controls.MetroButton(); this.animationButton = new MetroFramework.Controls.MetroButton(); this.clearColorButton = new MetroFramework.Controls.MetroButton(); + this.colorSlider = new MetroFramework.Controls.MetroTrackBar(); + this.metroButton1 = new MetroFramework.Controls.MetroButton(); this.menuStrip1.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.originalPictureBox)).BeginInit(); @@ -58,12 +60,12 @@ | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.variantLabel.AutoSize = true; - this.variantLabel.Location = new System.Drawing.Point(3, 232); + this.variantLabel.Location = new System.Drawing.Point(3, 254); this.variantLabel.Name = "variantLabel"; - this.variantLabel.Size = new System.Drawing.Size(55, 25); + this.variantLabel.Size = new System.Drawing.Size(208, 24); this.variantLabel.TabIndex = 18; this.variantLabel.Text = "Variant:"; - this.variantLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.variantLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.variantLabel.Theme = MetroFramework.MetroThemeStyle.Dark; // // menuStrip1 @@ -82,8 +84,7 @@ // this.fileToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20))))); this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.saveToolStripMenuItem, - this.extractTileToolStripMenuItem}); + this.saveToolStripMenuItem}); this.fileToolStripMenuItem.ForeColor = System.Drawing.SystemColors.Menu; this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); @@ -96,13 +97,6 @@ this.saveToolStripMenuItem.Text = "Save"; this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); // - // extractTileToolStripMenuItem - // - this.extractTileToolStripMenuItem.Name = "extractTileToolStripMenuItem"; - this.extractTileToolStripMenuItem.Size = new System.Drawing.Size(180, 22); - this.extractTileToolStripMenuItem.Text = "Extract Tile"; - this.extractTileToolStripMenuItem.Click += new System.EventHandler(this.extractTileToolStripMenuItem_Click); - // // viewToolStripMenuItem // this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -141,34 +135,52 @@ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10.43842F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 26.09603F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 63.46555F)); + this.tableLayoutPanel1.Controls.Add(this.variantComboBox, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.variantLabel, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.colorSliderLabel, 0, 3); this.tableLayoutPanel1.Controls.Add(this.originalPictureBox, 2, 0); this.tableLayoutPanel1.Controls.Add(this.selectTilePictureBox, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 6); + this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 7); this.tableLayoutPanel1.Controls.Add(this.tileNameLabel, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.variantComboBox, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.variantLabel, 0, 2); this.tableLayoutPanel1.Controls.Add(this.setColorButton, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.animationButton, 1, 6); + this.tableLayoutPanel1.Controls.Add(this.animationButton, 1, 7); this.tableLayoutPanel1.Controls.Add(this.clearColorButton, 1, 4); + this.tableLayoutPanel1.Controls.Add(this.colorSlider, 1, 3); + this.tableLayoutPanel1.Controls.Add(this.metroButton1, 0, 6); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(20, 84); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 7; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.09524F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.09524F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowCount = 8; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 36.3643F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 36.3643F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.543719F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel1.Size = new System.Drawing.Size(590, 565); this.tableLayoutPanel1.TabIndex = 17; // + // colorSliderLabel + // + this.colorSliderLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.colorSliderLabel.AutoSize = true; + this.colorSliderLabel.BackColor = System.Drawing.Color.Transparent; + this.colorSliderLabel.Location = new System.Drawing.Point(3, 246); + this.colorSliderLabel.Name = "colorSliderLabel"; + this.colorSliderLabel.Size = new System.Drawing.Size(55, 198); + this.colorSliderLabel.TabIndex = 19; + this.colorSliderLabel.Text = "Color Range:"; + this.colorSliderLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.colorSliderLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + this.colorSliderLabel.Visible = false; + this.colorSliderLabel.WrapToLine = true; + // // originalPictureBox // this.originalPictureBox.BackColor = System.Drawing.Color.Transparent; @@ -176,8 +188,8 @@ this.originalPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.originalPictureBox.Location = new System.Drawing.Point(217, 3); this.originalPictureBox.Name = "originalPictureBox"; - this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 7); - this.originalPictureBox.Size = new System.Drawing.Size(370, 533); + this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 8); + this.originalPictureBox.Size = new System.Drawing.Size(370, 534); this.originalPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.originalPictureBox.TabIndex = 4; this.originalPictureBox.TabStop = false; @@ -196,7 +208,7 @@ this.selectTilePictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.selectTilePictureBox.Location = new System.Drawing.Point(3, 3); this.selectTilePictureBox.Name = "selectTilePictureBox"; - this.selectTilePictureBox.Size = new System.Drawing.Size(208, 201); + this.selectTilePictureBox.Size = new System.Drawing.Size(208, 192); this.selectTilePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.selectTilePictureBox.TabIndex = 0; this.selectTilePictureBox.TabStop = false; @@ -208,11 +220,11 @@ | System.Windows.Forms.AnchorStyles.Right))); this.replaceButton.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.replaceButton, 2); - this.replaceButton.Location = new System.Drawing.Point(3, 517); + this.replaceButton.Location = new System.Drawing.Point(3, 519); this.replaceButton.Name = "replaceButton"; - this.replaceButton.Size = new System.Drawing.Size(208, 19); + this.replaceButton.Size = new System.Drawing.Size(208, 18); this.replaceButton.TabIndex = 14; - this.replaceButton.Text = "Replace"; + this.replaceButton.Text = "Replace Tile on Atlas"; this.replaceButton.Theme = MetroFramework.MetroThemeStyle.Dark; this.replaceButton.UseSelectable = true; this.replaceButton.Click += new System.EventHandler(this.replaceButton_Click); @@ -223,23 +235,25 @@ | System.Windows.Forms.AnchorStyles.Right))); this.tileNameLabel.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2); - this.tileNameLabel.Location = new System.Drawing.Point(3, 213); + this.tileNameLabel.Location = new System.Drawing.Point(3, 203); this.tileNameLabel.Name = "tileNameLabel"; - this.tileNameLabel.Size = new System.Drawing.Size(208, 19); + this.tileNameLabel.Size = new System.Drawing.Size(208, 43); this.tileNameLabel.TabIndex = 19; this.tileNameLabel.Text = "TileName"; this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.tileNameLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + this.tileNameLabel.WrapToLine = true; // // variantComboBox // this.variantComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.variantComboBox, 2); this.variantComboBox.Enabled = false; this.variantComboBox.FormattingEnabled = true; this.variantComboBox.ItemHeight = 23; - this.variantComboBox.Location = new System.Drawing.Point(64, 235); + this.variantComboBox.Location = new System.Drawing.Point(3, 287); this.variantComboBox.Name = "variantComboBox"; - this.variantComboBox.Size = new System.Drawing.Size(147, 29); + this.variantComboBox.Size = new System.Drawing.Size(208, 29); this.variantComboBox.TabIndex = 17; this.variantComboBox.Theme = MetroFramework.MetroThemeStyle.Dark; this.variantComboBox.UseSelectable = true; @@ -249,9 +263,9 @@ // this.setColorButton.Anchor = System.Windows.Forms.AnchorStyles.Left; this.tableLayoutPanel1.SetColumnSpan(this.setColorButton, 2); - this.setColorButton.Location = new System.Drawing.Point(3, 467); + this.setColorButton.Location = new System.Drawing.Point(3, 447); this.setColorButton.Name = "setColorButton"; - this.setColorButton.Size = new System.Drawing.Size(208, 19); + this.setColorButton.Size = new System.Drawing.Size(208, 18); this.setColorButton.TabIndex = 25; this.setColorButton.Text = "Set Custom Colour"; this.setColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -264,9 +278,9 @@ | System.Windows.Forms.AnchorStyles.Right))); this.animationButton.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.animationButton, 2); - this.animationButton.Location = new System.Drawing.Point(3, 542); + this.animationButton.Location = new System.Drawing.Point(3, 543); this.animationButton.Name = "animationButton"; - this.animationButton.Size = new System.Drawing.Size(208, 20); + this.animationButton.Size = new System.Drawing.Size(208, 19); this.animationButton.TabIndex = 16; this.animationButton.Text = "Animation"; this.animationButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -277,15 +291,41 @@ // this.clearColorButton.Anchor = System.Windows.Forms.AnchorStyles.Left; this.tableLayoutPanel1.SetColumnSpan(this.clearColorButton, 2); - this.clearColorButton.Location = new System.Drawing.Point(3, 492); + this.clearColorButton.Location = new System.Drawing.Point(3, 471); this.clearColorButton.Name = "clearColorButton"; - this.clearColorButton.Size = new System.Drawing.Size(208, 19); + this.clearColorButton.Size = new System.Drawing.Size(208, 18); this.clearColorButton.TabIndex = 24; this.clearColorButton.Text = "Clear Custom Colour"; this.clearColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; this.clearColorButton.UseSelectable = true; this.clearColorButton.Click += new System.EventHandler(this.clearColorButton_Click); // + // colorSlider + // + this.colorSlider.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.colorSlider.BackColor = System.Drawing.Color.Transparent; + this.colorSlider.Location = new System.Drawing.Point(64, 249); + this.colorSlider.Maximum = 255; + this.colorSlider.Name = "colorSlider"; + this.colorSlider.Size = new System.Drawing.Size(147, 192); + this.colorSlider.TabIndex = 26; + this.colorSlider.Text = "metroTrackBar1"; + this.colorSlider.Theme = MetroFramework.MetroThemeStyle.Dark; + this.colorSlider.Value = 0; + this.colorSlider.Visible = false; + this.colorSlider.ValueChanged += new System.EventHandler(this.colorSlider_ValueChanged); + // + // metroButton1 + // + this.tableLayoutPanel1.SetColumnSpan(this.metroButton1, 2); + this.metroButton1.Location = new System.Drawing.Point(3, 495); + this.metroButton1.Name = "metroButton1"; + this.metroButton1.Size = new System.Drawing.Size(208, 18); + this.metroButton1.TabIndex = 27; + this.metroButton1.Text = "Extract Tile from Atlas"; + this.metroButton1.Theme = MetroFramework.MetroThemeStyle.Dark; + this.metroButton1.UseSelectable = true; + // // TextureAtlasEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -323,7 +363,6 @@ private PckStudio.ToolboxItems.InterpolationPictureBox originalPictureBox; private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem; private MetroFramework.Controls.MetroButton animationButton; - private System.Windows.Forms.ToolStripMenuItem extractTileToolStripMenuItem; private MetroFramework.Controls.MetroComboBox variantComboBox; private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem applyColorMaskToolStripMenuItem; @@ -332,5 +371,8 @@ private MetroFramework.Controls.MetroLabel variantLabel; private MetroFramework.Controls.MetroButton clearColorButton; private MetroFramework.Controls.MetroButton setColorButton; + private MetroFramework.Controls.MetroTrackBar colorSlider; + private MetroFramework.Controls.MetroLabel colorSliderLabel; + private MetroFramework.Controls.MetroButton metroButton1; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 21b9eb4e..81334a5a 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -374,10 +374,14 @@ namespace PckStudio.Forms.Editor return Color.White; } - int xp_orb_red = 0x0; - bool xp_orb_reverse = false; private Color FindBlendColorByKey(string colorKey) { + // Experience Orbs are hardcoded within a range and do not have color table entries + if (colorSliderLabel.Visible = colorSlider.Visible = colorKey == "experience_orb") + { + return Color.FromArgb(colorSlider.Value, 255, 0); + } + if (_colourTable is not null && dataTile.Tile.HasColourEntry && dataTile.Tile.ColourEntry is not null) @@ -396,17 +400,6 @@ namespace PckStudio.Forms.Editor } } - // Experience Orbs are hardcoded within a range and do not have color table entries - if (colorKey == "experience_orb") - { - if (xp_orb_red == 0) xp_orb_reverse = false; - if (xp_orb_red == 0xFF) xp_orb_reverse = true; - - xp_orb_red += xp_orb_reverse ? -0x05 : 0x05; - - return Color.FromArgb(xp_orb_red, 255, 0); - } - return Color.White; } @@ -415,7 +408,7 @@ namespace PckStudio.Forms.Editor switch (keyData) { case Keys.R: - // Reselects the specific tile. Can be held to for cycling through colors for XP orbs + // Refreshes the specific tile SelectedIndex = _selectedTile.Index; return true; case Keys.Left: @@ -579,5 +572,11 @@ namespace PckStudio.Forms.Editor clearColorButton.Enabled = false; } + + private void colorSlider_ValueChanged(object sender, EventArgs e) + { + selectTilePictureBox.BlendColor = GetBlendColor(); + selectTilePictureBox.Image = dataTile.Texture; + } } } \ No newline at end of file From ede22c5b72f89937815159409fdb60602b85d13d Mon Sep 17 00:00:00 2001 From: MattN-L Date: Thu, 14 Mar 2024 20:04:38 -0400 Subject: [PATCH 14/29] Adjusted interface design --- .../Editor/TextureAtlasEditor.Designer.cs | 300 +++++++++--------- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 3 +- 2 files changed, 154 insertions(+), 149 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index 3833e018..4476b332 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -37,17 +37,17 @@ this.applyColorMaskToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.playAnimationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.variantComboBox = new MetroFramework.Controls.MetroComboBox(); this.colorSliderLabel = new MetroFramework.Controls.MetroLabel(); - this.originalPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); - this.selectTilePictureBox = new PckStudio.ToolboxItems.AnimationPictureBox(); this.replaceButton = new MetroFramework.Controls.MetroButton(); this.tileNameLabel = new MetroFramework.Controls.MetroLabel(); - this.variantComboBox = new MetroFramework.Controls.MetroComboBox(); this.setColorButton = new MetroFramework.Controls.MetroButton(); this.animationButton = new MetroFramework.Controls.MetroButton(); this.clearColorButton = new MetroFramework.Controls.MetroButton(); this.colorSlider = new MetroFramework.Controls.MetroTrackBar(); - this.metroButton1 = new MetroFramework.Controls.MetroButton(); + this.extractButton = new MetroFramework.Controls.MetroButton(); + this.originalPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); + this.selectTilePictureBox = new PckStudio.ToolboxItems.AnimationPictureBox(); this.menuStrip1.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.originalPictureBox)).BeginInit(); @@ -56,13 +56,12 @@ // // variantLabel // - this.variantLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); + this.variantLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this.variantLabel.AutoSize = true; - this.variantLabel.Location = new System.Drawing.Point(3, 254); + this.tableLayoutPanel1.SetColumnSpan(this.variantLabel, 2); + this.variantLabel.Location = new System.Drawing.Point(3, 239); this.variantLabel.Name = "variantLabel"; - this.variantLabel.Size = new System.Drawing.Size(208, 24); + this.variantLabel.Size = new System.Drawing.Size(208, 19); this.variantLabel.TabIndex = 18; this.variantLabel.Text = "Variant:"; this.variantLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -135,45 +134,58 @@ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10.43842F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 26.09603F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 63.46555F)); - this.tableLayoutPanel1.Controls.Add(this.variantComboBox, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.variantLabel, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.colorSliderLabel, 0, 3); this.tableLayoutPanel1.Controls.Add(this.originalPictureBox, 2, 0); this.tableLayoutPanel1.Controls.Add(this.selectTilePictureBox, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 7); + this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 8); this.tableLayoutPanel1.Controls.Add(this.tileNameLabel, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.setColorButton, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.animationButton, 1, 7); - this.tableLayoutPanel1.Controls.Add(this.clearColorButton, 1, 4); - this.tableLayoutPanel1.Controls.Add(this.colorSlider, 1, 3); - this.tableLayoutPanel1.Controls.Add(this.metroButton1, 0, 6); + this.tableLayoutPanel1.Controls.Add(this.setColorButton, 0, 5); + this.tableLayoutPanel1.Controls.Add(this.animationButton, 1, 8); + this.tableLayoutPanel1.Controls.Add(this.clearColorButton, 1, 5); + this.tableLayoutPanel1.Controls.Add(this.extractButton, 0, 7); + this.tableLayoutPanel1.Controls.Add(this.colorSlider, 1, 4); + this.tableLayoutPanel1.Controls.Add(this.colorSliderLabel, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.variantComboBox, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.variantLabel, 0, 2); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(20, 84); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 8; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 36.3643F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 36.3643F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.543719F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowCount = 6; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.68709F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.14977F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.14977F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.833951F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); this.tableLayoutPanel1.Size = new System.Drawing.Size(590, 565); this.tableLayoutPanel1.TabIndex = 17; // + // variantComboBox + // + this.variantComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.variantComboBox, 2); + this.variantComboBox.Enabled = false; + this.variantComboBox.FormattingEnabled = true; + this.variantComboBox.ItemHeight = 23; + this.variantComboBox.Location = new System.Drawing.Point(3, 291); + this.variantComboBox.Name = "variantComboBox"; + this.variantComboBox.Size = new System.Drawing.Size(208, 29); + this.variantComboBox.TabIndex = 17; + this.variantComboBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.variantComboBox.UseSelectable = true; + this.variantComboBox.SelectedIndexChanged += new System.EventHandler(this.variantComboBox_SelectedIndexChanged); + // // colorSliderLabel // this.colorSliderLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.colorSliderLabel.AutoSize = true; this.colorSliderLabel.BackColor = System.Drawing.Color.Transparent; - this.colorSliderLabel.Location = new System.Drawing.Point(3, 246); + this.colorSliderLabel.Location = new System.Drawing.Point(3, 350); this.colorSliderLabel.Name = "colorSliderLabel"; - this.colorSliderLabel.Size = new System.Drawing.Size(55, 198); + this.colorSliderLabel.Size = new System.Drawing.Size(55, 88); this.colorSliderLabel.TabIndex = 19; this.colorSliderLabel.Text = "Color Range:"; this.colorSliderLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -181,6 +193,110 @@ this.colorSliderLabel.Visible = false; this.colorSliderLabel.WrapToLine = true; // + // replaceButton + // + this.replaceButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.replaceButton.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.replaceButton, 2); + this.replaceButton.Location = new System.Drawing.Point(3, 519); + this.replaceButton.Name = "replaceButton"; + this.replaceButton.Size = new System.Drawing.Size(208, 20); + this.replaceButton.TabIndex = 14; + this.replaceButton.Text = "Replace Tile on Atlas"; + this.replaceButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.replaceButton.UseSelectable = true; + this.replaceButton.Click += new System.EventHandler(this.replaceButton_Click); + // + // tileNameLabel + // + this.tileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tileNameLabel.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2); + this.tileNameLabel.Location = new System.Drawing.Point(3, 217); + this.tileNameLabel.Name = "tileNameLabel"; + this.tileNameLabel.Size = new System.Drawing.Size(208, 19); + this.tileNameLabel.TabIndex = 19; + this.tileNameLabel.Text = "TileName"; + this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.tileNameLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + this.tileNameLabel.WrapToLine = true; + // + // setColorButton + // + this.setColorButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.setColorButton, 2); + this.setColorButton.Location = new System.Drawing.Point(3, 444); + this.setColorButton.Name = "setColorButton"; + this.setColorButton.Size = new System.Drawing.Size(208, 17); + this.setColorButton.TabIndex = 25; + this.setColorButton.Text = "Set Custom Colour"; + this.setColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.setColorButton.UseSelectable = true; + this.setColorButton.Click += new System.EventHandler(this.setColorButton_Click); + // + // animationButton + // + this.animationButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.animationButton.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.animationButton, 2); + this.animationButton.Location = new System.Drawing.Point(3, 545); + this.animationButton.Name = "animationButton"; + this.animationButton.Size = new System.Drawing.Size(208, 17); + this.animationButton.TabIndex = 16; + this.animationButton.Text = "Animation"; + this.animationButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.animationButton.UseSelectable = true; + this.animationButton.Click += new System.EventHandler(this.animationButton_Click); + // + // clearColorButton + // + this.clearColorButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.clearColorButton.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.clearColorButton, 2); + this.clearColorButton.Location = new System.Drawing.Point(3, 467); + this.clearColorButton.Name = "clearColorButton"; + this.clearColorButton.Size = new System.Drawing.Size(208, 20); + this.clearColorButton.TabIndex = 24; + this.clearColorButton.Text = "Clear Custom Colour"; + this.clearColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.clearColorButton.UseSelectable = true; + this.clearColorButton.Click += new System.EventHandler(this.clearColorButton_Click); + // + // colorSlider + // + this.colorSlider.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.colorSlider.BackColor = System.Drawing.Color.Transparent; + this.colorSlider.Location = new System.Drawing.Point(64, 353); + this.colorSlider.Maximum = 255; + this.colorSlider.Name = "colorSlider"; + this.colorSlider.Size = new System.Drawing.Size(147, 82); + this.colorSlider.TabIndex = 26; + this.colorSlider.Text = "metroTrackBar1"; + this.colorSlider.Theme = MetroFramework.MetroThemeStyle.Dark; + this.colorSlider.Value = 0; + this.colorSlider.Visible = false; + this.colorSlider.ValueChanged += new System.EventHandler(this.colorSlider_ValueChanged); + // + // extractButton + // + this.extractButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.extractButton.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.extractButton, 2); + this.extractButton.Location = new System.Drawing.Point(3, 493); + this.extractButton.Name = "extractButton"; + this.extractButton.Size = new System.Drawing.Size(208, 20); + this.extractButton.TabIndex = 27; + this.extractButton.Text = "Extract Tile from Atlas"; + this.extractButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.extractButton.UseSelectable = true; + this.extractButton.Click += new System.EventHandler(this.extractTileToolStripMenuItem_Click); + // // originalPictureBox // this.originalPictureBox.BackColor = System.Drawing.Color.Transparent; @@ -188,8 +304,8 @@ this.originalPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.originalPictureBox.Location = new System.Drawing.Point(217, 3); this.originalPictureBox.Name = "originalPictureBox"; - this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 8); - this.originalPictureBox.Size = new System.Drawing.Size(370, 534); + this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 9); + this.originalPictureBox.Size = new System.Drawing.Size(370, 536); this.originalPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.originalPictureBox.TabIndex = 4; this.originalPictureBox.TabStop = false; @@ -208,124 +324,12 @@ this.selectTilePictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.selectTilePictureBox.Location = new System.Drawing.Point(3, 3); this.selectTilePictureBox.Name = "selectTilePictureBox"; - this.selectTilePictureBox.Size = new System.Drawing.Size(208, 192); + this.selectTilePictureBox.Size = new System.Drawing.Size(208, 204); this.selectTilePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.selectTilePictureBox.TabIndex = 0; this.selectTilePictureBox.TabStop = false; this.selectTilePictureBox.UseBlendColor = true; // - // replaceButton - // - this.replaceButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.replaceButton.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.replaceButton, 2); - this.replaceButton.Location = new System.Drawing.Point(3, 519); - this.replaceButton.Name = "replaceButton"; - this.replaceButton.Size = new System.Drawing.Size(208, 18); - this.replaceButton.TabIndex = 14; - this.replaceButton.Text = "Replace Tile on Atlas"; - this.replaceButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.replaceButton.UseSelectable = true; - this.replaceButton.Click += new System.EventHandler(this.replaceButton_Click); - // - // tileNameLabel - // - this.tileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tileNameLabel.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2); - this.tileNameLabel.Location = new System.Drawing.Point(3, 203); - this.tileNameLabel.Name = "tileNameLabel"; - this.tileNameLabel.Size = new System.Drawing.Size(208, 43); - this.tileNameLabel.TabIndex = 19; - this.tileNameLabel.Text = "TileName"; - this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.tileNameLabel.Theme = MetroFramework.MetroThemeStyle.Dark; - this.tileNameLabel.WrapToLine = true; - // - // variantComboBox - // - this.variantComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.SetColumnSpan(this.variantComboBox, 2); - this.variantComboBox.Enabled = false; - this.variantComboBox.FormattingEnabled = true; - this.variantComboBox.ItemHeight = 23; - this.variantComboBox.Location = new System.Drawing.Point(3, 287); - this.variantComboBox.Name = "variantComboBox"; - this.variantComboBox.Size = new System.Drawing.Size(208, 29); - this.variantComboBox.TabIndex = 17; - this.variantComboBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.variantComboBox.UseSelectable = true; - this.variantComboBox.SelectedIndexChanged += new System.EventHandler(this.variantComboBox_SelectedIndexChanged); - // - // setColorButton - // - this.setColorButton.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.tableLayoutPanel1.SetColumnSpan(this.setColorButton, 2); - this.setColorButton.Location = new System.Drawing.Point(3, 447); - this.setColorButton.Name = "setColorButton"; - this.setColorButton.Size = new System.Drawing.Size(208, 18); - this.setColorButton.TabIndex = 25; - this.setColorButton.Text = "Set Custom Colour"; - this.setColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.setColorButton.UseSelectable = true; - this.setColorButton.Click += new System.EventHandler(this.setColorButton_Click); - // - // animationButton - // - this.animationButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.animationButton.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.animationButton, 2); - this.animationButton.Location = new System.Drawing.Point(3, 543); - this.animationButton.Name = "animationButton"; - this.animationButton.Size = new System.Drawing.Size(208, 19); - this.animationButton.TabIndex = 16; - this.animationButton.Text = "Animation"; - this.animationButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.animationButton.UseSelectable = true; - this.animationButton.Click += new System.EventHandler(this.animationButton_Click); - // - // clearColorButton - // - this.clearColorButton.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.tableLayoutPanel1.SetColumnSpan(this.clearColorButton, 2); - this.clearColorButton.Location = new System.Drawing.Point(3, 471); - this.clearColorButton.Name = "clearColorButton"; - this.clearColorButton.Size = new System.Drawing.Size(208, 18); - this.clearColorButton.TabIndex = 24; - this.clearColorButton.Text = "Clear Custom Colour"; - this.clearColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.clearColorButton.UseSelectable = true; - this.clearColorButton.Click += new System.EventHandler(this.clearColorButton_Click); - // - // colorSlider - // - this.colorSlider.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); - this.colorSlider.BackColor = System.Drawing.Color.Transparent; - this.colorSlider.Location = new System.Drawing.Point(64, 249); - this.colorSlider.Maximum = 255; - this.colorSlider.Name = "colorSlider"; - this.colorSlider.Size = new System.Drawing.Size(147, 192); - this.colorSlider.TabIndex = 26; - this.colorSlider.Text = "metroTrackBar1"; - this.colorSlider.Theme = MetroFramework.MetroThemeStyle.Dark; - this.colorSlider.Value = 0; - this.colorSlider.Visible = false; - this.colorSlider.ValueChanged += new System.EventHandler(this.colorSlider_ValueChanged); - // - // metroButton1 - // - this.tableLayoutPanel1.SetColumnSpan(this.metroButton1, 2); - this.metroButton1.Location = new System.Drawing.Point(3, 495); - this.metroButton1.Name = "metroButton1"; - this.metroButton1.Size = new System.Drawing.Size(208, 18); - this.metroButton1.TabIndex = 27; - this.metroButton1.Text = "Extract Tile from Atlas"; - this.metroButton1.Theme = MetroFramework.MetroThemeStyle.Dark; - this.metroButton1.UseSelectable = true; - // // TextureAtlasEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -373,6 +377,6 @@ private MetroFramework.Controls.MetroButton setColorButton; private MetroFramework.Controls.MetroTrackBar colorSlider; private MetroFramework.Controls.MetroLabel colorSliderLabel; - private MetroFramework.Controls.MetroButton metroButton1; + private MetroFramework.Controls.MetroButton extractButton; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 81334a5a..6d64dd4b 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -208,7 +208,6 @@ namespace PckStudio.Forms.Editor bool hasAnimation = _pckFile.TryGetValue($"res/textures/{_atlasType}/{dataTile.Tile.InternalName}.png", PckFileType.TextureFile, out var animationFile); animationButton.Text = hasAnimation ? "Edit Animation" : "Create Animation"; - replaceButton.Enabled = !hasAnimation; if (playAnimationsToolStripMenuItem.Checked && hasAnimation && @@ -433,6 +432,8 @@ namespace PckStudio.Forms.Editor if (e.Button != MouseButtons.Left) return; + ActiveControl = null; + int index = GetSelectedImageIndex( originalPictureBox.Size, _workingTexture.Size, From 7e88a06ddc83133ca93d17b6a095512e0cd13fa7 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Thu, 14 Mar 2024 23:56:20 -0400 Subject: [PATCH 15/29] Updated TextureAtlasEditor -Added support for Explosion atlas -Added variants for spawn eggs --- .../Editor/TextureAtlasEditor.Designer.cs | 153 ++++---- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 3 +- PCK-Studio/Internal/Json/Tiles.cs | 113 ++---- PCK-Studio/MainForm.cs | 3 +- PCK-Studio/PckStudio.csproj | 1 + PCK-Studio/Properties/Resources.Designer.cs | 10 + PCK-Studio/Properties/Resources.resx | 3 + PCK-Studio/Resources/atlases/explosion.png | Bin 0 -> 1614 bytes PCK-Studio/Resources/atlases/tileData.json | 326 +++++++++++++++++- 9 files changed, 444 insertions(+), 168 deletions(-) create mode 100644 PCK-Studio/Resources/atlases/explosion.png diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index 4476b332..d26bce6c 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -37,17 +37,17 @@ this.applyColorMaskToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.playAnimationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.variantComboBox = new MetroFramework.Controls.MetroComboBox(); - this.colorSliderLabel = new MetroFramework.Controls.MetroLabel(); + this.originalPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); + this.selectTilePictureBox = new PckStudio.ToolboxItems.AnimationPictureBox(); this.replaceButton = new MetroFramework.Controls.MetroButton(); this.tileNameLabel = new MetroFramework.Controls.MetroLabel(); this.setColorButton = new MetroFramework.Controls.MetroButton(); this.animationButton = new MetroFramework.Controls.MetroButton(); this.clearColorButton = new MetroFramework.Controls.MetroButton(); - this.colorSlider = new MetroFramework.Controls.MetroTrackBar(); this.extractButton = new MetroFramework.Controls.MetroButton(); - this.originalPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); - this.selectTilePictureBox = new PckStudio.ToolboxItems.AnimationPictureBox(); + this.colorSlider = new MetroFramework.Controls.MetroTrackBar(); + this.colorSliderLabel = new MetroFramework.Controls.MetroLabel(); + this.variantComboBox = new MetroFramework.Controls.MetroComboBox(); this.menuStrip1.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.originalPictureBox)).BeginInit(); @@ -92,7 +92,7 @@ // saveToolStripMenuItem // this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; - this.saveToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.saveToolStripMenuItem.Size = new System.Drawing.Size(98, 22); this.saveToolStripMenuItem.Text = "Save"; this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); // @@ -112,7 +112,7 @@ this.applyColorMaskToolStripMenuItem.CheckOnClick = true; this.applyColorMaskToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.applyColorMaskToolStripMenuItem.Name = "applyColorMaskToolStripMenuItem"; - this.applyColorMaskToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.applyColorMaskToolStripMenuItem.Size = new System.Drawing.Size(168, 22); this.applyColorMaskToolStripMenuItem.Text = "Apply Color Mask"; this.applyColorMaskToolStripMenuItem.CheckedChanged += new System.EventHandler(this.applyColorMaskToolStripMenuItem_CheckedChanged); // @@ -122,7 +122,7 @@ this.playAnimationsToolStripMenuItem.CheckOnClick = true; this.playAnimationsToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.playAnimationsToolStripMenuItem.Name = "playAnimationsToolStripMenuItem"; - this.playAnimationsToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.playAnimationsToolStripMenuItem.Size = new System.Drawing.Size(168, 22); this.playAnimationsToolStripMenuItem.Text = "Play Animations"; this.playAnimationsToolStripMenuItem.CheckedChanged += new System.EventHandler(this.playAnimationsToolStripMenuItem_CheckedChanged); // @@ -159,39 +159,42 @@ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.833951F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel1.Size = new System.Drawing.Size(590, 565); this.tableLayoutPanel1.TabIndex = 17; // - // variantComboBox + // originalPictureBox // - this.variantComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.SetColumnSpan(this.variantComboBox, 2); - this.variantComboBox.Enabled = false; - this.variantComboBox.FormattingEnabled = true; - this.variantComboBox.ItemHeight = 23; - this.variantComboBox.Location = new System.Drawing.Point(3, 291); - this.variantComboBox.Name = "variantComboBox"; - this.variantComboBox.Size = new System.Drawing.Size(208, 29); - this.variantComboBox.TabIndex = 17; - this.variantComboBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.variantComboBox.UseSelectable = true; - this.variantComboBox.SelectedIndexChanged += new System.EventHandler(this.variantComboBox_SelectedIndexChanged); + this.originalPictureBox.BackColor = System.Drawing.Color.Transparent; + this.originalPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.originalPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; + this.originalPictureBox.Location = new System.Drawing.Point(217, 3); + this.originalPictureBox.Name = "originalPictureBox"; + this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 9); + this.originalPictureBox.Size = new System.Drawing.Size(370, 536); + this.originalPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.originalPictureBox.TabIndex = 4; + this.originalPictureBox.TabStop = false; + this.originalPictureBox.MouseClick += new System.Windows.Forms.MouseEventHandler(this.originalPictureBox_MouseClick); // - // colorSliderLabel + // selectTilePictureBox // - this.colorSliderLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.selectTilePictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.colorSliderLabel.BackColor = System.Drawing.Color.Transparent; - this.colorSliderLabel.Location = new System.Drawing.Point(3, 350); - this.colorSliderLabel.Name = "colorSliderLabel"; - this.colorSliderLabel.Size = new System.Drawing.Size(55, 88); - this.colorSliderLabel.TabIndex = 19; - this.colorSliderLabel.Text = "Color Range:"; - this.colorSliderLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.colorSliderLabel.Theme = MetroFramework.MetroThemeStyle.Dark; - this.colorSliderLabel.Visible = false; - this.colorSliderLabel.WrapToLine = true; + this.selectTilePictureBox.BackColor = System.Drawing.Color.Transparent; + this.selectTilePictureBox.BlendColor = System.Drawing.Color.White; + this.selectTilePictureBox.BlendMode = PckStudio.Extensions.BlendMode.Multiply; + this.tableLayoutPanel1.SetColumnSpan(this.selectTilePictureBox, 2); + this.selectTilePictureBox.Image = null; + this.selectTilePictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; + this.selectTilePictureBox.Location = new System.Drawing.Point(3, 3); + this.selectTilePictureBox.Name = "selectTilePictureBox"; + this.selectTilePictureBox.Size = new System.Drawing.Size(208, 204); + this.selectTilePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.selectTilePictureBox.TabIndex = 0; + this.selectTilePictureBox.TabStop = false; + this.selectTilePictureBox.UseBlendColor = true; // // replaceButton // @@ -212,7 +215,6 @@ // this.tileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.tileNameLabel.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2); this.tileNameLabel.Location = new System.Drawing.Point(3, 217); this.tileNameLabel.Name = "tileNameLabel"; @@ -221,7 +223,6 @@ this.tileNameLabel.Text = "TileName"; this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.tileNameLabel.Theme = MetroFramework.MetroThemeStyle.Dark; - this.tileNameLabel.WrapToLine = true; // // setColorButton // @@ -267,21 +268,6 @@ this.clearColorButton.UseSelectable = true; this.clearColorButton.Click += new System.EventHandler(this.clearColorButton_Click); // - // colorSlider - // - this.colorSlider.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); - this.colorSlider.BackColor = System.Drawing.Color.Transparent; - this.colorSlider.Location = new System.Drawing.Point(64, 353); - this.colorSlider.Maximum = 255; - this.colorSlider.Name = "colorSlider"; - this.colorSlider.Size = new System.Drawing.Size(147, 82); - this.colorSlider.TabIndex = 26; - this.colorSlider.Text = "metroTrackBar1"; - this.colorSlider.Theme = MetroFramework.MetroThemeStyle.Dark; - this.colorSlider.Value = 0; - this.colorSlider.Visible = false; - this.colorSlider.ValueChanged += new System.EventHandler(this.colorSlider_ValueChanged); - // // extractButton // this.extractButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) @@ -297,38 +283,51 @@ this.extractButton.UseSelectable = true; this.extractButton.Click += new System.EventHandler(this.extractTileToolStripMenuItem_Click); // - // originalPictureBox + // colorSlider // - this.originalPictureBox.BackColor = System.Drawing.Color.Transparent; - this.originalPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.originalPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; - this.originalPictureBox.Location = new System.Drawing.Point(217, 3); - this.originalPictureBox.Name = "originalPictureBox"; - this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 9); - this.originalPictureBox.Size = new System.Drawing.Size(370, 536); - this.originalPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.originalPictureBox.TabIndex = 4; - this.originalPictureBox.TabStop = false; - this.originalPictureBox.MouseClick += new System.Windows.Forms.MouseEventHandler(this.originalPictureBox_MouseClick); + this.colorSlider.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.colorSlider.BackColor = System.Drawing.Color.Transparent; + this.colorSlider.Location = new System.Drawing.Point(64, 353); + this.colorSlider.Maximum = 255; + this.colorSlider.Name = "colorSlider"; + this.colorSlider.Size = new System.Drawing.Size(147, 82); + this.colorSlider.TabIndex = 26; + this.colorSlider.Text = "metroTrackBar1"; + this.colorSlider.Theme = MetroFramework.MetroThemeStyle.Dark; + this.colorSlider.Value = 0; + this.colorSlider.Visible = false; + this.colorSlider.ValueChanged += new System.EventHandler(this.colorSlider_ValueChanged); // - // selectTilePictureBox + // colorSliderLabel // - this.selectTilePictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.colorSliderLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.selectTilePictureBox.BackColor = System.Drawing.Color.Transparent; - this.selectTilePictureBox.BlendColor = System.Drawing.Color.White; - this.selectTilePictureBox.BlendMode = PckStudio.Extensions.BlendMode.Multiply; - this.tableLayoutPanel1.SetColumnSpan(this.selectTilePictureBox, 2); - this.selectTilePictureBox.Image = null; - this.selectTilePictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; - this.selectTilePictureBox.Location = new System.Drawing.Point(3, 3); - this.selectTilePictureBox.Name = "selectTilePictureBox"; - this.selectTilePictureBox.Size = new System.Drawing.Size(208, 204); - this.selectTilePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.selectTilePictureBox.TabIndex = 0; - this.selectTilePictureBox.TabStop = false; - this.selectTilePictureBox.UseBlendColor = true; + this.colorSliderLabel.BackColor = System.Drawing.Color.Transparent; + this.colorSliderLabel.Location = new System.Drawing.Point(3, 350); + this.colorSliderLabel.Name = "colorSliderLabel"; + this.colorSliderLabel.Size = new System.Drawing.Size(55, 88); + this.colorSliderLabel.TabIndex = 19; + this.colorSliderLabel.Text = "Color Range:"; + this.colorSliderLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.colorSliderLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + this.colorSliderLabel.Visible = false; + this.colorSliderLabel.WrapToLine = true; + // + // variantComboBox + // + this.variantComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.variantComboBox, 2); + this.variantComboBox.Enabled = false; + this.variantComboBox.FormattingEnabled = true; + this.variantComboBox.ItemHeight = 23; + this.variantComboBox.Location = new System.Drawing.Point(3, 291); + this.variantComboBox.Name = "variantComboBox"; + this.variantComboBox.Size = new System.Drawing.Size(208, 29); + this.variantComboBox.TabIndex = 17; + this.variantComboBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.variantComboBox.UseSelectable = true; + this.variantComboBox.SelectedIndexChanged += new System.EventHandler(this.variantComboBox_SelectedIndexChanged); // // TextureAtlasEditor // diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 6d64dd4b..d42d8e05 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -86,7 +86,7 @@ namespace PckStudio.Forms.Editor { value = value - _tiles.Count; } - SetImageDisplayed(value); + SetImageDisplayed(value); } } @@ -112,6 +112,7 @@ namespace PckStudio.Forms.Editor "additionalmapicons" => (Tiles.AdditionalMapIconTileInfos, "additional_map_icons"), "moon_phases" => (Tiles.MoonPhaseTileInfos, "moon_phases"), "xporb" => (Tiles.ExperienceOrbTileInfos, "experience_orbs"), + "explosion" => (Tiles.ExplosionTileInfos, "explosion"), _ => (null, null), }; diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index 68691564..9e5fe004 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -30,6 +30,9 @@ namespace PckStudio.Internal.Json [JsonProperty("experience_orbs")] public List ExperienceOrbs { get; set; } + + [JsonProperty("explosion")] + public List Explosion { get; set; } } internal static class Tiles @@ -44,6 +47,7 @@ namespace PckStudio.Internal.Json internal static List MapIconTileInfos => JsonTileData.MapIcons; internal static List AdditionalMapIconTileInfos => JsonTileData.AdditionalMapIcons; internal static List ExperienceOrbTileInfos => JsonTileData.ExperienceOrbs; + internal static List ExplosionTileInfos => JsonTileData.Explosion; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_sheet.SplitHorizontal(16).ToArray(); @@ -61,96 +65,39 @@ namespace PckStudio.Internal.Json public static Image[] AdditionalMapIconImages => _additionalMapIconImages ??= Resources.additional_map_icons_sheet.SplitHorizontal(4).ToArray(); private static Image[] _experienceOrbIconImages; - public static Image[] ExperienceOrbIconImages => _experienceOrbIconImages ??= Resources.experience_orbs_sheet.SplitHorizontal(4).ToArray(); + public static Image[] ExperienceOrbImages => _experienceOrbIconImages ??= Resources.experience_orbs_sheet.SplitHorizontal(4).ToArray(); - private static ImageList _itemImageList; - public static ImageList ItemImageList + private static Image[] _explosionImages; + public static Image[] ExplosionImages => _explosionImages ??= Resources.explosion_sheet.SplitHorizontal(4).ToArray(); + + private static ImageList GetImageList(Image[] images) { - get - { - if (_itemImageList is null) - { - _itemImageList = new ImageList(); - _itemImageList.ColorDepth = ColorDepth.Depth32Bit; - _itemImageList.Images.AddRange(ItemImages); - } - return _itemImageList; - } + ImageList _imageList = new ImageList(); + _imageList.ColorDepth = ColorDepth.Depth32Bit; + _imageList.Images.AddRange(images); + + return _imageList; } - private static ImageList _blockImageList; - public static ImageList BlockImageList - { - get - { - if (_blockImageList is null) - { - _blockImageList = new ImageList(); - _blockImageList.ColorDepth = ColorDepth.Depth32Bit; - _blockImageList.Images.AddRange(BlockImages); - } - return _blockImageList; - } - } + private static ImageList _itemImageList = GetImageList(ItemImages); + public static ImageList ItemImageList { get { return _itemImageList; } } - private static ImageList _moonPhaseImageList; - public static ImageList MoonPhaseImageList - { - get - { - if (_moonPhaseImageList is null) - { - _moonPhaseImageList = new ImageList(); - _moonPhaseImageList.ColorDepth = ColorDepth.Depth32Bit; - _moonPhaseImageList.Images.AddRange(MoonPhaseImages); - } - return _moonPhaseImageList; - } - } + private static ImageList _blockImageList = GetImageList(BlockImages); + public static ImageList BlockImageList { get { return _blockImageList; } } - private static ImageList _mapIconImageList; - public static ImageList MapIconImageList - { - get - { - if (_mapIconImageList is null) - { - _mapIconImageList = new ImageList(); - _mapIconImageList.ColorDepth = ColorDepth.Depth32Bit; - _mapIconImageList.Images.AddRange(MapIconImages); - } - return _mapIconImageList; - } - } + private static ImageList _moonPhaseImageList = GetImageList(MoonPhaseImages); + public static ImageList MoonPhaseImageList { get { return _moonPhaseImageList; } } - private static ImageList _additionalMapIconImageList; - public static ImageList AdditionalMapIconImageList - { - get - { - if (_additionalMapIconImageList is null) - { - _additionalMapIconImageList = new ImageList(); - _additionalMapIconImageList.ColorDepth = ColorDepth.Depth32Bit; - _additionalMapIconImageList.Images.AddRange(AdditionalMapIconImages); - } - return _additionalMapIconImageList; - } - } + private static ImageList _mapIconImageList = GetImageList(MapIconImages); + public static ImageList MapIconImageList { get { return _mapIconImageList; } } - private static ImageList _experienceOrbsImageList; - public static ImageList ExperienceOrbsImageList - { - get - { - if (_experienceOrbsImageList is null) - { - _experienceOrbsImageList = new ImageList(); - _experienceOrbsImageList.ColorDepth = ColorDepth.Depth32Bit; - _experienceOrbsImageList.Images.AddRange(ExperienceOrbIconImages); - } - return _experienceOrbsImageList; - } - } + private static ImageList _additionalMapIconImageList = GetImageList(AdditionalMapIconImages); + public static ImageList AdditionalMapIconImageList { get { return _additionalMapIconImageList; } } + + private static ImageList _experienceOrbsImageList = GetImageList(ExperienceOrbImages); + public static ImageList ExperienceOrbsImageList { get { return _experienceOrbsImageList; } } + + private static ImageList _explosionImageList = GetImageList(ExplosionImages); + public static ImageList ExplosionImageList { get { return _explosionImageList; } } } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 9439a115..a3673ffc 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -380,8 +380,9 @@ namespace PckStudio bool isMapIcons = file.Filename == "res/misc/mapicons.png"; bool isAdditionalMapIcons = file.Filename == "res/misc/additionalmapicons.png"; bool isXPOrbs = file.Filename == "res/item/xporb.png"; + bool isExplosion = file.Filename == "res/misc/explosion.png"; - if (isTerrainOrItems || isMoonPhases || isMapIcons || isAdditionalMapIcons || isXPOrbs) + if (isTerrainOrItems || isMoonPhases || isMapIcons || isAdditionalMapIcons || isXPOrbs || isExplosion) { var img = file.GetTexture(); diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 35eeeb95..0e36110f 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -681,6 +681,7 @@ + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index 9a8e5b0d..86389b38 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -304,6 +304,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap explosion_sheet { + get { + object obj = ResourceManager.GetObject("explosion_sheet", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index 9c8afa9a..3d40571f 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -340,4 +340,7 @@ ..\Resources\atlases\experience_orbs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\explosion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/explosion.png b/PCK-Studio/Resources/atlases/explosion.png new file mode 100644 index 0000000000000000000000000000000000000000..242d91154e21c2cf20caffd72a90b103627e0427 GIT binary patch literal 1614 zcmb7^e>l?#9LK+#h56N_`LSxuk2__YgcRB)zm=9B3oBZF9*MH8h4`A29W&${I!WE7 zT}({Q`E|y6*cl;O`B5yYm9Z6%bdl5jea}75Jf4(RBdueN+Gynk5 z_VIQP*mUrV)Kxd9@DN43X|PzrQ33!o7HY0hwruY3Wbe=v0MP0AA_&sb7u*a{RF4p9 zU{VbABIQCfK%{(oj%wrY5oAK&XX9YA*VcCV!c73!((mI=2x5dUR7#nXCR*8w^@vn* zOG23+#IN^(|H!&^_luHb?}>$Zzf4mT=zrh=Upu&tEdAKZ=W97V8GKZ{cvjN0PrD%= zhwFM!iB&=8&u9I9M*1V%$|0or8%`4VOF3dZhS<_chNo*$%CD$Wx4P<9d+@~Zhun_m-n;?tRnHTeb zk#J7~^xE3=JX{cS5ZwQr2H3aI>!1sXs}PBn;)sA@Pj(}Em2f*^lwofP5NsGTYNaH= zMd_;6SxiA|--aqf04q_GY&@Hzb2G85rvrZ&K~kof-mix?I04>YvmB=I z7kSHgtwb}D44>fDk?Hg{cD`Q5v|{)VwvvHPOgXbI{}YU^SgJt$VV(8nTMor5Y@OOK63^RiOgt5 zq#rR5ZJs1Or@C`+>J;E$3>iZ8b8t4D{g-A|PT?WSsoy_G1RelhsV=$rhQ0=xWYU>j zPGV@(8^iH~fgfBHJm+GlZObQe(wxhY*TGI3e(fo#))+~B&45 z+Ev4L9SCh)FT+4Qb&>b!#bZ>=eB&wDfew$ow^Rhbh<^&dZ=K3MZ_Sw1v7gI9&E%j< z-?J9?>8-H}K)z>RPO9DLiw?Kp9M6i4u|FjRwz#`=d(C?nrB8N)46IO^;P%=8TQZX@ z-YBTV-VxVsYhV(CTd3dvQ>t`F$gV?&CLOV0>~Ke?(jQtbM5acf`j2N22khH5|OK=)G5i4!em<3jj`XHe;~mH@9^b`ZuHAT zo>gr%zUtH+<@}M%Mrieh#?=e9zIN=hNhD3roOgY-`diU(u}rLX~DJ zK29sCuFpOh1*)dgK-k-0DDmCStEc;F=b{y++rbZB0*z_nAJ7Inxa-mh$=QXwdoWXr ziBU*p{6=p+7wH_(zR_tAjZ?)T9o9Ko1mx0?_5M-t{V|i{Y9+-Vi!q1&hl7&{td-!% zE9e0^LcDrhitOe-%DG#K<2-BFVMFgTsrmWl#BCMc#JHrxHbN3a?XXB*(S?s>#j#K+ zwbwJl?V%+`LVWaAKdz3aQ2vzsQ|3t*jj~Q!2pBuh$MBb{Z+NBP=T~~W6Q}n)K%E)P zO@An1Un%TqqM9ZYptGymWo<_J&GDW)jA_olNL5cZ46Fi)n7|N<`fj^&^Y#qC3HF;V Z$m;k?%+b7l&&}Tt_;~oc*Sno&{tX%$*XaNN literal 0 HcmV?d00001 diff --git a/PCK-Studio/Resources/atlases/tileData.json b/PCK-Studio/Resources/atlases/tileData.json index 3c4137b4..682363a3 100644 --- a/PCK-Studio/Resources/atlases/tileData.json +++ b/PCK-Studio/Resources/atlases/tileData.json @@ -3590,7 +3590,64 @@ }, { "internalName": "monsterPlacer", - "displayName": "Spawn Egg" + "displayName": "Spawn Egg", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Mob_Creeper_Colour1", + "variants": [ + "Mob_Creeper_Colour1", + "Mob_Skeleton_Colour1", + "Mob_Spider_Colour1", + "Mob_Zombie_Colour1", + "Mob_Slime_Colour1", + "Mob_Ghast_Colour1", + "Mob_PigZombie_Colour1", + "Mob_Enderman_Colour1", + "Mob_CaveSpider_Colour1", + "Mob_Silverfish_Colour1", + "Mob_Blaze_Colour1", + "Mob_LavaSlime_Colour1", + "Mob_Pig_Colour1", + "Mob_Sheep_Colour1", + "Mob_Cow_Colour1", + "Mob_Chicken_Colour1", + "Mob_Squid_Colour1", + "Mob_Wolf_Colour1", + "Mob_MushroomCow_Colour1", + "Mob_Ocelot_Colour1", + "Mob_Villager_Colour1", + "Mob_Bat_Colour1", + "Mob_Witch_Colour1", + "Mob_Horse_Colour1", + "Mob_Endermite_Color1", + "Mob_Guardian_Color1", + "Mob_Rabbit_Colour1", + "Mob_PolarBear_Colour1", + "Mob_Shulker_Colour1", + "Mob_Elder_Guardian_Colour1", + "Mob_Evocation_Illager_Colour1", + "Mob_Llama_Colour1", + "Mob_Donkey_Colour1", + "Mob_Skeleton_Horse_Colour1", + "Mob_Zombie_Horse_Colour1", + "Mob_Mule_Colour1", + "Mob_Stray_Colour1", + "Mob_Husk_Colour1", + "Mob_Vex_Colour1", + "Mob_Vindication_Illager_Colour1", + "Mob_Zombie_Villager_Colour1", + "Mob_Parrot_Colour1", + "Mob_Wither_Skeleton_Colour1", + "Mob_Turtle_Colour1", + "Mob_Tropical_Colour1", + "Mob_Cod_Colour1", + "Mob_Pufferfish_Colour1", + "Mob_Salmon_Colour1", + "Mob_Drowned_Colour1", + "Mob_Dolphin_Colour1", + "Mob_Phantom_Colour1" + ] + } }, { "internalName": "potion_splash", @@ -3654,7 +3711,64 @@ }, { "internalName": "monsterPlacer_overlay", - "displayName": "Spawn Egg (Overlay)" + "displayName": "Spawn Egg (Overlay)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Mob_Creeper_Colour2", + "variants": [ + "Mob_Creeper_Colour2", + "Mob_Skeleton_Colour2", + "Mob_Spider_Colour2", + "Mob_Zombie_Colour2", + "Mob_Slime_Colour2", + "Mob_Ghast_Colour2", + "Mob_PigZombie_Colour2", + "Mob_Enderman_Colour2", + "Mob_CaveSpider_Colour2", + "Mob_Silverfish_Colour2", + "Mob_Blaze_Colour2", + "Mob_LavaSlime_Colour2", + "Mob_Pig_Colour2", + "Mob_Sheep_Colour2", + "Mob_Cow_Colour2", + "Mob_Chicken_Colour2", + "Mob_Squid_Colour2", + "Mob_Wolf_Colour2", + "Mob_MushroomCow_Colour2", + "Mob_Ocelot_Colour2", + "Mob_Villager_Colour2", + "Mob_Bat_Colour2", + "Mob_Witch_Colour2", + "Mob_Horse_Colour2", + "Mob_Endermite_Color2", + "Mob_Guardian_Color2", + "Mob_Rabbit_Colour2", + "Mob_PolarBear_Colour2", + "Mob_Shulker_Colour2", + "Mob_Elder_Guardian_Colour2", + "Mob_Evocation_Illager_Colour2", + "Mob_Llama_Colour2", + "Mob_Donkey_Colour2", + "Mob_Skeleton_Horse_Colour2", + "Mob_Zombie_Horse_Colour2", + "Mob_Mule_Colour2", + "Mob_Stray_Colour2", + "Mob_Husk_Colour2", + "Mob_Vex_Colour2", + "Mob_Vindication_Illager_Colour2", + "Mob_Zombie_Villager_Colour2", + "Mob_Parrot_Colour2", + "Mob_Wither_Skeleton_Colour2", + "Mob_Turtle_Colour2", + "Mob_Tropical_Colour2", + "Mob_Cod_Colour2", + "Mob_Pufferfish_Colour2", + "Mob_Salmon_Colour2", + "Mob_Drowned_Colour2", + "Mob_Dolphin_Colour2", + "Mob_Phantom_Colour2" + ] + } }, { "internalName": "bed_overlay", @@ -3812,7 +3926,13 @@ }, { "internalName": "fireworks_charge_overlay", - "displayName": "Firework Star (Overlay)" + "displayName": "Firework Star (Overlay)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "", + "variants": [""] + } }, { "internalName": "netherquartz", @@ -4214,11 +4334,11 @@ }, { "internalName": "target_point", - "displayName": "Unused" + "displayName": "Target Point (Unused)" }, { "internalName": "player_off_map", - "displayName": "Unused" + "displayName": "Player (Off Map) (Unused)" }, { "internalName": "frame", @@ -4246,7 +4366,7 @@ }, { "internalName": "player_off_limits", - "displayName": "Unused" + "displayName": "Player (Off Limits) (Unused)" }, { "internalName": "mansion", @@ -4443,5 +4563,199 @@ "internalName": "", "displayName": "" } + ], + "explosion": [ + { + "internalName": "explosion_0", + "displayName": "Explosion (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_1", + "displayName": "Explosion (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_2", + "displayName": "Explosion (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_3", + "displayName": "Explosion (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_4", + "displayName": "Explosion (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_5", + "displayName": "Explosion (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_6", + "displayName": "Explosion (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_7", + "displayName": "Explosion (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_8", + "displayName": "Explosion (Stage 9)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_9", + "displayName": "Explosion (Stage 10)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_10", + "displayName": "Explosion (Stage 11)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_11", + "displayName": "Explosion (Stage 12)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_12", + "displayName": "Explosion (Stage 13)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_13", + "displayName": "Explosion (Stage 14)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_14", + "displayName": "Explosion (Stage 15)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_15", + "displayName": "Explosion (Stage 16)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + } ] } From e51bedba4f1d6d1e78d1122bfdb64f2d4336b5ee Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 02:00:56 -0400 Subject: [PATCH 16/29] Added width and height properties for tiles --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 44 ++++++++++++------- PCK-Studio/Internal/Json/TileInfo.cs | 6 +++ PCK-Studio/Resources/atlases/tileData.json | 6 ++- 3 files changed, 39 insertions(+), 17 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index d42d8e05..f0b738ca 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -117,12 +117,31 @@ namespace PckStudio.Forms.Editor }; // there's got to be a better way to get around this clone exception - originalPictureBox.Image = (Image)((Bitmap)atlas).Clone(new Rectangle(new Point(0, 0), new Size(atlas.Width - 1, atlas.Height - 1)), PixelFormat.Format32bppArgb); + originalPictureBox.Image = atlas.GetArea(new Rectangle(0, 0, atlas.Width, atlas.Height)); var images = atlas.Split(_areaSize, _imageLayout); var tiles = images.enumerate().Select( - p => new AtlasTile(p.index, GetAtlasArea(p.index, _rowCount, _columnCount, _areaSize, _imageLayout), tileInfos.IndexInRange(p.index) ? tileInfos[p.index] : null, p.value) + p => new AtlasTile( + p.index, + + GetAtlasArea(p.index, + tileInfos.IndexInRange(p.index) + ? tileInfos[p.index].Width : 1, + tileInfos.IndexInRange(p.index) + ? tileInfos[p.index].Height : 1, _rowCount, _columnCount, _areaSize, _imageLayout), + + tileInfos.IndexInRange(p.index) + ? tileInfos[p.index] : null, + + // get full area for tiles that are not 1x1 tiles + tileInfos.IndexInRange(p.index) + ? atlas.GetArea( + new Rectangle( + GetSelectedPoint(p.index, _rowCount, _columnCount, _imageLayout).X * _areaSize.Width, + GetSelectedPoint(p.index, _rowCount, _columnCount, _imageLayout).Y * _areaSize.Height, + tileInfos[p.index].Width * _areaSize.Width, tileInfos[p.index].Height * _areaSize.Height)) + : p.value) ); _tiles = new List(tiles); @@ -158,8 +177,8 @@ namespace PckStudio.Forms.Editor g.DrawRectangle( Pens.White, new Rectangle(_selectedTile.Area.X, _selectedTile.Area.Y, - _selectedTile.Area.Width, - _selectedTile.Area.Height)); + _selectedTile.Area.Width / _selectedTile.Tile.Width, + _selectedTile.Area.Height / _selectedTile.Tile.Height)); } originalPictureBox.Invalidate(); @@ -187,13 +206,6 @@ namespace PckStudio.Forms.Editor updatePictureBoxDisplay(); - if (string.IsNullOrEmpty(dataTile.Tile.InternalName)) - { - selectTilePictureBox.Image = dataTile.Texture; - tileNameLabel.Text = "Unused"; - return; - } - if (string.IsNullOrEmpty(dataTile.Tile.DisplayName)) { dataTile = _tiles.Find(t => t.Tile.InternalName == _selectedTile.Tile.InternalName); @@ -326,11 +338,11 @@ namespace PckStudio.Forms.Editor }; } - private static Rectangle GetAtlasArea(int index, int rowCount, int columnCount, Size size, ImageLayoutDirection imageLayout) + private static Rectangle GetAtlasArea(int index, int width, int height, int rowCount, int columnCount, Size size, ImageLayoutDirection imageLayout) { var p = GetSelectedPoint(index, rowCount, columnCount, imageLayout); var ap = new Point(p.X * size.Width, p.Y * size.Height); - return new Rectangle(ap, size); + return new Rectangle(ap, new Size(size.Width * width, size.Height * height)); } private static Point GetSelectedPoint(int index, int rowCount, int columnCount, ImageLayoutDirection imageLayout) @@ -353,8 +365,8 @@ namespace PckStudio.Forms.Editor using (var g = Graphics.FromImage(_workingTexture)) { g.ApplyConfig(graphicsConfig); - g.Fill(_selectedTile.Area, Color.Transparent); - g.DrawImage(texture, _selectedTile.Area); + g.Fill(dataTile.Area, Color.Transparent); + g.DrawImage(texture, dataTile.Area); } _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, texture); @@ -498,7 +510,7 @@ namespace PckStudio.Forms.Editor }; if (saveFileDialog.ShowDialog() == DialogResult.OK) { - selectTilePictureBox.Image.Save(saveFileDialog.FileName, ImageFormat.Png); + dataTile.Texture.Save(saveFileDialog.FileName, ImageFormat.Png); } } diff --git a/PCK-Studio/Internal/Json/TileInfo.cs b/PCK-Studio/Internal/Json/TileInfo.cs index 1ff8b0f0..54e27d2f 100644 --- a/PCK-Studio/Internal/Json/TileInfo.cs +++ b/PCK-Studio/Internal/Json/TileInfo.cs @@ -15,6 +15,12 @@ namespace PckStudio.Internal.Json [JsonProperty("internalName")] public string InternalName { get; set; } + [JsonProperty("width")] + public int Width { get; set; } = 1; + + [JsonProperty("height")] + public int Height { get; set; } = 1; + [JsonProperty("hasColourEntry", DefaultValueHandling = DefaultValueHandling.Populate)] public bool HasColourEntry { get; set; } diff --git a/PCK-Studio/Resources/atlases/tileData.json b/PCK-Studio/Resources/atlases/tileData.json index 682363a3..d4a11b76 100644 --- a/PCK-Studio/Resources/atlases/tileData.json +++ b/PCK-Studio/Resources/atlases/tileData.json @@ -1035,6 +1035,8 @@ "internalName": "water_flow", "displayName": "Flowing Water", "hasColourEntry": true, + "width": 2, + "height": 2, "colourEntry": { "isWaterColour": true, "defaultName": "Water_Plains", @@ -1208,7 +1210,9 @@ }, { "internalName": "lava_flow", - "displayName": "Flowing Lava" + "displayName": "Flowing Lava", + "width": 2, + "height": 2 }, { "internalName": "lava_flow", From 3bbfa7a9b40261bfac88653ccb97a70f3d84bb6d Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 14:03:03 -0400 Subject: [PATCH 17/29] Non 1x1 tiles now extract and replace correctly --- .../Editor/TextureAtlasEditor.Designer.cs | 4 +- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 37 +++++++++++-------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index d26bce6c..a76914f5 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -165,8 +165,10 @@ // // originalPictureBox // + this.originalPictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.originalPictureBox.BackColor = System.Drawing.Color.Transparent; - this.originalPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; this.originalPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.originalPictureBox.Location = new System.Drawing.Point(217, 3); this.originalPictureBox.Name = "originalPictureBox"; diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index f0b738ca..d8aa8c5c 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -116,7 +116,6 @@ namespace PckStudio.Forms.Editor _ => (null, null), }; - // there's got to be a better way to get around this clone exception originalPictureBox.Image = atlas.GetArea(new Rectangle(0, 0, atlas.Width, atlas.Height)); var images = atlas.Split(_areaSize, _imageLayout); @@ -125,22 +124,28 @@ namespace PckStudio.Forms.Editor p => new AtlasTile( p.index, - GetAtlasArea(p.index, + GetAtlasArea( + p.index, tileInfos.IndexInRange(p.index) ? tileInfos[p.index].Width : 1, tileInfos.IndexInRange(p.index) - ? tileInfos[p.index].Height : 1, _rowCount, _columnCount, _areaSize, _imageLayout), + ? tileInfos[p.index].Height : 1, + _rowCount, + _columnCount, + _areaSize, + _imageLayout), - tileInfos.IndexInRange(p.index) + tileInfos.IndexInRange(p.index) ? tileInfos[p.index] : null, - // get full area for tiles that are not 1x1 tiles + // get texture for tiles that are not 1x1 tiles tileInfos.IndexInRange(p.index) ? atlas.GetArea( new Rectangle( GetSelectedPoint(p.index, _rowCount, _columnCount, _imageLayout).X * _areaSize.Width, GetSelectedPoint(p.index, _rowCount, _columnCount, _imageLayout).Y * _areaSize.Height, - tileInfos[p.index].Width * _areaSize.Width, tileInfos[p.index].Height * _areaSize.Height)) + tileInfos[p.index].Width * _areaSize.Width, + tileInfos[p.index].Height * _areaSize.Height)) : p.value) ); _tiles = new List(tiles); @@ -162,7 +167,7 @@ namespace PckStudio.Forms.Editor return false; } - private void updatePictureBoxDisplay() + private void UpdateAtlasDisplay() { var graphicsConfig = new GraphicsConfig() { @@ -174,11 +179,13 @@ namespace PckStudio.Forms.Editor g.ApplyConfig(graphicsConfig); g.Clear(Color.Transparent); g.DrawImage(_workingTexture, new Point(0, 0)); - g.DrawRectangle( - Pens.White, - new Rectangle(_selectedTile.Area.X, _selectedTile.Area.Y, - _selectedTile.Area.Width / _selectedTile.Tile.Width, - _selectedTile.Area.Height / _selectedTile.Tile.Height)); + + SolidBrush brush = new SolidBrush(Color.FromArgb(127, 255, 255, 255)); + + var rect = new Rectangle(_selectedTile.Area.X, _selectedTile.Area.Y, + _areaSize.Width, _areaSize.Height); + + g.FillRectangle(brush, rect); } originalPictureBox.Invalidate(); @@ -204,9 +211,9 @@ namespace PckStudio.Forms.Editor dataTile = _selectedTile; - updatePictureBoxDisplay(); + UpdateAtlasDisplay(); - if (string.IsNullOrEmpty(dataTile.Tile.DisplayName)) + if (string.IsNullOrEmpty(dataTile.Tile.DisplayName) && !string.IsNullOrEmpty(dataTile.Tile.InternalName)) { dataTile = _tiles.Find(t => t.Tile.InternalName == _selectedTile.Tile.InternalName); } @@ -372,7 +379,7 @@ namespace PckStudio.Forms.Editor _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, texture); selectTilePictureBox.Image = texture; - updatePictureBoxDisplay(); + UpdateAtlasDisplay(); } private Color GetBlendColor() From 557882f487e96e0b7240aaff6007251719afec1b Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 15:44:27 -0400 Subject: [PATCH 18/29] Added Particle support for Atlas Editor --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 1 + PCK-Studio/Internal/Json/Tiles.cs | 16 +- PCK-Studio/MainForm.cs | 11 +- PCK-Studio/PckStudio.csproj | 1 + PCK-Studio/Properties/Resources.Designer.cs | 10 + PCK-Studio/Properties/Resources.resx | 3 + PCK-Studio/Resources/atlases/particles.png | Bin 0 -> 21971 bytes PCK-Studio/Resources/atlases/tileData.json | 1085 +++++++++++++++++ 8 files changed, 1121 insertions(+), 6 deletions(-) create mode 100644 PCK-Studio/Resources/atlases/particles.png diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index d8aa8c5c..874fd5e6 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -108,6 +108,7 @@ namespace PckStudio.Forms.Editor { "terrain" => (Tiles.BlockTileInfos, "blocks"), "items" => (Tiles.ItemTileInfos, "items"), + "particles" => (Tiles.ParticleTileInfos, "particles"), "mapicons" => (Tiles.MapIconTileInfos, "map_icons"), "additionalmapicons" => (Tiles.AdditionalMapIconTileInfos, "additional_map_icons"), "moon_phases" => (Tiles.MoonPhaseTileInfos, "moon_phases"), diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index 9e5fe004..f2b6303c 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -18,7 +18,10 @@ namespace PckStudio.Internal.Json [JsonProperty("items")] public List Items { get; set; } - + + [JsonProperty("particles")] + public List Particles { get; set; } + [JsonProperty("moon_phases")] public List MoonPhases { get; set; } @@ -43,6 +46,7 @@ namespace PckStudio.Internal.Json internal static List ItemTileInfos => JsonTileData.Items; internal static List BlockTileInfos => JsonTileData.Blocks; + internal static List ParticleTileInfos => JsonTileData.Particles; internal static List MoonPhaseTileInfos => JsonTileData.MoonPhases; internal static List MapIconTileInfos => JsonTileData.MapIcons; internal static List AdditionalMapIconTileInfos => JsonTileData.AdditionalMapIcons; @@ -55,6 +59,9 @@ namespace PckStudio.Internal.Json private static Image[] _blockImages; public static Image[] BlockImages => _blockImages ??= Resources.terrain_sheet.SplitHorizontal(16).ToArray(); + private static Image[] _particleImages; + public static Image[] ParticleImages => _particleImages ??= Resources.particles_sheet.SplitHorizontal(16).ToArray(); + private static Image[] _moonPhaseImages; public static Image[] MoonPhaseImages => _moonPhaseImages ??= Resources.moon_phases_sheet.SplitHorizontal(4).ToArray(); @@ -79,11 +86,14 @@ namespace PckStudio.Internal.Json return _imageList; } + private static ImageList _blockImageList = GetImageList(BlockImages); + public static ImageList BlockImageList { get { return _blockImageList; } } + private static ImageList _itemImageList = GetImageList(ItemImages); public static ImageList ItemImageList { get { return _itemImageList; } } - private static ImageList _blockImageList = GetImageList(BlockImages); - public static ImageList BlockImageList { get { return _blockImageList; } } + private static ImageList _particleImageList = GetImageList(ParticleImages); + public static ImageList ParticleImageList { get { return _particleImageList; } } private static ImageList _moonPhaseImageList = GetImageList(MoonPhaseImages); public static ImageList MoonPhaseImageList { get { return _moonPhaseImageList; } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index a3673ffc..2ed0a7f6 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -375,21 +375,26 @@ namespace PckStudio return; } - bool isTerrainOrItems = file.Filename == "res/terrain.png" || file.Filename == "res/items.png"; + bool isTerrain = file.Filename == "res/terrain.png"; + bool isItems = file.Filename == "res/items.png"; + bool isParticles = file.Filename == "res/particles.png"; bool isMoonPhases = file.Filename == "res/terrain/moon_phases.png"; bool isMapIcons = file.Filename == "res/misc/mapicons.png"; bool isAdditionalMapIcons = file.Filename == "res/misc/additionalmapicons.png"; bool isXPOrbs = file.Filename == "res/item/xporb.png"; bool isExplosion = file.Filename == "res/misc/explosion.png"; - if (isTerrainOrItems || isMoonPhases || isMapIcons || isAdditionalMapIcons || isXPOrbs || isExplosion) + if ( + isTerrain || isItems || isParticles || isMoonPhases || + isMapIcons || isAdditionalMapIcons || isXPOrbs || isExplosion + ) { var img = file.GetTexture(); // all of the other atlases so far use 4 var columnCount = 4; - if (isTerrainOrItems) columnCount = 16; + if (isTerrain || isItems || isParticles) columnCount = 16; var resolution = img.Width / columnCount; var size = new Size(resolution, resolution); diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 0e36110f..18d29ec5 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -684,6 +684,7 @@ + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index 86389b38..459ea406 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -504,6 +504,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap particles_sheet { + get { + object obj = ResourceManager.GetObject("particles_sheet", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index 3d40571f..a1ba9819 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -343,4 +343,7 @@ ..\Resources\atlases\explosion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\particles.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/particles.png b/PCK-Studio/Resources/atlases/particles.png new file mode 100644 index 0000000000000000000000000000000000000000..63041dcbf8da33dcea86f40ab8d9f74ca1b97387 GIT binary patch literal 21971 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 literal 0 HcmV?d00001 diff --git a/PCK-Studio/Resources/atlases/tileData.json b/PCK-Studio/Resources/atlases/tileData.json index d4a11b76..138f4be8 100644 --- a/PCK-Studio/Resources/atlases/tileData.json +++ b/PCK-Studio/Resources/atlases/tileData.json @@ -4761,5 +4761,1090 @@ ] } } + ], + "particles": [ + { + "internalName": "generic_0", + "displayName": "Generic (Stage 1)" + }, + { + "internalName": "generic_1", + "displayName": "Generic (Stage 2)" + }, + { + "internalName": "generic_2", + "displayName": "Generic (Stage 3)" + }, + { + "internalName": "generic_3", + "displayName": "Generic (Stage 4)" + }, + { + "internalName": "generic_4", + "displayName": "Generic (Stage 5)" + }, + { + "internalName": "generic_5", + "displayName": "Generic (Stage 6)" + }, + { + "internalName": "generic_6", + "displayName": "Generic (Stage 7)" + }, + { + "internalName": "generic_7", + "displayName": "Generic (Stage 8)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "unused_splash_0", + "displayName": "Splash (Stage 1) (Unused)" + }, + { + "internalName": "unused_splash_1", + "displayName": "Splash (Stage 2) (Unused)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "splash_0", + "displayName": "Splash (Stage 1)" + }, + { + "internalName": "splash_1", + "displayName": "Splash (Stage 2)" + }, + { + "internalName": "splash_2", + "displayName": "Splash (Stage 3)" + }, + { + "internalName": "splash_3", + "displayName": "Splash (Stage 4)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "classic_bubble", + "displayName": "Bubble (Unused)" + }, + { + "internalName": "bobber", + "displayName": "Fishing Bobber" + }, + { + "internalName": "bubble", + "displayName": "Bubble", + "hasColourEntry": true, + "colourEntry": { + "isWaterColour": true, + "defaultName": "Water_Plains", + "variants": [ + "Water_Ocean", + "Water_Plains", + "Water_Desert", + "Water_ExtremeHills", + "Water_Forest", + "Water_Taiga", + "Water_Swampland", + "Water_River", + "Water_Hell", + "Water_Sky", + "Water_FrozenOcean", + "Water_FrozenRiver", + "Water_IcePlains", + "Water_IceMountains", + "Water_MushroomIsland", + "Water_MushroomIslandShore", + "Water_Beach", + "Water_DesertHills", + "Water_ForestHills", + "Water_TaigaHills", + "Water_ExtremeHillsEdge", + "Water_Jungle", + "Water_JungleHills", + "Water_JungleEdge", + "Water_DeepOcean", + "Water_StoneBeach", + "Water_ColdBeach", + "Water_BirchForest", + "Water_BirchForestHills", + "Water_RoofedForest", + "Water_ColdTaiga", + "Water_ColdTaigaHills", + "Water_MegaTaiga", + "Water_MegaTaigaHills", + "Water_ExtremeHillsPlus", + "Water_Savanna", + "Water_SavannaPlateau", + "Water_Mesa", + "Water_MesaPlateauF", + "Water_MesaPlateau" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "Firework Flash", + "width": 4, + "height": 4 + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "flame", + "displayName": "Flame" + }, + { + "internalName": "lava", + "displayName": "Lava" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "note", + "displayName": "Noteblock Note" + }, + { + "internalName": "critical_hit", + "displayName": "Critical Hit" + }, + { + "internalName": "enchanted_hit", + "displayName": "Enchanted Hit" + }, + { + "internalName": "damage", + "displayName": "Damage" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "heart", + "displayName": "Heart" + }, + { + "internalName": "angry", + "displayName": "Angry" + }, + { + "internalName": "glint", + "displayName": "Glint" + }, + { + "internalName": "angry_villager", + "displayName": "Angry Villager (Unused)" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "water_0", + "displayName": "Water (Stage 1) (Unused)" + }, + { + "internalName": "water_1", + "displayName": "Water (Stage 2) (Unused)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "bubble_pop_0", + "displayName": "Bubble Pop (Stage 1) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_0", + "displayName": "" + }, + { + "internalName": "bubble_pop_1", + "displayName": "Bubble Pop (Stage 2) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_1", + "displayName": "" + }, + { + "internalName": "bubble_pop_2", + "displayName": "Bubble Pop (Stage 3) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_2", + "displayName": "" + }, + { + "internalName": "bubble_pop_3", + "displayName": "Bubble Pop (Stage 4) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_3", + "displayName": "" + }, + { + "internalName": "bubble_pop_4", + "displayName": "Bubble Pop (Stage 5) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_4", + "displayName": "" + }, + { + "internalName": "drip_hang", + "displayName": "Drip (Hang)" + }, + { + "internalName": "drip_fall", + "displayName": "Drip (Fall)" + }, + { + "internalName": "drip_land", + "displayName": "Drip (Land)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "bubble_pop_0", + "displayName": "" + }, + { + "internalName": "bubble_pop_0", + "displayName": "" + }, + { + "internalName": "bubble_pop_1", + "displayName": "" + }, + { + "internalName": "bubble_pop_1", + "displayName": "" + }, + { + "internalName": "bubble_pop_2", + "displayName": "" + }, + { + "internalName": "bubble_pop_2", + "displayName": "" + }, + { + "internalName": "bubble_pop_3", + "displayName": "" + }, + { + "internalName": "bubble_pop_3", + "displayName": "" + }, + { + "internalName": "bubble_pop_4", + "displayName": "" + }, + { + "internalName": "bubble_pop_4", + "displayName": "" + }, + { + "internalName": "effect_0", + "displayName": "Effect (Stage 1)" + }, + { + "internalName": "effect_1", + "displayName": "Effect (Stage 2)" + }, + { + "internalName": "effect_2", + "displayName": "Effect (Stage 3)" + }, + { + "internalName": "effect_3", + "displayName": "Effect (Stage 4)" + }, + { + "internalName": "effect_4", + "displayName": "Effect (Stage 5)" + }, + { + "internalName": "effect_5", + "displayName": "Effect (Stage 6)" + }, + { + "internalName": "effect_6", + "displayName": "Effect (Stage 7)" + }, + { + "internalName": "effect_7", + "displayName": "Effect (Stage 8)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "spell_0", + "displayName": "Splash Effect (Stage 1)" + }, + { + "internalName": "spell_1", + "displayName": "Splash Effect (Stage 2)" + }, + { + "internalName": "spell_2", + "displayName": "Splash Effect (Stage 3)" + }, + { + "internalName": "spell_3", + "displayName": "Splash Effect (Stage 4)" + }, + { + "internalName": "spell_4", + "displayName": "Splash Effect (Stage 5)" + }, + { + "internalName": "spell_5", + "displayName": "Splash Effect (Stage 6)" + }, + { + "internalName": "spell_6", + "displayName": "Splash Effect (Stage 7)" + }, + { + "internalName": "spell_7", + "displayName": "Splash Effect (Stage 8)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "spark_0", + "displayName": "Firework Spark (Stage 1)" + }, + { + "internalName": "spark_1", + "displayName": "Firework Spark (Stage 2)" + }, + { + "internalName": "spark_2", + "displayName": "Firework Spark (Stage 3)" + }, + { + "internalName": "spark_3", + "displayName": "Firework Spark (Stage 4)" + }, + { + "internalName": "spark_4", + "displayName": "Firework Spark (Stage 5)" + }, + { + "internalName": "spark_5", + "displayName": "Firework Spark (Stage 6)" + }, + { + "internalName": "spark_6", + "displayName": "Firework Spark (Stage 7)" + }, + { + "internalName": "spark_7", + "displayName": "Firework Spark (Stage 8)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "glitter_0", + "displayName": "Shulker/End Rod Glitter (Stage 1)" + }, + { + "internalName": "glitter_1", + "displayName": "Shulker/End Rod Glitter (Stage 2)" + }, + { + "internalName": "glitter_2", + "displayName": "Shulker/End Rod Glitter (Stage 3)" + }, + { + "internalName": "glitter_3", + "displayName": "Shulker/End Rod Glitter (Stage 4)" + }, + { + "internalName": "glitter_4", + "displayName": "Shulker/End Rod Glitter (Stage 5)" + }, + { + "internalName": "glitter_5", + "displayName": "Shulker/End Rod Glitter (Stage 6)" + }, + { + "internalName": "glitter_6", + "displayName": "Shulker/End Rod Glitter (Stage 7)" + }, + { + "internalName": "glitter_7", + "displayName": "Shulker/End Rod Glitter (Stage 8)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "camera_shoot_explosion_0", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 1)" + }, + { + "internalName": "camera_shoot_explosion_1", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 2)" + }, + { + "internalName": "camera_shoot_explosion_2", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 3)" + }, + { + "internalName": "camera_shoot_explosion_3", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 4)" + }, + { + "internalName": "camera_shoot_explosion_4", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 5)" + }, + { + "internalName": "camera_shoot_explosion_5", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 6)" + }, + { + "internalName": "camera_shoot_explosion_6", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 7)" + }, + { + "internalName": "camera_shoot_explosion_7", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 8)" + }, + { + "internalName": "camera_shoot_explosion_8", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 9)" + }, + { + "internalName": "camera_shoot_explosion_9", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 10)" + }, + { + "internalName": "camera_shoot_explosion_10", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 11)" + }, + { + "internalName": "camera_shoot_explosion_11", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 12)" + }, + { + "internalName": "camera_shoot_explosion_12", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 13)" + }, + { + "internalName": "camera_shoot_explosion_13", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 14)" + }, + { + "internalName": "camera_shoot_explosion_14", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 15)" + }, + { + "internalName": "camera_shoot_explosion_15", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 16)" + }, + { + "internalName": "conduit_0", + "displayName": "Conduit (Unused) (Stage 1)" + }, + { + "internalName": "conduit_1", + "displayName": "Conduit (Unused) (Stage 2)" + }, + { + "internalName": "conduit_2", + "displayName": "Conduit (Unused) (Stage 3)" + }, + { + "internalName": "conduit_3", + "displayName": "Conduit (Unused) (Stage 4)" + }, + { + "internalName": "conduit_4", + "displayName": "Conduit (Unused) (Stage 5)" + }, + { + "internalName": "conduit_5", + "displayName": "Conduit (Unused) (Stage 6)" + }, + { + "internalName": "conduit_6", + "displayName": "Conduit (Unused) (Stage 7)" + }, + { + "internalName": "conduit_7", + "displayName": "Conduit (Unused) (Stage 8)" + }, + { + "internalName": "conduit_8", + "displayName": "Conduit (Unused) (Stage 9)" + }, + { + "internalName": "conduit_9", + "displayName": "Conduit (Unused) (Stage 10)" + }, + { + "internalName": "conduit_10", + "displayName": "Conduit (Unused) (Stage 11)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "sga_a", + "displayName": "Standard Galactic Language (A)" + }, + { + "internalName": "sga_b", + "displayName": "Standard Galactic Language (B)" + }, + { + "internalName": "sga_c", + "displayName": "Standard Galactic Language (C)" + }, + { + "internalName": "sga_d", + "displayName": "Standard Galactic Language (D)" + }, + { + "internalName": "sga_e", + "displayName": "Standard Galactic Language (E)" + }, + { + "internalName": "sga_f", + "displayName": "Standard Galactic Language (F)" + }, + { + "internalName": "sga_g", + "displayName": "Standard Galactic Language (G)" + }, + { + "internalName": "sga_h", + "displayName": "Standard Galactic Language (H)" + }, + { + "internalName": "sga_i", + "displayName": "Standard Galactic Language (I)" + }, + { + "internalName": "sga_j", + "displayName": "Standard Galactic Language (J)" + }, + { + "internalName": "sga_k", + "displayName": "Standard Galactic Language (K)" + }, + { + "internalName": "sga_l", + "displayName": "Standard Galactic Language (L)" + }, + { + "internalName": "sga_m", + "displayName": "Standard Galactic Language (M)" + }, + { + "internalName": "sga_n", + "displayName": "Standard Galactic Language (N)" + }, + { + "internalName": "sga_o", + "displayName": "Standard Galactic Language (O)" + }, + { + "internalName": "sga_p", + "displayName": "Standard Galactic Language (P)" + }, + { + "internalName": "sga_q", + "displayName": "Standard Galactic Language (Q)" + }, + { + "internalName": "sga_r", + "displayName": "Standard Galactic Language (R)" + }, + { + "internalName": "sga_s", + "displayName": "Standard Galactic Language (S)" + }, + { + "internalName": "sga_t", + "displayName": "Standard Galactic Language (T)" + }, + { + "internalName": "sga_u", + "displayName": "Standard Galactic Language (U)" + }, + { + "internalName": "sga_v", + "displayName": "Standard Galactic Language (V)" + }, + { + "internalName": "sga_w", + "displayName": "Standard Galactic Language (W)" + }, + { + "internalName": "sga_x", + "displayName": "Standard Galactic Language (X)" + }, + { + "internalName": "sga_y", + "displayName": "Standard Galactic Language (Y)" + }, + { + "internalName": "sga_z", + "displayName": "Standard Galactic Language (Z)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, ] } From 1122fefaf0bac7d0b83f92c4bcbd2943c92aebe7 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 17:22:44 -0400 Subject: [PATCH 19/29] Added Shulker Box Overlay to tile data Not used, but it appears that this is what 4J was trying to do --- .../Editor/TextureAtlasEditor.Designer.cs | 91 ++++++++++--------- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 17 +++- PCK-Studio/Resources/atlases/tileData.json | 4 +- 3 files changed, 63 insertions(+), 49 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index a76914f5..56d2003c 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -29,7 +29,7 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TextureAtlasEditor)); - this.variantLabel = new MetroFramework.Controls.MetroLabel(); + this.internalTileNameLabel = new MetroFramework.Controls.MetroLabel(); this.menuStrip1 = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -54,18 +54,20 @@ ((System.ComponentModel.ISupportInitialize)(this.selectTilePictureBox)).BeginInit(); this.SuspendLayout(); // - // variantLabel + // internalTileNameLabel // - this.variantLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.variantLabel.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.variantLabel, 2); - this.variantLabel.Location = new System.Drawing.Point(3, 239); - this.variantLabel.Name = "variantLabel"; - this.variantLabel.Size = new System.Drawing.Size(208, 19); - this.variantLabel.TabIndex = 18; - this.variantLabel.Text = "Variant:"; - this.variantLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.variantLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + this.internalTileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.internalTileNameLabel, 2); + this.internalTileNameLabel.FontSize = MetroFramework.MetroLabelSize.Small; + this.internalTileNameLabel.Location = new System.Drawing.Point(3, 281); + this.internalTileNameLabel.Name = "internalTileNameLabel"; + this.internalTileNameLabel.Size = new System.Drawing.Size(208, 15); + this.internalTileNameLabel.TabIndex = 18; + this.internalTileNameLabel.Text = "InternalTileName"; + this.internalTileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.internalTileNameLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + this.internalTileNameLabel.WrapToLine = true; // // menuStrip1 // @@ -145,20 +147,20 @@ this.tableLayoutPanel1.Controls.Add(this.colorSlider, 1, 4); this.tableLayoutPanel1.Controls.Add(this.colorSliderLabel, 0, 4); this.tableLayoutPanel1.Controls.Add(this.variantComboBox, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.variantLabel, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.internalTileNameLabel, 0, 2); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(20, 84); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 6; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.68709F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.14977F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.14977F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.833951F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 42.82212F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 8.938088F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 8.943623F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 8.943623F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 8.943623F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5.352765F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5.350623F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5.352765F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5.352765F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel1.Size = new System.Drawing.Size(590, 565); this.tableLayoutPanel1.TabIndex = 17; @@ -173,7 +175,7 @@ this.originalPictureBox.Location = new System.Drawing.Point(217, 3); this.originalPictureBox.Name = "originalPictureBox"; this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 9); - this.originalPictureBox.Size = new System.Drawing.Size(370, 536); + this.originalPictureBox.Size = new System.Drawing.Size(370, 535); this.originalPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.originalPictureBox.TabIndex = 4; this.originalPictureBox.TabStop = false; @@ -192,7 +194,7 @@ this.selectTilePictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.selectTilePictureBox.Location = new System.Drawing.Point(3, 3); this.selectTilePictureBox.Name = "selectTilePictureBox"; - this.selectTilePictureBox.Size = new System.Drawing.Size(208, 204); + this.selectTilePictureBox.Size = new System.Drawing.Size(208, 227); this.selectTilePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.selectTilePictureBox.TabIndex = 0; this.selectTilePictureBox.TabStop = false; @@ -204,9 +206,9 @@ | System.Windows.Forms.AnchorStyles.Right))); this.replaceButton.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.replaceButton, 2); - this.replaceButton.Location = new System.Drawing.Point(3, 519); + this.replaceButton.Location = new System.Drawing.Point(3, 515); this.replaceButton.Name = "replaceButton"; - this.replaceButton.Size = new System.Drawing.Size(208, 20); + this.replaceButton.Size = new System.Drawing.Size(208, 23); this.replaceButton.TabIndex = 14; this.replaceButton.Text = "Replace Tile on Atlas"; this.replaceButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -215,23 +217,25 @@ // // tileNameLabel // - this.tileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + this.tileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2); - this.tileNameLabel.Location = new System.Drawing.Point(3, 217); + this.tileNameLabel.Location = new System.Drawing.Point(3, 233); this.tileNameLabel.Name = "tileNameLabel"; - this.tileNameLabel.Size = new System.Drawing.Size(208, 19); + this.tileNameLabel.Size = new System.Drawing.Size(208, 48); this.tileNameLabel.TabIndex = 19; this.tileNameLabel.Text = "TileName"; this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.tileNameLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + this.tileNameLabel.WrapToLine = true; // // setColorButton // this.setColorButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.tableLayoutPanel1.SetColumnSpan(this.setColorButton, 2); - this.setColorButton.Location = new System.Drawing.Point(3, 444); + this.setColorButton.Location = new System.Drawing.Point(3, 434); this.setColorButton.Name = "setColorButton"; this.setColorButton.Size = new System.Drawing.Size(208, 17); this.setColorButton.TabIndex = 25; @@ -246,9 +250,9 @@ | System.Windows.Forms.AnchorStyles.Right))); this.animationButton.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.animationButton, 2); - this.animationButton.Location = new System.Drawing.Point(3, 545); + this.animationButton.Location = new System.Drawing.Point(3, 544); this.animationButton.Name = "animationButton"; - this.animationButton.Size = new System.Drawing.Size(208, 17); + this.animationButton.Size = new System.Drawing.Size(208, 18); this.animationButton.TabIndex = 16; this.animationButton.Text = "Animation"; this.animationButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -261,9 +265,9 @@ | System.Windows.Forms.AnchorStyles.Right))); this.clearColorButton.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.clearColorButton, 2); - this.clearColorButton.Location = new System.Drawing.Point(3, 467); + this.clearColorButton.Location = new System.Drawing.Point(3, 457); this.clearColorButton.Name = "clearColorButton"; - this.clearColorButton.Size = new System.Drawing.Size(208, 20); + this.clearColorButton.Size = new System.Drawing.Size(208, 23); this.clearColorButton.TabIndex = 24; this.clearColorButton.Text = "Clear Custom Colour"; this.clearColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -276,9 +280,9 @@ | System.Windows.Forms.AnchorStyles.Right))); this.extractButton.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.extractButton, 2); - this.extractButton.Location = new System.Drawing.Point(3, 493); + this.extractButton.Location = new System.Drawing.Point(3, 486); this.extractButton.Name = "extractButton"; - this.extractButton.Size = new System.Drawing.Size(208, 20); + this.extractButton.Size = new System.Drawing.Size(208, 23); this.extractButton.TabIndex = 27; this.extractButton.Text = "Extract Tile from Atlas"; this.extractButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -289,10 +293,10 @@ // this.colorSlider.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); this.colorSlider.BackColor = System.Drawing.Color.Transparent; - this.colorSlider.Location = new System.Drawing.Point(64, 353); + this.colorSlider.Location = new System.Drawing.Point(64, 380); this.colorSlider.Maximum = 255; this.colorSlider.Name = "colorSlider"; - this.colorSlider.Size = new System.Drawing.Size(147, 82); + this.colorSlider.Size = new System.Drawing.Size(147, 42); this.colorSlider.TabIndex = 26; this.colorSlider.Text = "metroTrackBar1"; this.colorSlider.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -306,11 +310,12 @@ | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.colorSliderLabel.BackColor = System.Drawing.Color.Transparent; - this.colorSliderLabel.Location = new System.Drawing.Point(3, 350); + this.colorSliderLabel.FontSize = MetroFramework.MetroLabelSize.Small; + this.colorSliderLabel.Location = new System.Drawing.Point(3, 377); this.colorSliderLabel.Name = "colorSliderLabel"; - this.colorSliderLabel.Size = new System.Drawing.Size(55, 88); + this.colorSliderLabel.Size = new System.Drawing.Size(55, 48); this.colorSliderLabel.TabIndex = 19; - this.colorSliderLabel.Text = "Color Range:"; + this.colorSliderLabel.Text = "Color Value:"; this.colorSliderLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.colorSliderLabel.Theme = MetroFramework.MetroThemeStyle.Dark; this.colorSliderLabel.Visible = false; @@ -323,7 +328,7 @@ this.variantComboBox.Enabled = false; this.variantComboBox.FormattingEnabled = true; this.variantComboBox.ItemHeight = 23; - this.variantComboBox.Location = new System.Drawing.Point(3, 291); + this.variantComboBox.Location = new System.Drawing.Point(3, 338); this.variantComboBox.Name = "variantComboBox"; this.variantComboBox.Size = new System.Drawing.Size(208, 29); this.variantComboBox.TabIndex = 17; @@ -373,7 +378,7 @@ private System.Windows.Forms.ToolStripMenuItem applyColorMaskToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem playAnimationsToolStripMenuItem; private MetroFramework.Controls.MetroLabel tileNameLabel; - private MetroFramework.Controls.MetroLabel variantLabel; + private MetroFramework.Controls.MetroLabel internalTileNameLabel; private MetroFramework.Controls.MetroButton clearColorButton; private MetroFramework.Controls.MetroButton setColorButton; private MetroFramework.Controls.MetroTrackBar colorSlider; diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 874fd5e6..4db6e920 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -195,8 +195,8 @@ namespace PckStudio.Forms.Editor private void SetImageDisplayed(int index) { tileNameLabel.Text = string.Empty; - - variantLabel.Visible = false; + internalTileNameLabel.Text = string.Empty; + variantComboBox.Visible = false; variantComboBox.Items.Clear(); variantComboBox.SelectedItem = null; @@ -221,6 +221,7 @@ namespace PckStudio.Forms.Editor selectTilePictureBox.Image = dataTile.Texture; tileNameLabel.Text = $"{dataTile.Tile.DisplayName}"; + internalTileNameLabel.Text = $"{dataTile.Tile.InternalName}"; selectTilePictureBox.BlendColor = GetBlendColor(); selectTilePictureBox.UseBlendColor = applyColorMaskToolStripMenuItem.Checked; @@ -244,7 +245,7 @@ namespace PckStudio.Forms.Editor setColorButton.Enabled = clearColorButton.Enabled = dataTile.Tile.ColourEntry.HasCustomColour; clearColorButton.Enabled = false; - variantComboBox.Enabled = variantLabel.Visible = variantComboBox.Visible = dataTile.Tile.ColourEntry.Variants.Length > 1; + variantComboBox.Enabled = variantComboBox.Visible = dataTile.Tile.ColourEntry.Variants.Length > 1; if (dataTile.Tile.ColourEntry.IsWaterColour && _colourTable.WaterColors.Count > 0) { @@ -411,7 +412,15 @@ namespace PckStudio.Forms.Editor { if (_colourTable.Colors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.Color color) { - return color.ColorPallette; + var final_color = color.ColorPallette; + + // Enchanted hits are hardcoded and do not have color table entries + if (dataTile.Tile.InternalName == "enchanted_hit") + // this is directly based on Java's source code for handling enchanted hits + // it just multiplies the red by 0.3 and green by .8 of the color assigned to the critical hit particle + final_color = Color.FromArgb((int)(final_color.R * 0.3f), (int)(final_color.R * 0.8f), final_color.B); + + return final_color; } } else if (_colourTable.WaterColors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.WaterColor waterColor) diff --git a/PCK-Studio/Resources/atlases/tileData.json b/PCK-Studio/Resources/atlases/tileData.json index 138f4be8..6303343e 100644 --- a/PCK-Studio/Resources/atlases/tileData.json +++ b/PCK-Studio/Resources/atlases/tileData.json @@ -2311,8 +2311,8 @@ } }, { - "internalName": "", - "displayName": "" + "internalName": "shulker_top_overlay", + "displayName": "Shulker Box (Break Particles) (Overlay) (Unused)" }, { "internalName": "cauldron_water", From bec3d5d6433e91c7bc33b96fe4d2202e8aa6b2bd Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 18:26:35 -0400 Subject: [PATCH 20/29] Added color data for particles in Atlas Editor --- .../Editor/TextureAtlasEditor.Designer.cs | 2 +- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 48 +- PCK-Studio/Resources/atlases/tileData.json | 1188 +++++++++++++++-- 3 files changed, 1141 insertions(+), 97 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index 56d2003c..a9e55d22 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -300,7 +300,7 @@ this.colorSlider.TabIndex = 26; this.colorSlider.Text = "metroTrackBar1"; this.colorSlider.Theme = MetroFramework.MetroThemeStyle.Dark; - this.colorSlider.Value = 0; + this.colorSlider.Value = 255; this.colorSlider.Visible = false; this.colorSlider.ValueChanged += new System.EventHandler(this.colorSlider_ValueChanged); // diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 4db6e920..4f8c2e7b 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -152,6 +152,15 @@ namespace PckStudio.Forms.Editor _tiles = new List(tiles); SelectedIndex = 0; + + bool isParticles = _atlasType == "particles"; + + // this is directly based on Java's source code for handling enchanted hits + // the particle is assigned a random grayscale color between roughly 154 and 230 + // since critical hit is the only particle with this distinction, we just need to check the atlas type + colorSlider.Maximum = isParticles ? 230 : 255; + colorSlider.Minimum = isParticles ? 154 : 0; + colorSlider.Value = isParticles ? colorSlider.Maximum : colorSlider.Minimum; } private bool AcquireColorTable(PckFile pckFile) @@ -197,6 +206,8 @@ namespace PckStudio.Forms.Editor tileNameLabel.Text = string.Empty; internalTileNameLabel.Text = string.Empty; + colorSlider.Visible = false; + colorSliderLabel.Visible = false; variantComboBox.Visible = false; variantComboBox.Items.Clear(); variantComboBox.SelectedItem = null; @@ -395,13 +406,30 @@ namespace PckStudio.Forms.Editor return Color.White; } + private Color HandleSpecialTiles(string colorKey) + { + colorSlider.Visible = colorSliderLabel.Visible = true; + + // Simply, Experience orbs red value is just sliding between 255 and 0 + if (colorKey == "experience_orb") return Color.FromArgb(colorSlider.Value, 255, 0); + + //similar story for critical hits, but for all values + var final_color = Color.FromArgb(colorSlider.Value, colorSlider.Value, colorSlider.Value); + + // enchanted hits are modified critical hit particles + if (dataTile.Tile.InternalName == "enchanted_hit") + // this is directly based on Java's source code for handling enchanted hits + // it just multiplies the red by 0.3 and green by .8 of the color assigned to the critical hit particle + final_color = Color.FromArgb((int)(final_color.R * 0.3f), (int)(final_color.R * 0.8f), final_color.B); + + return final_color; + } + private Color FindBlendColorByKey(string colorKey) { - // Experience Orbs are hardcoded within a range and do not have color table entries - if (colorSliderLabel.Visible = colorSlider.Visible = colorKey == "experience_orb") - { - return Color.FromArgb(colorSlider.Value, 255, 0); - } + // The following tiles are hardcoded within a range and do not have color table entries + if (colorKey == "experience_orb" || colorKey == "critical_hit") + return HandleSpecialTiles(colorKey); if (_colourTable is not null && dataTile.Tile.HasColourEntry && @@ -412,15 +440,7 @@ namespace PckStudio.Forms.Editor { if (_colourTable.Colors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.Color color) { - var final_color = color.ColorPallette; - - // Enchanted hits are hardcoded and do not have color table entries - if (dataTile.Tile.InternalName == "enchanted_hit") - // this is directly based on Java's source code for handling enchanted hits - // it just multiplies the red by 0.3 and green by .8 of the color assigned to the critical hit particle - final_color = Color.FromArgb((int)(final_color.R * 0.3f), (int)(final_color.R * 0.8f), final_color.B); - - return final_color; + return color.ColorPallette; } } else if (_colourTable.WaterColors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.WaterColor waterColor) diff --git a/PCK-Studio/Resources/atlases/tileData.json b/PCK-Studio/Resources/atlases/tileData.json index 6303343e..d9d84b5d 100644 --- a/PCK-Studio/Resources/atlases/tileData.json +++ b/PCK-Studio/Resources/atlases/tileData.json @@ -4765,35 +4765,139 @@ "particles": [ { "internalName": "generic_0", - "displayName": "Generic (Stage 1)" + "displayName": "Generic (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "generic_1", - "displayName": "Generic (Stage 2)" + "displayName": "Generic (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "generic_2", - "displayName": "Generic (Stage 3)" + "displayName": "Generic (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "generic_3", - "displayName": "Generic (Stage 4)" + "displayName": "Generic (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "generic_4", - "displayName": "Generic (Stage 5)" + "displayName": "Generic (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "generic_5", - "displayName": "Generic (Stage 6)" + "displayName": "Generic (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "generic_6", - "displayName": "Generic (Stage 7)" + "displayName": "Generic (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "generic_7", - "displayName": "Generic (Stage 8)" + "displayName": "Generic (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "", @@ -4958,7 +5062,13 @@ "internalName": "flash", "displayName": "Firework Flash", "width": 4, - "height": 4 + "height": 4, + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "", + "variants": [""] + } }, { "internalName": "flash", @@ -5070,19 +5180,60 @@ }, { "internalName": "note", - "displayName": "Noteblock Note" + "displayName": "Noteblock Note", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Note_00", + "variants": [ + "Particle_Note_00", + "Particle_Note_01", + "Particle_Note_02", + "Particle_Note_03", + "Particle_Note_04", + "Particle_Note_05", + "Particle_Note_06", + "Particle_Note_07", + "Particle_Note_08", + "Particle_Note_09", + "Particle_Note_10", + "Particle_Note_11", + "Particle_Note_12", + "Particle_Note_13", + "Particle_Note_14", + "Particle_Note_15", + "Particle_Note_16", + "Particle_Note_17", + "Particle_Note_18", + "Particle_Note_19", + "Particle_Note_20", + "Particle_Note_21", + "Particle_Note_22", + "Particle_Note_23", + "Particle_Note_24", + ] + } }, { "internalName": "critical_hit", - "displayName": "Critical Hit" + "displayName": "Critical Hit", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "critical_hit", + "variants": [ "critical_hit" ] + } }, { "internalName": "enchanted_hit", - "displayName": "Enchanted Hit" + "displayName": "Enchanted Hit", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "critical_hit", + "variants": [ "critical_hit" ] + } }, { "internalName": "damage", - "displayName": "Damage" + "displayName": "Damage Indicator" }, { "internalName": "flash", @@ -5272,15 +5423,42 @@ }, { "internalName": "drip_hang", - "displayName": "Drip (Hang)" + "displayName": "Drip (Hang)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_DripWater", + "variants": [ + "Particle_DripWater", + "Particle_DripLavaStart", + "Particle_DripLavaEnd" + ] + } }, { "internalName": "drip_fall", - "displayName": "Drip (Fall)" + "displayName": "Drip (Fall)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_DripWater", + "variants": [ + "Particle_DripWater", + "Particle_DripLavaStart", + "Particle_DripLavaEnd" + ] + } }, { "internalName": "drip_land", - "displayName": "Drip (Land)" + "displayName": "Drip (Land)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_DripWater", + "variants": [ + "Particle_DripWater", + "Particle_DripLavaStart", + "Particle_DripLavaEnd" + ] + } }, { "internalName": "", @@ -5336,35 +5514,323 @@ }, { "internalName": "effect_0", - "displayName": "Effect (Stage 1)" + "displayName": "Effect (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "effect_1", - "displayName": "Effect (Stage 2)" + "displayName": "Effect (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "effect_2", - "displayName": "Effect (Stage 3)" + "displayName": "Effect (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "effect_3", - "displayName": "Effect (Stage 4)" + "displayName": "Effect (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "effect_4", - "displayName": "Effect (Stage 5)" + "displayName": "Effect (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "effect_5", - "displayName": "Effect (Stage 6)" + "displayName": "Effect (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "effect_6", - "displayName": "Effect (Stage 7)" + "displayName": "Effect (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "effect_7", - "displayName": "Effect (Stage 8)" + "displayName": "Effect (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "", @@ -5400,35 +5866,323 @@ }, { "internalName": "spell_0", - "displayName": "Splash Effect (Stage 1)" + "displayName": "Splash Effect (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "spell_1", - "displayName": "Splash Effect (Stage 2)" + "displayName": "Splash Effect (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "spell_2", - "displayName": "Splash Effect (Stage 3)" + "displayName": "Splash Effect (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "spell_3", - "displayName": "Splash Effect (Stage 4)" + "displayName": "Splash Effect (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "spell_4", - "displayName": "Splash Effect (Stage 5)" + "displayName": "Splash Effect (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "spell_5", - "displayName": "Splash Effect (Stage 6)" + "displayName": "Splash Effect (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "spell_6", - "displayName": "Splash Effect (Stage 7)" + "displayName": "Splash Effect (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "spell_7", - "displayName": "Splash Effect (Stage 8)" + "displayName": "Splash Effect (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "", @@ -5464,35 +6218,123 @@ }, { "internalName": "spark_0", - "displayName": "Firework Spark (Stage 1)" + "displayName": "Firework Spark (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "spark_1", - "displayName": "Firework Spark (Stage 2)" + "displayName": "Firework Spark (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "spark_2", - "displayName": "Firework Spark (Stage 3)" + "displayName": "Firework Spark (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "spark_3", - "displayName": "Firework Spark (Stage 4)" + "displayName": "Firework Spark (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "spark_4", - "displayName": "Firework Spark (Stage 5)" + "displayName": "Firework Spark (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "spark_5", - "displayName": "Firework Spark (Stage 6)" + "displayName": "Firework Spark (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "spark_6", - "displayName": "Firework Spark (Stage 7)" + "displayName": "Firework Spark (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "spark_7", - "displayName": "Firework Spark (Stage 8)" + "displayName": "Firework Spark (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "", @@ -5592,67 +6434,67 @@ }, { "internalName": "camera_shoot_explosion_0", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 1)" + "displayName": "Camera Shoot (Unused) (Stage 1)" }, { "internalName": "camera_shoot_explosion_1", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 2)" + "displayName": "Camera Shoot (Unused) (Stage 2)" }, { "internalName": "camera_shoot_explosion_2", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 3)" + "displayName": "Camera Shoot (Unused) (Stage 3)" }, { "internalName": "camera_shoot_explosion_3", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 4)" + "displayName": "Camera Shoot (Unused) (Stage 4)" }, { "internalName": "camera_shoot_explosion_4", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 5)" + "displayName": "Camera Shoot (Unused) (Stage 5)" }, { "internalName": "camera_shoot_explosion_5", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 6)" + "displayName": "Camera Shoot (Unused) (Stage 6)" }, { "internalName": "camera_shoot_explosion_6", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 7)" + "displayName": "Camera Shoot (Unused) (Stage 7)" }, { "internalName": "camera_shoot_explosion_7", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 8)" + "displayName": "Camera Shoot (Unused) (Stage 8)" }, { "internalName": "camera_shoot_explosion_8", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 9)" + "displayName": "Camera Shoot (Unused) (Stage 9)" }, { "internalName": "camera_shoot_explosion_9", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 10)" + "displayName": "Camera Shoot (Unused) (Stage 10)" }, { "internalName": "camera_shoot_explosion_10", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 11)" + "displayName": "Camera Shoot (Unused) (Stage 11)" }, { "internalName": "camera_shoot_explosion_11", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 12)" + "displayName": "Camera Shoot (Unused) (Stage 12)" }, { "internalName": "camera_shoot_explosion_12", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 13)" + "displayName": "Camera Shoot (Unused) (Stage 13)" }, { "internalName": "camera_shoot_explosion_13", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 14)" + "displayName": "Camera Shoot (Unused) (Stage 14)" }, { "internalName": "camera_shoot_explosion_14", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 15)" + "displayName": "Camera Shoot (Unused) (Stage 15)" }, { "internalName": "camera_shoot_explosion_15", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 16)" + "displayName": "Camera Shoot (Unused) (Stage 16)" }, { "internalName": "conduit_0", @@ -5724,107 +6566,289 @@ }, { "internalName": "sga_a", - "displayName": "Standard Galactic Language (A)" + "displayName": "Standard Galactic Language (A)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_b", - "displayName": "Standard Galactic Language (B)" + "displayName": "Standard Galactic Language (B)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_c", - "displayName": "Standard Galactic Language (C)" + "displayName": "Standard Galactic Language (C)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_d", - "displayName": "Standard Galactic Language (D)" + "displayName": "Standard Galactic Language (D)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_e", - "displayName": "Standard Galactic Language (E)" + "displayName": "Standard Galactic Language (E)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_f", - "displayName": "Standard Galactic Language (F)" + "displayName": "Standard Galactic Language (F)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_g", - "displayName": "Standard Galactic Language (G)" + "displayName": "Standard Galactic Language (G)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_h", - "displayName": "Standard Galactic Language (H)" + "displayName": "Standard Galactic Language (H)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_i", - "displayName": "Standard Galactic Language (I)" + "displayName": "Standard Galactic Language (I)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_j", - "displayName": "Standard Galactic Language (J)" + "displayName": "Standard Galactic Language (J)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_k", - "displayName": "Standard Galactic Language (K)" + "displayName": "Standard Galactic Language (K)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_l", - "displayName": "Standard Galactic Language (L)" + "displayName": "Standard Galactic Language (L)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_m", - "displayName": "Standard Galactic Language (M)" + "displayName": "Standard Galactic Language (M)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_n", - "displayName": "Standard Galactic Language (N)" + "displayName": "Standard Galactic Language (N)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_o", - "displayName": "Standard Galactic Language (O)" + "displayName": "Standard Galactic Language (O)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_p", - "displayName": "Standard Galactic Language (P)" + "displayName": "Standard Galactic Language (P)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_q", - "displayName": "Standard Galactic Language (Q)" + "displayName": "Standard Galactic Language (Q)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_r", - "displayName": "Standard Galactic Language (R)" + "displayName": "Standard Galactic Language (R)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_s", - "displayName": "Standard Galactic Language (S)" + "displayName": "Standard Galactic Language (S)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_t", - "displayName": "Standard Galactic Language (T)" + "displayName": "Standard Galactic Language (T)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_u", - "displayName": "Standard Galactic Language (U)" + "displayName": "Standard Galactic Language (U)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_v", - "displayName": "Standard Galactic Language (V)" + "displayName": "Standard Galactic Language (V)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_w", - "displayName": "Standard Galactic Language (W)" + "displayName": "Standard Galactic Language (W)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_x", - "displayName": "Standard Galactic Language (X)" + "displayName": "Standard Galactic Language (X)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_y", - "displayName": "Standard Galactic Language (Y)" + "displayName": "Standard Galactic Language (Y)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_z", - "displayName": "Standard Galactic Language (Z)" + "displayName": "Standard Galactic Language (Z)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "", From 5b240b670d13d0ad8a55618f19dc3efbca0f0de0 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 19:07:44 -0400 Subject: [PATCH 21/29] Split Tile Data --- PCK-Studio/Internal/ApplicationScope.cs | 8 +- PCK-Studio/Internal/Json/Tiles.cs | 31 +- PCK-Studio/PckStudio.csproj | 7 + PCK-Studio/Properties/Resources.Designer.cs | 255 +- PCK-Studio/Properties/Resources.resx | 24 +- PCK-Studio/Resources/atlases/blockData.json | 2922 +++++++ .../Resources/atlases/experienceOrbData.json | 124 + .../Resources/atlases/explosionData.json | 197 + PCK-Studio/Resources/atlases/itemData.json | 1366 ++++ PCK-Studio/Resources/atlases/mapIconData.json | 135 + .../Resources/atlases/moonPhaseData.json | 37 + .../Resources/atlases/particleData.json | 2112 +++++ PCK-Studio/Resources/atlases/tileData.json | 6874 ----------------- 13 files changed, 7171 insertions(+), 6921 deletions(-) create mode 100644 PCK-Studio/Resources/atlases/blockData.json create mode 100644 PCK-Studio/Resources/atlases/experienceOrbData.json create mode 100644 PCK-Studio/Resources/atlases/explosionData.json create mode 100644 PCK-Studio/Resources/atlases/itemData.json create mode 100644 PCK-Studio/Resources/atlases/mapIconData.json create mode 100644 PCK-Studio/Resources/atlases/moonPhaseData.json create mode 100644 PCK-Studio/Resources/atlases/particleData.json delete mode 100644 PCK-Studio/Resources/atlases/tileData.json diff --git a/PCK-Studio/Internal/ApplicationScope.cs b/PCK-Studio/Internal/ApplicationScope.cs index 361ad2e4..61efd6d4 100644 --- a/PCK-Studio/Internal/ApplicationScope.cs +++ b/PCK-Studio/Internal/ApplicationScope.cs @@ -23,7 +23,13 @@ namespace PckStudio.Internal { _entityImages ??= Resources.entities_sheet.SplitHorizontal(32).ToArray(); DataCacher ??= new FileCacher(Program.AppDataCache); - _ = Tiles.JsonTileData; + _ = Tiles.JsonBlockData; + _ = Tiles.JsonItemData; + _ = Tiles.JsonParticleData; + _ = Tiles.JsonMoonPhaseData; + _ = Tiles.JsonExplosionData; + _ = Tiles.JsonMapIconData; + _ = Tiles.JsonExperienceOrbData; _ = Tiles.ItemImageList; _ = Tiles.BlockImageList; SettingsManager.Initialize(); diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index f2b6303c..a973638b 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -40,18 +40,27 @@ namespace PckStudio.Internal.Json internal static class Tiles { - private static JsonTiles _jsonData; - internal static JsonTiles JsonTileData => _jsonData ??= JsonConvert.DeserializeObject(Resources.tileData); + private static JsonTiles + _jsonBlockData, _jsonItemData, + _jsonParticleData, _jsonMoonPhaseData, + _jsonMapIconData, _jsonExplosionData, + _jsonExperienceOrbData; + internal static JsonTiles JsonBlockData => _jsonBlockData ??= JsonConvert.DeserializeObject(Resources.blockData); + internal static JsonTiles JsonItemData => _jsonItemData ??= JsonConvert.DeserializeObject(Resources.itemData); + internal static JsonTiles JsonParticleData => _jsonParticleData ??= JsonConvert.DeserializeObject(Resources.particleData); + internal static JsonTiles JsonMoonPhaseData => _jsonMoonPhaseData ??= JsonConvert.DeserializeObject(Resources.moonPhaseData); + internal static JsonTiles JsonMapIconData => _jsonMapIconData ??= JsonConvert.DeserializeObject(Resources.mapIconData); + internal static JsonTiles JsonExplosionData => _jsonExplosionData ??= JsonConvert.DeserializeObject(Resources.explosionData); + internal static JsonTiles JsonExperienceOrbData => _jsonExperienceOrbData ??= JsonConvert.DeserializeObject(Resources.experienceOrbData); - internal static List ItemTileInfos => JsonTileData.Items; - - internal static List BlockTileInfos => JsonTileData.Blocks; - internal static List ParticleTileInfos => JsonTileData.Particles; - internal static List MoonPhaseTileInfos => JsonTileData.MoonPhases; - internal static List MapIconTileInfos => JsonTileData.MapIcons; - internal static List AdditionalMapIconTileInfos => JsonTileData.AdditionalMapIcons; - internal static List ExperienceOrbTileInfos => JsonTileData.ExperienceOrbs; - internal static List ExplosionTileInfos => JsonTileData.Explosion; + internal static List ItemTileInfos => JsonItemData.Items; + internal static List BlockTileInfos => JsonBlockData.Blocks; + internal static List ParticleTileInfos => JsonParticleData.Particles; + internal static List MoonPhaseTileInfos => JsonMoonPhaseData.MoonPhases; + internal static List MapIconTileInfos => JsonMapIconData.MapIcons; + internal static List AdditionalMapIconTileInfos => JsonMapIconData.AdditionalMapIcons; + internal static List ExperienceOrbTileInfos => JsonExperienceOrbData.ExperienceOrbs; + internal static List ExplosionTileInfos => JsonExplosionData.Explosion; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_sheet.SplitHorizontal(16).ToArray(); diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 18d29ec5..de86f119 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -628,7 +628,14 @@ + + + + + + + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index 459ea406..97f21855 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -150,6 +150,38 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "Tile data research by MattNL", + /// "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", + /// "blocks": [ + /// { + /// "internalName": "grass_top", + /// "displayName": "Grass Block (Top)", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "defaultName": "Grass_Common", + /// "variants": [ + /// "Grass_Common", + /// "Grass_Mesa", + /// "Grass_Swamp1", + /// "Grass_Swamp2" + /// ] + /// } + /// }, + /// { + /// "internalName": "stone", + /// "displayName": "Stone" + /// }, + /// { + /// "internalName": [rest of string was truncated]";. + /// + public static string blockData { + get { + return ResourceManager.GetString("blockData", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -304,6 +336,36 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "JSON by MattNL", + /// "experience_orbs": [ + /// { + /// "internalName": "experience_orb_0", + /// "displayName": "Experience Orb (Size 1)", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "defaultName": "experience_orb", + /// "variants": ["experience_orb"] + /// } + /// }, + /// { + /// "internalName": "experience_orb_1", + /// "displayName": "Experience Orb (Size 2)", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "defaultName": "experience_orb", + /// "variants": ["experience_orb"] + /// } + /// }, + /// [rest of string was truncated]";. + /// + public static string experienceOrbData { + get { + return ResourceManager.GetString("experienceOrbData", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -314,6 +376,37 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "JSON by MattNL", + /// "explosion": [ + /// { + /// "internalName": "explosion_0", + /// "displayName": "Explosion (Stage 1)", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "defaultName": "Particle_Explode", + /// "variants": [ + /// "Particle_Explode", + /// "Particle_HugeExplosion" + /// ] + /// } + /// }, + /// { + /// "internalName": "explosion_1", + /// "displayName": "Explosion (Stage 2)", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "defaultName": "Particle_Explode", + /// "variants": [ + /// [rest of string was truncated]";. + /// + public static string explosionData { + get { + return ResourceManager.GetString("explosionData", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -414,6 +507,34 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "Tile data research by MattNL", + /// "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", + /// "items": [ + /// { + /// "internalName": "helmetCloth", + /// "displayName": "Leather Cap", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "hasCustomColour": true, + /// "defaultName": "Armour_Default_Leather_Colour", + /// "variants": [ "Armour_Default_Leather_Colour" ] + /// } + /// }, + /// { + /// "internalName": "helmetChain", + /// "displayName": "Chain Helmet" + /// }, + /// { + /// "internalName": "he [rest of string was truncated]";. + /// + public static string itemData { + get { + return ResourceManager.GetString("itemData", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -444,6 +565,43 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "JSON by MattNL", + /// "map_icons": [ + /// { + /// "internalName": "player_1", + /// "displayName": "Player 1" + /// }, + /// { + /// "internalName": "player_2", + /// "displayName": "Player 2" + /// }, + /// { + /// "internalName": "player_3", + /// "displayName": "Player 3" + /// }, + /// { + /// "internalName": "player_4", + /// "displayName": "Player 4" + /// }, + /// { + /// "internalName": "target_x", + /// "displayName": "Unused" + /// }, + /// { + /// "internalName": "target_point", + /// "displayName": "Target Point (Unused)" + /// }, + /// { + /// [rest of string was truncated]";. + /// + public static string mapIconData { + get { + return ResourceManager.GetString("mapIconData", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -464,6 +622,40 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "JSON by MattNL", + /// "moon_phases": [ + /// { + /// "internalName": "moon_phase_0", + /// "displayName": "Full Moon" + /// }, + /// { + /// "internalName": "moon_phase_1", + /// "displayName": "Waning Gibbous" + /// }, + /// { + /// "internalName": "moon_phase_2", + /// "displayName": "Last Quarter" + /// }, + /// { + /// "internalName": "moon_phase_3", + /// "displayName": "Waning Crescent" + /// }, + /// { + /// "internalName": "moon_phase_4", + /// "displayName": "New Moon" + /// }, + /// { + /// "internalName": "moon_phase_5", + /// "displayNa [rest of string was truncated]";. + /// + public static string moonPhaseData { + get { + return ResourceManager.GetString("moonPhaseData", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// @@ -504,6 +696,37 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "JSON by MattNL", + /// "particles": [ + /// { + /// "internalName": "generic_0", + /// "displayName": "Generic (Stage 1)", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "defaultName": "None", + /// "variants": [ + /// "None", + /// "Particle_Smoke", + /// "Particle_NetherPortal", + /// "Particle_EnderPortal", + /// "Particle_Ender", + /// "Particle_DragonBreathMin", + /// "Particle_DragonBreathMax" + /// ] + /// } + /// }, + /// { + /// "internalName": "generic_1", + /// "displayName": "Generic (Stage 2)", [rest of string was truncated]";. + /// + public static string particleData { + get { + return ResourceManager.GetString("particleData", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -674,38 +897,6 @@ namespace PckStudio.Properties { } } - /// - /// Looks up a localized string similar to { - /// "COMMENT_1": "Tile data research by MattNL", - /// "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", - /// "blocks": [ - /// { - /// "internalName": "grass_top", - /// "displayName": "Grass Block (Top)", - /// "hasColourEntry": true, - /// "colourEntry": { - /// "defaultName": "Grass_Common", - /// "variants": [ - /// "Grass_Common", - /// "Grass_Mesa", - /// "Grass_Swamp1", - /// "Grass_Swamp2" - /// ] - /// } - /// }, - /// { - /// "internalName": "stone", - /// "displayName": "Stone" - /// }, - /// { - /// "internalName": [rest of string was truncated]";. - /// - public static string tileData { - get { - return ResourceManager.GetString("tileData", resourceCulture); - } - } - /// /// Looks up a localized resource of type System.Byte[]. /// diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index a1ba9819..cda749a2 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -172,9 +172,6 @@ ..\Resources\iconImageList\GRH ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\atlases\tileData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - ..\Resources\pckClosed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -340,9 +337,30 @@ ..\Resources\atlases\experience_orbs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\blockData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\atlases\experienceOrbData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\atlases\explosionData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + ..\Resources\atlases\explosion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\itemData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\atlases\mapIconData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\atlases\moonPhaseData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\atlases\particleData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + ..\Resources\atlases\particles.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/PCK-Studio/Resources/atlases/blockData.json b/PCK-Studio/Resources/atlases/blockData.json new file mode 100644 index 00000000..33bc0f3a --- /dev/null +++ b/PCK-Studio/Resources/atlases/blockData.json @@ -0,0 +1,2922 @@ +{ + "COMMENT_1": "Tile data research by MattNL", + "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", + "blocks": [ + { + "internalName": "grass_top", + "displayName": "Grass Block (Top)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "stone", + "displayName": "Stone" + }, + { + "internalName": "dirt", + "displayName": "Dirt" + }, + { + "internalName": "grass_side", + "displayName": "Grass Block (Side)" + }, + { + "internalName": "planks_oak", + "displayName": "Oak Planks" + }, + { + "internalName": "stoneslab_side", + "displayName": "Stone Slab (Side)" + }, + { + "internalName": "stoneslab_top", + "displayName": "Stone Slab (Top)" + }, + { + "internalName": "brick", + "displayName": "Bricks" + }, + { + "internalName": "tnt_side", + "displayName": "TNT (Side)" + }, + { + "internalName": "tnt_top", + "displayName": "TNT (Top)" + }, + { + "internalName": "tnt_bottom", + "displayName": "TNT (Bottom)" + }, + { + "internalName": "web", + "displayName": "Cobweb" + }, + { + "internalName": "flower_rose", + "displayName": "Poppy" + }, + { + "internalName": "flower_dandelion", + "displayName": "Dandelion" + }, + { + "internalName": "portal", + "displayName": "Nether Portal" + }, + { + "internalName": "sapling", + "displayName": "Oak Sapling" + }, + { + "internalName": "cobblestone", + "displayName": "Cobblestone" + }, + { + "internalName": "bedrock", + "displayName": "Bedrock" + }, + { + "internalName": "sand", + "displayName": "Sand" + }, + { + "internalName": "gravel", + "displayName": "Gravel" + }, + { + "internalName": "log_oak", + "displayName": "Oak Wood (Side)" + }, + { + "internalName": "log_oak_top", + "displayName": "Oak Wood (Top)" + }, + { + "internalName": "iron_block", + "displayName": "Block of Iron" + }, + { + "internalName": "gold_block", + "displayName": "Block of Gold" + }, + { + "internalName": "diamond_block", + "displayName": "Block of Diamond" + }, + { + "internalName": "emerald_block", + "displayName": "Block of Emerald" + }, + { + "internalName": "redstone_block", + "displayName": "Block of Redstone" + }, + { + "internalName": "dropper_front_horizontal", + "displayName": "Dropper (Front)" + }, + { + "internalName": "mushroom_red", + "displayName": "Mushroom (Red)" + }, + { + "internalName": "mushroom_brown", + "displayName": "Mushroom (Brown)" + }, + { + "internalName": "sapling_jungle", + "displayName": "Jungle Tree Sapling" + }, + { + "internalName": "fire_0", + "displayName": "Fire (Layer 1)" + }, + { + "internalName": "gold_ore", + "displayName": "Gold Ore" + }, + { + "internalName": "iron_ore", + "displayName": "Iron Ore" + }, + { + "internalName": "coal_ore", + "displayName": "Coal Ore" + }, + { + "internalName": "bookshelf", + "displayName": "Bookshelf" + }, + { + "internalName": "cobblestone_mossy", + "displayName": "Moss Stone" + }, + { + "internalName": "obsidian", + "displayName": "Obsidian" + }, + { + "internalName": "grass_side_overlay", + "displayName": "Grass Side (Overlay)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "tallgrass", + "displayName": "Tall Grass", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "dispenser_front_vertical", + "displayName": "Dispenser (Vertical) (Front)" + }, + { + "internalName": "beacon", + "displayName": "Beacon" + }, + { + "internalName": "dropper_front_vertical", + "displayName": "Dropper (Vertical) (Front)" + }, + { + "internalName": "workbench_top", + "displayName": "Crafting Table (Top)" + }, + { + "internalName": "furnace_front", + "displayName": "Furnace (Front)" + }, + { + "internalName": "furnace_side", + "displayName": "Furnace/Dispenser/Dropper (Side)" + }, + { + "internalName": "dispenser_front", + "displayName": "Dispenser (Front)" + }, + { + "internalName": "fire_1", + "displayName": "Fire (Layer 2)" + }, + { + "internalName": "sponge", + "displayName": "Sponge" + }, + { + "internalName": "glass", + "displayName": "Glass" + }, + { + "internalName": "diamond_ore", + "displayName": "Diamond Ore" + }, + { + "internalName": "redstone_ore", + "displayName": "Redstone Ore" + }, + { + "internalName": "leaves", + "displayName": "Oak Leaves", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "leaves_opaque", + "displayName": "Oak Leaves (Opaque)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "stonebrick", + "displayName": "Stone Bricks" + }, + { + "internalName": "deadbush", + "displayName": "Dead Bush/Shrub" + }, + { + "internalName": "fern", + "displayName": "Fern", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "daylight_detector_top", + "displayName": "Daylight Sensor (Top)" + }, + { + "internalName": "daylight_detector_side", + "displayName": "Daylight Sensor (Side)" + }, + { + "internalName": "workbench_side", + "displayName": "Crafting Table (Side)" + }, + { + "internalName": "workbench_front", + "displayName": "Crafting Table (Front)" + }, + { + "internalName": "furnace_front_lit", + "displayName": "Furnace (Lit) (Front)" + }, + { + "internalName": "furnace_top", + "displayName": "Furnace/Dispenser/Dropper (Top)" + }, + { + "internalName": "sapling_spruce", + "displayName": "Spruce Sapling" + }, + { + "internalName": "wool_colored_white", + "displayName": "White Wool" + }, + { + "internalName": "mob_spawner", + "displayName": "Monster Spawner" + }, + { + "internalName": "snow", + "displayName": "Snow" + }, + { + "internalName": "ice", + "displayName": "Ice" + }, + { + "internalName": "snow_side", + "displayName": "Grass Block (Snowy) (Side)" + }, + { + "internalName": "cactus_top", + "displayName": "Cactus (Top)" + }, + { + "internalName": "cactus_side", + "displayName": "Cactus (Side)" + }, + { + "internalName": "cactus_bottom", + "displayName": "Cactus (Bottom)" + }, + { + "internalName": "clay", + "displayName": "Clay" + }, + { + "internalName": "reeds", + "displayName": "Sugar Canes" + }, + { + "internalName": "jukebox_side", + "displayName": "Jukebox (Side)" + }, + { + "internalName": "jukebox_top", + "displayName": "Jukebox (Top)" + }, + { + "internalName": "waterlily", + "displayName": "Lily Pad", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Tile_WaterLily", + "variants": [ "Tile_WaterLily" ] + } + }, + { + "internalName": "mycel_side", + "displayName": "Mycelium (Side)" + }, + { + "internalName": "mycel_top", + "displayName": "Mycelium (Top)" + }, + { + "internalName": "sapling_birch", + "displayName": "Birch Sapling" + }, + { + "internalName": "torch_on", + "displayName": "Torch" + }, + { + "internalName": "door_wood_upper", + "displayName": "Oak Door (Top)" + }, + { + "internalName": "door_iron_upper", + "displayName": "Iron Door (Top)" + }, + { + "internalName": "ladder", + "displayName": "Ladder" + }, + { + "internalName": "trapdoor", + "displayName": "Oak Trapdoor" + }, + { + "internalName": "iron_bars", + "displayName": "Iron Bars" + }, + { + "internalName": "farmland_wet", + "displayName": "Farmland (Wet)" + }, + { + "internalName": "farmland_dry", + "displayName": "Farmland" + }, + { + "internalName": "crops_0", + "displayName": "Wheat (Stage 1)" + }, + { + "internalName": "crops_1", + "displayName": "Wheat (Stage 2)" + }, + { + "internalName": "crops_2", + "displayName": "Wheat (Stage 3)" + }, + { + "internalName": "crops_3", + "displayName": "Wheat (Stage 4)" + }, + { + "internalName": "crops_4", + "displayName": "Wheat (Stage 5)" + }, + { + "internalName": "crops_5", + "displayName": "Wheat (Stage 6)" + }, + { + "internalName": "crops_6", + "displayName": "Wheat (Stage 7)" + }, + { + "internalName": "crops_7", + "displayName": "Wheat (Stage 8)" + }, + { + "internalName": "lever", + "displayName": "Lever" + }, + { + "internalName": "door_wood_lower", + "displayName": "Oak Door (Bottom)" + }, + { + "internalName": "door_iron_lower", + "displayName": "Iron Door (Bottom)" + }, + { + "internalName": "redstone_torch_on", + "displayName": "Redstone Torch" + }, + { + "internalName": "stonebrick_mossy", + "displayName": "Mossy Stone Bricks" + }, + { + "internalName": "stonebrick_cracked", + "displayName": "Cracked Stone Bricks" + }, + { + "internalName": "pumpkin_top", + "displayName": "Pumpkin (Top)" + }, + { + "internalName": "netherrack", + "displayName": "Netherrack" + }, + { + "internalName": "soul_sand", + "displayName": "Soul Sand" + }, + { + "internalName": "glowstone", + "displayName": "Glowstone" + }, + { + "internalName": "piston_top_sticky", + "displayName": "Sticky Piston (Top)" + }, + { + "internalName": "piston_top", + "displayName": "Piston (Top)" + }, + { + "internalName": "piston_side", + "displayName": "Piston (Side)" + }, + { + "internalName": "piston_bottom", + "displayName": "Piston (Bottom)" + }, + { + "internalName": "piston_inner_top", + "displayName": "Piston (Inside)" + }, + { + "internalName": "stem_straight", + "displayName": "Stem", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Tile_StemMin", + "variants": [ + "Tile_StemMin", + "Tile_StemMax" + ] + } + }, + { + "internalName": "rail_normal_turned", + "displayName": "Rail (Turned)" + }, + { + "internalName": "wool_colored_black", + "displayName": "Black Wool" + }, + { + "internalName": "wool_colored_gray", + "displayName": "Gray Wool" + }, + { + "internalName": "redstone_torch_off", + "displayName": "Redstone Torch (Off)" + }, + { + "internalName": "log_spruce", + "displayName": "Spruce Wood (Side)" + }, + { + "internalName": "log_birch", + "displayName": "Birch Wood (Side)" + }, + { + "internalName": "pumpkin_side", + "displayName": "Pumpkin (Side)" + }, + { + "internalName": "pumpkin_face_off", + "displayName": "Carved Pumpkin" + }, + { + "internalName": "pumpkin_face_on", + "displayName": "Jack-O-Lantern" + }, + { + "internalName": "cake_top", + "displayName": "Cake (Top)" + }, + { + "internalName": "cake_side", + "displayName": "Cake (Side)" + }, + { + "internalName": "cake_inner", + "displayName": "Cake (Inside)" + }, + { + "internalName": "cake_bottom", + "displayName": "Cake (Bottom)" + }, + { + "internalName": "mushroom_block_skin_red", + "displayName": "Mushroom (Red Block)" + }, + { + "internalName": "mushroom_block_skin_brown", + "displayName": "Mushroom (Brown Block)" + }, + { + "internalName": "stem_bent", + "displayName": "Stem (Attached)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Tile_StemMin", + "variants": [ + "Tile_StemMin", + "Tile_StemMax" + ] + } + }, + { + "internalName": "rail_normal", + "displayName": "Rail" + }, + { + "internalName": "wool_colored_red", + "displayName": "Red Wool" + }, + { + "internalName": "wool_colored_pink", + "displayName": "Pink Wool" + }, + { + "internalName": "repeater_off", + "displayName": "Repeater" + }, + { + "internalName": "leaves_spruce", + "displayName": "Spruce Leaves", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Evergreen", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "leaves_spruce_opaque", + "displayName": "Spruce Leaves (Opaque)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Evergreen", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "conduit_top", + "displayName": "Conduit (Break Particles)" + }, + { + "internalName": "turtle_egg_hatch_0", + "displayName": "Sea Turtle Egg (Stage 1)" + }, + { + "internalName": "melon_side", + "displayName": "Melon (Side)" + }, + { + "internalName": "melon_top", + "displayName": "Melon (Top)" + }, + { + "internalName": "cauldron_top", + "displayName": "Cauldron (Top)" + }, + { + "internalName": "cauldron_inner", + "displayName": "Cauldron (Inside)" + }, + { + "internalName": "sponge_wet", + "displayName": "Wet Sponge" + }, + { + "internalName": "mushroom_block_skin_stem", + "displayName": "Mushroom (Stem Block)" + }, + { + "internalName": "mushroom_block_inside", + "displayName": "Mushroom (Inside Block)" + }, + { + "internalName": "vine", + "displayName": "Vines", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "lapis_block", + "displayName": "Lapis Lazuli Block" + }, + { + "internalName": "wool_colored_green", + "displayName": "Green Wool" + }, + { + "internalName": "wool_colored_lime", + "displayName": "Lime Wool" + }, + { + "internalName": "repeater_on", + "displayName": "Redstone Repeater (On)" + }, + { + "internalName": "glass_pane_top", + "displayName": "Glass Pane (Top)" + }, + { + "internalName": "chest_top", + "displayName": "Chest (Break Particles)" + }, + { + "internalName": "ender_chest_top", + "displayName": "Ender Chest (Break Particles)" + }, + { + "internalName": "turtle_egg_hatch_1", + "displayName": "Sea Turtle Egg (Stage 2)" + }, + { + "internalName": "turtle_egg_hatch_2", + "displayName": "Sea Turtle Egg (Stage 3)" + }, + { + "internalName": "log_jungle", + "displayName": "Jungle Wood (Side)" + }, + { + "internalName": "cauldron_side", + "displayName": "Cauldron (Side)" + }, + { + "internalName": "cauldron_bottom", + "displayName": "Cauldron (Bottom)" + }, + { + "internalName": "brewing_stand_base", + "displayName": "Brewing Stand (Base)" + }, + { + "internalName": "brewing_stand", + "displayName": "Brewing Stand" + }, + { + "internalName": "endframe_top", + "displayName": "End Portal Frame (Top)" + }, + { + "internalName": "endframe_side", + "displayName": "End Portal Frame (Side)" + }, + { + "internalName": "lapis_ore", + "displayName": "Lapis Lazuli Ore" + }, + { + "internalName": "wool_colored_brown", + "displayName": "Brown Wool" + }, + { + "internalName": "wool_colored_yellow", + "displayName": "Yellow Wool" + }, + { + "internalName": "rail_golden", + "displayName": "Powered Rail" + }, + { + "internalName": "redstone_dust_cross", + "displayName": "Redstone Dust (Cross)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Tile_RedstoneDust", + "variants": [ + "Tile_RedstoneDust", + "Tile_RedstoneDustUnlit", + "Tile_RedstoneDustLitMin", + "Tile_RedstoneDustLitMax" + ] + } + }, + { + "internalName": "redstone_dust_line", + "displayName": "Redstone Dust (Line)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Tile_RedstoneDust", + "variants": [ + "Tile_RedstoneDust", + "Tile_RedstoneDustUnlit", + "Tile_RedstoneDustLitMin", + "Tile_RedstoneDustLitMax" + ] + } + }, + { + "internalName": "enchantment_top", + "displayName": "Enchantment Table (Top)" + }, + { + "internalName": "dragon_egg", + "displayName": "Dragon Egg" + }, + { + "internalName": "cocoa_2", + "displayName": "Cocoa (Stage 3)" + }, + { + "internalName": "cocoa_1", + "displayName": "Cocoa (Stage 2)" + }, + { + "internalName": "cocoa_0", + "displayName": "Cocoa (Stage 1)" + }, + { + "internalName": "emerald_ore", + "displayName": "Emerald Ore" + }, + { + "internalName": "trip_wire_source", + "displayName": "Tripwire Hook" + }, + { + "internalName": "trip_wire", + "displayName": "Tripwire" + }, + { + "internalName": "endframe_eye", + "displayName": "End Portal Frame (Eye)" + }, + { + "internalName": "end_stone", + "displayName": "End Stone" + }, + { + "internalName": "sandstone_top", + "displayName": "Sandstone (Top)" + }, + { + "internalName": "wool_colored_blue", + "displayName": "Blue Wool" + }, + { + "internalName": "wool_colored_light_blue", + "displayName": "Light Blue Wool" + }, + { + "internalName": "rail_golden_powered", + "displayName": "Powered Rail (On)" + }, + { + "internalName": "redstone_dust_cross_overlay", + "displayName": "Redstone Dust (Cross) (Overlay)" + }, + { + "internalName": "redstone_dust_line_overlay", + "displayName": "Redstone Dust (Line) (Overlay)" + }, + { + "internalName": "enchantment_side", + "displayName": "Enchantment Table (Side)" + }, + { + "internalName": "enchantment_bottom", + "displayName": "Enchantment Table (Bottom)" + }, + { + "internalName": "diamondRing", + "displayName": "Diamond Score Ring" + }, + { + "internalName": "itemframe_back", + "displayName": "Item Frame" + }, + { + "internalName": "flower_pot", + "displayName": "Flower Pot" + }, + { + "internalName": "comparator_off", + "displayName": "Redstone Comparator" + }, + { + "internalName": "comparator_on", + "displayName": "Redstone Comparator (On)" + }, + { + "internalName": "rail_activator", + "displayName": "Activator Rail" + }, + { + "internalName": "rail_activator_powered", + "displayName": "Activator Rail (On)" + }, + { + "internalName": "quartz_ore", + "displayName": "Nether Quartz Ore" + }, + { + "internalName": "sandstone_side", + "displayName": "Sandstone (Side)" + }, + { + "internalName": "wool_colored_purple", + "displayName": "Purple Wool" + }, + { + "internalName": "wool_colored_magenta", + "displayName": "Magenta Wool" + }, + { + "internalName": "detectorRail", + "displayName": "Detector Rail" + }, + { + "internalName": "leaves_jungle", + "displayName": "Jungle Leaves", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "leaves_jungle_opaque", + "displayName": "Jungle Leaves (Opaque)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "planks_spruce", + "displayName": "Spruce Planks" + }, + { + "internalName": "planks_jungle", + "displayName": "Jungle Planks" + }, + { + "internalName": "carrots_stage_0", + "displayName": "Carrots (Stage 1)" + }, + { + "internalName": "carrots_stage_1", + "displayName": "Carrots (Stage 2)" + }, + { + "internalName": "carrots_stage_2", + "displayName": "Carrots (Stage 3)" + }, + { + "internalName": "carrots_stage_3", + "displayName": "Carrots (Stage 4)" + }, + { + "internalName": "slime", + "displayName": "Slime Block" + }, + { + "internalName": "water", + "displayName": "Water", + "hasColourEntry": true, + "colourEntry": { + "isWaterColour": true, + "defaultName": "Water_Plains", + "variants": [ + "Water_Ocean", + "Water_Plains", + "Water_Desert", + "Water_ExtremeHills", + "Water_Forest", + "Water_Taiga", + "Water_Swampland", + "Water_River", + "Water_Hell", + "Water_Sky", + "Water_FrozenOcean", + "Water_FrozenRiver", + "Water_IcePlains", + "Water_IceMountains", + "Water_MushroomIsland", + "Water_MushroomIslandShore", + "Water_Beach", + "Water_DesertHills", + "Water_ForestHills", + "Water_TaigaHills", + "Water_ExtremeHillsEdge", + "Water_Jungle", + "Water_JungleHills", + "Water_JungleEdge", + "Water_DeepOcean", + "Water_StoneBeach", + "Water_ColdBeach", + "Water_BirchForest", + "Water_BirchForestHills", + "Water_RoofedForest", + "Water_ColdTaiga", + "Water_ColdTaigaHills", + "Water_MegaTaiga", + "Water_MegaTaigaHills", + "Water_ExtremeHillsPlus", + "Water_Savanna", + "Water_SavannaPlateau", + "Water_Mesa", + "Water_MesaPlateauF", + "Water_MesaPlateau" + ] + } + }, + { + "internalName": "water_flow", + "displayName": "Flowing Water", + "hasColourEntry": true, + "width": 2, + "height": 2, + "colourEntry": { + "isWaterColour": true, + "defaultName": "Water_Plains", + "variants": [ + "Water_Ocean", + "Water_Plains", + "Water_Desert", + "Water_ExtremeHills", + "Water_Forest", + "Water_Taiga", + "Water_Swampland", + "Water_River", + "Water_Hell", + "Water_Sky", + "Water_FrozenOcean", + "Water_FrozenRiver", + "Water_IcePlains", + "Water_IceMountains", + "Water_MushroomIsland", + "Water_MushroomIslandShore", + "Water_Beach", + "Water_DesertHills", + "Water_ForestHills", + "Water_TaigaHills", + "Water_ExtremeHillsEdge", + "Water_Jungle", + "Water_JungleHills", + "Water_JungleEdge", + "Water_DeepOcean", + "Water_StoneBeach", + "Water_ColdBeach", + "Water_BirchForest", + "Water_BirchForestHills", + "Water_RoofedForest", + "Water_ColdTaiga", + "Water_ColdTaigaHills", + "Water_MegaTaiga", + "Water_MegaTaigaHills", + "Water_ExtremeHillsPlus", + "Water_Savanna", + "Water_SavannaPlateau", + "Water_Mesa", + "Water_MesaPlateauF", + "Water_MesaPlateau" + ] + } + }, + { + "internalName": "water_flow", + "displayName": "" + }, + { + "internalName": "sandstone_bottom", + "displayName": "Sandstone (Bottom)" + }, + { + "internalName": "wool_colored_cyan", + "displayName": "Cyan Wool" + }, + { + "internalName": "wool_colored_orange", + "displayName": "Orange Wool" + }, + { + "internalName": "redstoneLight", + "displayName": "Redstone Lamp" + }, + { + "internalName": "redstoneLight_lit", + "displayName": "Redstone Lamp (On)" + }, + { + "internalName": "stonebrick_carved", + "displayName": "Chiseled Stone Bricks" + }, + { + "internalName": "planks_birch", + "displayName": "Birch Planks" + }, + { + "internalName": "anvil_base", + "displayName": "Anvil (Base)" + }, + { + "internalName": "anvil_top_damaged_1", + "displayName": "Anvil (Slightly Damaged) (Top)" + }, + { + "internalName": "quartz_block_chiseled_top", + "displayName": "Chiseled Quartz Block (Top)" + }, + { + "internalName": "quartz_block_lines_top", + "displayName": "Pillar Quartz Block (Top)" + }, + { + "internalName": "quartz_block_top", + "displayName": "Block of Quartz (Top)" + }, + { + "internalName": "hopper_outside", + "displayName": "Hopper (Side)" + }, + { + "internalName": "detectorRail_on", + "displayName": "Detector Rail (On)" + }, + { + "internalName": "water_flow", + "displayName": "" + }, + { + "internalName": "water_flow", + "displayName": "" + }, + { + "internalName": "nether_brick", + "displayName": "Nether Brick" + }, + { + "internalName": "wool_colored_silver", + "displayName": "Light Gray Wool" + }, + { + "internalName": "nether_wart_stage_0", + "displayName": "Nether Wart (Stage 1)" + }, + { + "internalName": "nether_wart_stage_1", + "displayName": "Nether Wart (Stage 2)" + }, + { + "internalName": "nether_wart_stage_2", + "displayName": "Nether Wart (Stage 3)" + }, + { + "internalName": "sandstone_carved", + "displayName": "Chiseled Sandstone" + }, + { + "internalName": "sandstone_smooth", + "displayName": "Smooth Sandstone" + }, + { + "internalName": "anvil_top", + "displayName": "Anvil (Top)" + }, + { + "internalName": "anvil_top_damaged_2", + "displayName": "Anvil (Very Damaged) (Top)" + }, + { + "internalName": "quartz_block_chiseled", + "displayName": "Chiseled Quartz Block (Side)" + }, + { + "internalName": "quartz_block_lines", + "displayName": "Pillar Quartz Block (Side)" + }, + { + "internalName": "quartz_block_side", + "displayName": "Block of Quartz (Side)" + }, + { + "internalName": "hopper_inside", + "displayName": "Hopper (Inside)" + }, + { + "internalName": "lava", + "displayName": "Lava" + }, + { + "internalName": "lava_flow", + "displayName": "Flowing Lava", + "width": 2, + "height": 2 + }, + { + "internalName": "lava_flow", + "displayName": "", + }, + { + "internalName": "destroy_0", + "displayName": "Destroy (Stage 1)" + }, + { + "internalName": "destroy_1", + "displayName": "Destroy (Stage 2)" + }, + { + "internalName": "destroy_2", + "displayName": "Destroy (Stage 3)" + }, + { + "internalName": "destroy_3", + "displayName": "Destroy (Stage 4)" + }, + { + "internalName": "destroy_4", + "displayName": "Destroy (Stage 5)" + }, + { + "internalName": "destroy_5", + "displayName": "Destroy (Stage 6)" + }, + { + "internalName": "destroy_6", + "displayName": "Destroy (Stage 7)" + }, + { + "internalName": "destroy_7", + "displayName": "Destroy (Stage 8)" + }, + { + "internalName": "destroy_8", + "displayName": "Destroy (Stage 9)" + }, + { + "internalName": "destroy_9", + "displayName": "Destroy (Stage 10)" + }, + { + "internalName": "hay_block_side", + "displayName": "Hay Bale (Side)" + }, + { + "internalName": "quartz_block_bottom", + "displayName": "Quartz Block (Bottom)" + }, + { + "internalName": "hopper_top", + "displayName": "Hopper (Top)" + }, + { + "internalName": "hay_block_top", + "displayName": "Hay Bale (Top)" + }, + { + "internalName": "lava_flow", + "displayName": "", + }, + { + "internalName": "lava_flow", + "displayName": "", + }, + { + "internalName": "coal_block", + "displayName": "Block of Coal" + }, + { + "internalName": "hardened_clay", + "displayName": "Terracotta" + }, + { + "internalName": "noteblock", + "displayName": "Note Block" + }, + { + "internalName": "stone_andesite", + "displayName": "Andesite" + }, + { + "internalName": "stone_andesite_smooth", + "displayName": "Polished Andesite" + }, + { + "internalName": "stone_diorite", + "displayName": "Diorite" + }, + { + "internalName": "stone_diorite_smooth", + "displayName": "Polished Diorite" + }, + { + "internalName": "stone_granite", + "displayName": "Granite" + }, + { + "internalName": "stone_granite_smooth", + "displayName": "Polished Granite" + }, + { + "internalName": "potatoes_stage_0", + "displayName": "Potatoes (Stage 1)" + }, + { + "internalName": "potatoes_stage_1", + "displayName": "Potatoes (Stage 2)" + }, + { + "internalName": "potatoes_stage_2", + "displayName": "Potatoes (Stage 3)" + }, + { + "internalName": "potatoes_stage_3", + "displayName": "Potatoes (Stage 4)" + }, + { + "internalName": "log_spruce_top", + "displayName": "Spruce Wood (Top)" + }, + { + "internalName": "log_jungle_top", + "displayName": "Jungle Wood (Top)" + }, + { + "internalName": "log_birch_top", + "displayName": "Birch Wood (Top)" + }, + { + "internalName": "hardened_clay_stained_black", + "displayName": "Black Terracotta" + }, + { + "internalName": "hardened_clay_stained_blue", + "displayName": "Blue Terracotta" + }, + { + "internalName": "hardened_clay_stained_brown", + "displayName": "Brown Terracotta" + }, + { + "internalName": "hardened_clay_stained_cyan", + "displayName": "Cyan Terracotta" + }, + { + "internalName": "hardened_clay_stained_gray", + "displayName": "Gray Terracotta" + }, + { + "internalName": "hardened_clay_stained_green", + "displayName": "Green Terracotta" + }, + { + "internalName": "hardened_clay_stained_light_blue", + "displayName": "Light Blue Terracotta" + }, + { + "internalName": "hardened_clay_stained_lime", + "displayName": "Lime Terracotta" + }, + { + "internalName": "hardened_clay_stained_magenta", + "displayName": "Magenta Terracotta" + }, + { + "internalName": "hardened_clay_stained_orange", + "displayName": "Orange Terracotta" + }, + { + "internalName": "hardened_clay_stained_pink", + "displayName": "Pink Terracotta" + }, + { + "internalName": "hardened_clay_stained_purple", + "displayName": "Purple Terracotta" + }, + { + "internalName": "hardened_clay_stained_red", + "displayName": "Red Terracotta" + }, + { + "internalName": "hardened_clay_stained_silver", + "displayName": "Light Gray Terracotta" + }, + { + "internalName": "hardened_clay_stained_white", + "displayName": "White Terracotta" + }, + { + "internalName": "hardened_clay_stained_yellow", + "displayName": "Yellow Terracotta" + }, + { + "internalName": "glass_black", + "displayName": "Black Stained Glass" + }, + { + "internalName": "glass_blue", + "displayName": "Blue Stained Glass" + }, + { + "internalName": "glass_brown", + "displayName": "Brown Stained Glass" + }, + { + "internalName": "glass_cyan", + "displayName": "Cyan Stained Glass" + }, + { + "internalName": "glass_gray", + "displayName": "Gray Stained Glass" + }, + { + "internalName": "glass_green", + "displayName": "Green Stained Glass" + }, + { + "internalName": "glass_light_blue", + "displayName": "Light Blue Stained Glass" + }, + { + "internalName": "glass_lime", + "displayName": "Lime Stained Glass" + }, + { + "internalName": "glass_magenta", + "displayName": "Magenta Stained Glass" + }, + { + "internalName": "glass_orange", + "displayName": "Orange Stained Glass" + }, + { + "internalName": "glass_pink", + "displayName": "Pink Stained Glass" + }, + { + "internalName": "glass_purple", + "displayName": "Purple Stained Glass" + }, + { + "internalName": "glass_red", + "displayName": "Red Stained Glass" + }, + { + "internalName": "glass_silver", + "displayName": "Light Gray Stained Glass" + }, + { + "internalName": "glass_white", + "displayName": "White Stained Glass" + }, + { + "internalName": "glass_yellow", + "displayName": "Yellow Stained Glass" + }, + { + "internalName": "glass_pane_top_black", + "displayName": "Black Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_blue", + "displayName": "Blue Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_brown", + "displayName": "Brown Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_cyan", + "displayName": "Cyan Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_gray", + "displayName": "Gray Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_green", + "displayName": "Green Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_light_blue", + "displayName": "Light Blue Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_lime", + "displayName": "Lime Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_magenta", + "displayName": "Magenta Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_orange", + "displayName": "Orange Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_pink", + "displayName": "Pink Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_purple", + "displayName": "Purple Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_red", + "displayName": "Red Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_silver", + "displayName": "Light Gray Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_white", + "displayName": "White Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_yellow", + "displayName": "Yellow Stained Glass Pane (Top)" + }, + { + "internalName": "double_plant_fern_top", + "displayName": "Large Fern (Top)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "double_plant_grass_top", + "displayName": "Double Tall Grass (Top)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "double_plant_paeonia_top", + "displayName": "Peony (Top)" + }, + { + "internalName": "double_plant_rose_top", + "displayName": "Rose Bush (Top)" + }, + { + "internalName": "double_plant_syringa_top", + "displayName": "Lilac (Top)" + }, + { + "internalName": "flower_tulip_orange", + "displayName": "Orange Tulip" + }, + { + "internalName": "double_plant_sunflower_top", + "displayName": "Sunflower (Top)" + }, + { + "internalName": "double_plant_sunflower_front", + "displayName": "Sunflower (Front)" + }, + { + "internalName": "log_acacia", + "displayName": "Acacia Wood (Side)" + }, + { + "internalName": "log_acacia_top", + "displayName": "Acacia Wood (Top)" + }, + { + "internalName": "planks_acacia", + "displayName": "Acacia Planks" + }, + { + "internalName": "leaves_acacia", + "displayName": "Acacia Leaves", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "leaves_acacia_fast", + "displayName": "Acacia Leaves (Opaque)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "prismarine_bricks", + "displayName": "Prismarine Bricks" + }, + { + "internalName": "red_sand", + "displayName": "Red Sand" + }, + { + "internalName": "red_sandstone_top", + "displayName": "Red Sandstone (Top)" + }, + { + "internalName": "double_plant_fern_bottom", + "displayName": "Large Fern (Bottom)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "double_plant_grass_bottom", + "displayName": "Double Tall Grass (Bottom)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "double_plant_paeonia_bottom", + "displayName": "Peony (Bottom)" + }, + { + "internalName": "double_plant_rose_bottom", + "displayName": "Rose Bush (Bottom)" + }, + { + "internalName": "double_plant_syringa_bottom", + "displayName": "Lilac (Bottom)" + }, + { + "internalName": "flower_tulip_pink", + "displayName": "Pink Tulip" + }, + { + "internalName": "double_plant_sunflower_bottom", + "displayName": "Sunflower (Bottom)" + }, + { + "internalName": "double_plant_sunflower_back", + "displayName": "Sunflower (Back)" + }, + { + "internalName": "log_big_oak", + "displayName": "Dark Oak Wood (Side)" + }, + { + "internalName": "log_big_oak_top", + "displayName": "Dark Oak Wood (Top)" + }, + { + "internalName": "planks_big_oak", + "displayName": "Dark Oak Planks" + }, + { + "internalName": "leaves_big_oak", + "displayName": "Dark Oak Leaves", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "leaves_big_oak_fast", + "displayName": "Dark Oak Leaves (Opaque)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "prismarine_dark", + "displayName": "Dark Prismarine" + }, + { + "internalName": "red_sandstone_bottom", + "displayName": "Red Sandstone (Bottom)" + }, + { + "internalName": "red_sandstone_normal", + "displayName": "Red Sandstone (Side)" + }, + { + "internalName": "flower_alium", + "displayName": "Allium" + }, + { + "internalName": "flower_blue_orchid", + "displayName": "Blue Orchid" + }, + { + "internalName": "flower_houstonia", + "displayName": "Azure Bluet" + }, + { + "internalName": "flower_oxeye_daisy", + "displayName": "Oxeye Daisy" + }, + { + "internalName": "flower_tulip_red", + "displayName": "Red Tulip" + }, + { + "internalName": "flower_tulip_white", + "displayName": "White Tulip" + }, + { + "internalName": "sapling_acacia", + "displayName": "Acacia Sapling" + }, + { + "internalName": "sapling_roofed_oak", + "displayName": "Dark Oak Sapling" + }, + { + "internalName": "coarse_dirt", + "displayName": "Coarse Dirt" + }, + { + "internalName": "dirt_podzol_side", + "displayName": "Podzol (Side)" + }, + { + "internalName": "dirt_podzol_top", + "displayName": "Podzol (Top)" + }, + { + "internalName": "leaves_birch", + "displayName": "Birch Leaves", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Birch", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "leaves_birch_fast", + "displayName": "Birch Leaves (Opaque)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Birch", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "prismarine_rough", + "displayName": "Prismarine" + }, + { + "internalName": "red_sandstone_carved", + "displayName": "Chiseled Red Sandstone" + }, + { + "internalName": "red_sandstone_smooth", + "displayName": "Smooth Red Standstone" + }, + { + "internalName": "door_acacia_upper", + "displayName": "Acacia Door (Top)" + }, + { + "internalName": "door_birch_upper", + "displayName": "Birch Door (Top)" + }, + { + "internalName": "door_dark_oak_upper", + "displayName": "Dark Oak Door (Top)" + }, + { + "internalName": "door_jungle_upper", + "displayName": "Jungle Door (Top)" + }, + { + "internalName": "door_spruce_upper", + "displayName": "Spruce Door (Top)" + }, + { + "internalName": "chorus_flower", + "displayName": "Chorus Flower" + }, + { + "internalName": "chorus_flower_dead", + "displayName": "Chorus Flower (Dead)" + }, + { + "internalName": "chorus_flower_plant", + "displayName": "Chorus Plant" + }, + { + "internalName": "end_bricks", + "displayName": "End Stone Bricks" + }, + { + "internalName": "grass_path_side", + "displayName": "Grass Path (Side)" + }, + { + "internalName": "grass_path_top", + "displayName": "Grass Path (Top)" + }, + { + "internalName": "barrier", + "displayName": "Barrier" + }, + { + "internalName": "ice_packed", + "displayName": "Packed Ice" + }, + { + "internalName": "sea_lantern", + "displayName": "Sea Lantern" + }, + { + "internalName": "daylight_detector_inverted_top", + "displayName": "Daylight Sensor (Inverted) (Top)" + }, + { + "internalName": "iron_trapdoor", + "displayName": "Iron Trapdoor" + }, + { + "internalName": "door_acacia_lower", + "displayName": "Acacia Door (Bottom)" + }, + { + "internalName": "door_birch_lower", + "displayName": "Birch Door (Bottom)" + }, + { + "internalName": "door_dark_oak_lower", + "displayName": "Dark Oak Door (Bottom)" + }, + { + "internalName": "door_jungle_lower", + "displayName": "Jungle Door (Bottom)" + }, + { + "internalName": "door_spruce_lower", + "displayName": "Spruce Door (Bottom)" + }, + { + "internalName": "purpur_block", + "displayName": "Purpur Block" + }, + { + "internalName": "purpur_pillar", + "displayName": "Purpur Pillar (Side)" + }, + { + "internalName": "purpur_pillar_top", + "displayName": "Purpur Pillar (Top)" + }, + { + "internalName": "end_rod", + "displayName": "End Rod" + }, + { + "internalName": "magma", + "displayName": "Magma Block" + }, + { + "internalName": "nether_wart_block", + "displayName": "Nether Wart Block" + }, + { + "internalName": "red_nether_brick", + "displayName": "Red Nether Brick" + }, + { + "internalName": "frosted_ice_0", + "displayName": "Frosted Ice (Stage 1)" + }, + { + "internalName": "frosted_ice_1", + "displayName": "Frosted Ice (Stage 2)" + }, + { + "internalName": "frosted_ice_2", + "displayName": "Frosted Ice (Stage 3)" + }, + { + "internalName": "frosted_ice_3", + "displayName": "Frosted Ice (Stage 4)" + }, + { + "internalName": "beetroots_stage_0", + "displayName": "Beetroots (Stage 1)" + }, + { + "internalName": "beetroots_stage_1", + "displayName": "Beetroots (Stage 2)" + }, + { + "internalName": "beetroots_stage_2", + "displayName": "Beetroots (Stage 3)" + }, + { + "internalName": "beetroots_stage_3", + "displayName": "Beetroots (Stage 4)" + }, + { + "internalName": "chain_command_block_back", + "displayName": "Chain Command Block (Back)" + }, + { + "internalName": "chain_command_block_conditional", + "displayName": "Chain Command Block (Conditional) (Side)" + }, + { + "internalName": "chain_command_block_front", + "displayName": "Chain Command Block (Front)" + }, + { + "internalName": "chain_command_block_side", + "displayName": "Chain Command Block (Side)" + }, + { + "internalName": "command_block_back", + "displayName": "Command Block (Back)" + }, + { + "internalName": "command_block_conditional", + "displayName": "Command Block (Conditional) (Side)" + }, + { + "internalName": "command_block_front", + "displayName": "Command Block (Front)" + }, + { + "internalName": "command_block_side", + "displayName": "Command Block (Side)" + }, + { + "internalName": "repeating_command_block_back", + "displayName": "Repeating Command Block (Back)" + }, + { + "internalName": "repeating_command_block_conditional", + "displayName": "Repeating Command Block (Conditional) (Side)" + }, + { + "internalName": "repeating_command_block_front", + "displayName": "Repeating Command Block (Front)" + }, + { + "internalName": "repeating_command_block_side", + "displayName": "Repeating Command Block (Side)" + }, + { + "internalName": "bone_block_side", + "displayName": "Bone Block (Side)" + }, + { + "internalName": "bone_block_top", + "displayName": "Bone Block (Top)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "observer_front", + "displayName": "Observer (Front)" + }, + { + "internalName": "observer_side", + "displayName": "Observer (Side)" + }, + { + "internalName": "observer_back", + "displayName": "Observer (Back)" + }, + { + "internalName": "observer_back_lit", + "displayName": "Observer (On) (Back)" + }, + { + "internalName": "observer_top", + "displayName": "Observer (Top and Bottom)" + }, + { + "internalName": "goldRing", + "displayName": "Gold Score Ring" + }, + { + "internalName": "emeraldRing", + "displayName": "Emerald Score Ring" + }, + { + "internalName": "structure_block", + "displayName": "Structure Block" + }, + { + "internalName": "structure_block_corner", + "displayName": "Structure Block (Corner)" + }, + { + "internalName": "structure_block_data", + "displayName": "Structure Block (Data)" + }, + { + "internalName": "structure_block_load", + "displayName": "Structure Block (Load)" + }, + { + "internalName": "structure_block_save", + "displayName": "Structure Block (Save)" + }, + { + "internalName": "concrete_black", + "displayName": "Black Concrete" + }, + { + "internalName": "concrete_blue", + "displayName": "Blue Concrete" + }, + { + "internalName": "concrete_brown", + "displayName": "Brown Concrete" + }, + { + "internalName": "concrete_cyan", + "displayName": "Cyan Concrete" + }, + { + "internalName": "concrete_gray", + "displayName": "Gray Concrete" + }, + { + "internalName": "concrete_green", + "displayName": "Green Concrete" + }, + { + "internalName": "concrete_light_blue", + "displayName": "Light Blue Concrete" + }, + { + "internalName": "concrete_lime", + "displayName": "Lime Concrete" + }, + { + "internalName": "concrete_magenta", + "displayName": "Magenta Concrete" + }, + { + "internalName": "concrete_orange", + "displayName": "Orange Concrete" + }, + { + "internalName": "concrete_pink", + "displayName": "Pink Concrete" + }, + { + "internalName": "concrete_purple", + "displayName": "Purple Concrete" + }, + { + "internalName": "concrete_red", + "displayName": "Red Concrete" + }, + { + "internalName": "concrete_silver", + "displayName": "Light Gray Concrete" + }, + { + "internalName": "concrete_white", + "displayName": "White Concrete" + }, + { + "internalName": "concrete_yellow", + "displayName": "Yellow Concrete" + }, + { + "internalName": "concrete_powder_black", + "displayName": "Black Concrete Powder" + }, + { + "internalName": "concrete_powder_blue", + "displayName": "Blue Concrete Powder" + }, + { + "internalName": "concrete_powder_brown", + "displayName": "Brown Concrete Powder" + }, + { + "internalName": "concrete_powder_cyan", + "displayName": "Cyan Concrete Powder" + }, + { + "internalName": "concrete_powder_gray", + "displayName": "Gray Concrete Powder" + }, + { + "internalName": "concrete_powder_green", + "displayName": "Green Concrete Powder" + }, + { + "internalName": "concrete_powder_light_blue", + "displayName": "Light Blue Concrete Powder" + }, + { + "internalName": "concrete_powder_lime", + "displayName": "Lime Concrete Powder" + }, + { + "internalName": "concrete_powder_magenta", + "displayName": "Magenta Concrete Powder" + }, + { + "internalName": "concrete_powder_orange", + "displayName": "Orange Concrete Powder" + }, + { + "internalName": "concrete_powder_pink", + "displayName": "Pink Concrete Powder" + }, + { + "internalName": "concrete_powder_purple", + "displayName": "Purple Concrete Powder" + }, + { + "internalName": "concrete_powder_red", + "displayName": "Red Concrete Powder" + }, + { + "internalName": "concrete_powder_silver", + "displayName": "Light Gray Concrete Powder" + }, + { + "internalName": "concrete_powder_white", + "displayName": "White Concrete Powder" + }, + { + "internalName": "concrete_powder_yellow", + "displayName": "Yellow Concrete Powder" + }, + { + "internalName": "glazed_terracotta_black", + "displayName": "Black Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_blue", + "displayName": "Blue Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_brown", + "displayName": "Brown Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_cyan", + "displayName": "Cyan Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_gray", + "displayName": "Gray Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_green", + "displayName": "Green Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_light_blue", + "displayName": "Light Blue Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_lime", + "displayName": "Lime Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_magenta", + "displayName": "Magenta Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_orange", + "displayName": "Orange Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_pink", + "displayName": "Pink Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_purple", + "displayName": "Purple Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_red", + "displayName": "Red Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_silver", + "displayName": "Light Gray Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_white", + "displayName": "White Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_yellow", + "displayName": "Yellow Glazed Terracotta" + }, + { + "internalName": "shulker_top", + "displayName": "Shulker Box (Break Particles)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Shulker_Box_Purple", + "variants": [ + "Shulker_Box_Black", + "Shulker_Box_Blue", + "Shulker_Box_Brown", + "Shulker_Box_Cyan", + "Shulker_Box_Grey", + "Shulker_Box_Green", + "Shulker_Box_Light_Blue", + "Shulker_Box_Light_Green", + "Shulker_Box_Magenta", + "Shulker_Box_Orange", + "Shulker_Box_Pink", + "Shulker_Box_Purple", + "Shulker_Box_Red", + "Shulker_Box_Silver", + "Shulker_Box_White", + "Shulker_Box_Yellow" + ] + } + }, + { + "internalName": "shulker_top_overlay", + "displayName": "Shulker Box (Break Particles) (Overlay) (Unused)" + }, + { + "internalName": "cauldron_water", + "displayName": "Cauldron Water", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "Cauldron_Water", + "variants": [ + "Cauldron_Water", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "seagrass_doubletall_top", + "displayName": "Double Tall Seagrass (Top)" + }, + { + "internalName": "coral_blue", + "displayName": "Tube Coral Block" + }, + { + "internalName": "coral_purple", + "displayName": "Bubble Coral Block" + }, + { + "internalName": "coral_pink", + "displayName": "Brain Coral Block" + }, + { + "internalName": "coral_red", + "displayName": "Fire Coral Block" + }, + { + "internalName": "coral_yellow", + "displayName": "Horn Coral Block" + }, + { + "internalName": "coral_plant_blue", + "displayName": "Tube Coral" + }, + { + "internalName": "coral_plant_purple", + "displayName": "Bubble Coral" + }, + { + "internalName": "coral_plant_pink", + "displayName": "Brain Coral" + }, + { + "internalName": "coral_plant_red", + "displayName": "Fire Coral" + }, + { + "internalName": "coral_plant_yellow", + "displayName": "Horn Coral" + }, + { + "internalName": "sea_pickle", + "displayName": "Sea Pickle" + }, + { + "internalName": "blue_ice", + "displayName": "Blue Ice" + }, + { + "internalName": "dried_kelp_top", + "displayName": "Dried Kelp Block (Top)" + }, + { + "internalName": "dried_kelp_side", + "displayName": "Dried Kelp Block (Side)" + }, + { + "internalName": "seagrass_carried", + "displayName": "Seagrass (Item)" + }, + { + "internalName": "seagrass_doubletall_bottom", + "displayName": "Double Tall Seagrass (Bottom)" + }, + { + "internalName": "coral_blue_dead", + "displayName": "Dead Tube Coral Block" + }, + { + "internalName": "coral_purple_dead", + "displayName": "Dead Bubble Coral Block" + }, + { + "internalName": "coral_pink_dead", + "displayName": "Dead Brain Coral Block" + }, + { + "internalName": "coral_red_dead", + "displayName": "Dead Fire Coral Block" + }, + { + "internalName": "coral_yellow_dead", + "displayName": "Dead Horn Coral Block" + }, + { + "internalName": "coral_fan_blue", + "displayName": "Tube Coral Fan" + }, + { + "internalName": "coral_fan_purple", + "displayName": "Bubble Coral Fan" + }, + { + "internalName": "coral_fan_pink", + "displayName": "Brain Coral Fan" + }, + { + "internalName": "coral_fan_red", + "displayName": "Fire Coral Fan" + }, + { + "internalName": "coral_fan_yellow", + "displayName": "Horn Coral Fan" + }, + { + "internalName": "bamboo_stem", + "displayName": "Bamboo (Stem) [PS4 ONLY]" + }, + { + "internalName": "bamboo_leaf_small", + "displayName": "Bamboo (Small Leaves) [PS4 ONLY]" + }, + { + "internalName": "kelp_a", + "displayName": "Kelp (Bottom)" + }, + { + "internalName": "kelp_a", + "displayName": "" + }, + { + "internalName": "kelp_a", + "displayName": "" + }, + { + "internalName": "kelp_a", + "displayName": "" + }, + { + "internalName": "kelp_top_a", + "displayName": "Kelp (Top)" + }, + { + "internalName": "kelp_top_a", + "displayName": "" + }, + { + "internalName": "kelp_top_a", + "displayName": "" + }, + { + "internalName": "kelp_top_a", + "displayName": "" + }, + { + "internalName": "seagrass", + "displayName": "Seagrass" + }, + { + "internalName": "coral_fan_blue_dead", + "displayName": "Dead Tube Coral Fan" + }, + { + "internalName": "coral_fan_purple_dead", + "displayName": "Dead Bubble Coral Fan" + }, + { + "internalName": "coral_fan_pink_dead", + "displayName": "Dead Brain Coral Fan" + }, + { + "internalName": "coral_fan_red_dead", + "displayName": "Dead Fire Coral Fan" + }, + { + "internalName": "coral_fan_yellow_dead", + "displayName": "Dead Horn Coral Fan" + }, + { + "internalName": "bamboo_leaf", + "displayName": "Bamboo (Leaves) [PS4 ONLY]" + }, + { + "internalName": "spruce_trapdoor", + "displayName": "Spruce Trapdoor" + }, + { + "internalName": "stripped_log_oak", + "displayName": "Stripped Oak Log (Side)" + }, + { + "internalName": "stripped_log_oak_top", + "displayName": "Stripped Oak Log (Top)" + }, + { + "internalName": "stripped_log_acacia", + "displayName": "Stripped Acacia Log (Side)" + }, + { + "internalName": "stripped_log_acacia_top", + "displayName": "Stripped Acacia Log (Top)" + }, + { + "internalName": "stripped_log_birch", + "displayName": "Stripped Birch Log (Side)" + }, + { + "internalName": "stripped_log_birch_top", + "displayName": "Stripped Birch Log (Top)" + }, + { + "internalName": "stripped_log_dark_oak", + "displayName": "Stripped Dark Oak Log (Side)" + }, + { + "internalName": "stripped_log_dark_oak_top", + "displayName": "Stripped Dark Oak Log (Top)" + }, + { + "internalName": "stripped_log_jungle", + "displayName": "Stripped Jungle Log (Side)" + }, + { + "internalName": "stripped_log_jungle_top", + "displayName": "Stripped Birch Log (Top)" + }, + { + "internalName": "stripped_log_spruce", + "displayName": "Stripped Spruce Log (Side)" + }, + { + "internalName": "stripped_log_spruce_top", + "displayName": "Stripped Spruce Log (Top)" + }, + { + "internalName": "acacia_trapdoor", + "displayName": "Acacia Trapdoor" + }, + { + "internalName": "birch_trapdoor", + "displayName": "Birch Trapdoor" + }, + { + "internalName": "dark_oak_trapdoor", + "displayName": "Dark Oak Trapdoor" + }, + { + "internalName": "jungle_trapdoor", + "displayName": "Jungle Trapdoor" + }, + { + "internalName": "bamboo_sapling", + "displayName": "Bamboo Sapling [PS4 ONLY]" + }, + { + "internalName": "bamboo_singleleaf", + "displayName": "Bamboo (Single Leaf) [PS4 ONLY]" + }, + { + "internalName": "flower_lily_of_the_valley", + "displayName": "Lily of the Valley [PS4 ONLY]" + }, + { + "internalName": "flower_cornflower", + "displayName": "Cornflower [PS4 ONLY]" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "berry_bush_sapling", + "displayName": "Sweet Berry Bush (Stage 1) [PS4 ONLY]" + }, + { + "internalName": "berry_bush_no_berries", + "displayName": "Sweet Berry Bush (Stage 2) [PS4 ONLY]" + }, + { + "internalName": "berry_bush_some_berries", + "displayName": "Sweet Berry Bush (Stage 3) [PS4 ONLY]" + }, + { + "internalName": "berry_bush_full_berries", + "displayName": "Sweet Berry Bush (Stage 4) [PS4 ONLY]" + }, + { + "internalName": "campfire_log", + "displayName": "Campfire (Log) [PS4 ONLY]" + }, + { + "internalName": "campfire_log_lit", + "displayName": "Campfire (Log) (Lit) [PS4 ONLY]" + }, + { + "internalName": "campfire_smoke", + "displayName": "Campfire (Smoke) [PS4 ONLY]" + }, + { + "internalName": "campfire", + "displayName": "Campfire (Flame) [PS4 ONLY]" + }, + { + "internalName": "scaffolding_side", + "displayName": "Scaffolding (Side) [PS4 ONLY]" + }, + { + "internalName": "scaffolding_bottom", + "displayName": "Scaffolding (Bottom) [PS4 ONLY]" + }, + { + "internalName": "scaffolding_top", + "displayName": "Scaffolding (Top) [PS4 ONLY]" + }, + { + "internalName": "barrel_side", + "displayName": "Barrel (Side) [PS4 ONLY]" + }, + { + "internalName": "barrel_top", + "displayName": "Barrel (Top) [PS4 ONLY]" + }, + { + "internalName": "barrel_bottom", + "displayName": "Barrel (Bottom) [PS4 ONLY]" + }, + { + "internalName": "bell_side", + "displayName": "Bell (Side) [PS4 ONLY]" + }, + { + "internalName": "bell_top", + "displayName": "Bell (Top) [PS4 ONLY]" + }, + { + "internalName": "bell_bottom", + "displayName": "Bell (Bottom) [PS4 ONLY]" + }, + { + "internalName": "lantern", + "displayName": "Lantern [PS4 ONLY]" + }, + { + "internalName": "jigsaw_side", + "displayName": "Jigsaw (Side) [PS4 ONLY]" + }, + { + "internalName": "jigsaw_top", + "displayName": "Jigsaw (Top) [PS4 ONLY]" + }, + { + "internalName": "blast_furnace_front", + "displayName": "Blast Furnace (Front) [PS4 ONLY]" + }, + { + "internalName": "blast_furnace_front_on", + "displayName": "Blast Furnace (Front) (Lit) [PS4 ONLY]" + }, + { + "internalName": "blast_furnace_side", + "displayName": "Blast Furnace (Side) [PS4 ONLY]" + }, + { + "internalName": "blast_furnace_top", + "displayName": "Blast Furnace (Top) [PS4 ONLY]" + }, + { + "internalName": "grindstone_side", + "displayName": "Grindstone (Side) [PS4 ONLY]" + }, + { + "internalName": "grindstone_round", + "displayName": "Grindstone (Round) [PS4 ONLY]" + }, + { + "internalName": "grindstone_pivot", + "displayName": "Grindstone (Pivot) [PS4 ONLY]" + }, + { + "internalName": "cartography_table_side1", + "displayName": "Cartography Table (Back) [PS4 ONLY]" + }, + { + "internalName": "cartography_table_side2", + "displayName": "Cartography Table (Right Side) [PS4 ONLY]" + }, + { + "internalName": "cartography_table_side3", + "displayName": "Cartography Table (Front and Left Side) [PS4 ONLY]" + }, + { + "internalName": "cartography_table_top", + "displayName": "Cartography Table (Top) [PS4 ONLY]" + }, + { + "internalName": "lectern_sides", + "displayName": "Lectern (Side) [PS4 ONLY]" + }, + { + "internalName": "lectern_front", + "displayName": "Lectern (Front) [PS4 ONLY]" + }, + { + "internalName": "lectern_base", + "displayName": "Lectern (Base) [PS4 ONLY]" + }, + { + "internalName": "lectern_top", + "displayName": "Lectern (Top) [PS4 ONLY]" + }, + { + "internalName": "loom_side", + "displayName": "Loom (Side) [PS4 ONLY]" + }, + { + "internalName": "loom_front", + "displayName": "Loom (Front) [PS4 ONLY]" + }, + { + "internalName": "loom_top", + "displayName": "Loom (Top) [PS4 ONLY]" + }, + { + "internalName": "loom_bottom", + "displayName": "Loom (Bottom) [PS4 ONLY]" + }, + { + "internalName": "smithing_table_side", + "displayName": "Smithing Table (Side) [PS4 ONLY]" + }, + { + "internalName": "smithing_table_front", + "displayName": "Smithing Table (Front) [PS4 ONLY]" + }, + { + "internalName": "smithing_table_top", + "displayName": "Smithing Table (Top) [PS4 ONLY]" + }, + { + "internalName": "composter_top", + "displayName": "Composter (Top) [PS4 ONLY]" + }, + { + "internalName": "fletcher_table_side2", + "displayName": "Fletching Table (Front and Back) [PS4 ONLY]" + }, + { + "internalName": "fletcher_table_side1", + "displayName": "Fletching Table (Side) [PS4 ONLY]" + }, + { + "internalName": "fletcher_table_top", + "displayName": "Fletching Table (Top) [PS4 ONLY]" + }, + { + "internalName": "stonecutter2_saw", + "displayName": "Stonecutter (Saw) [PS4 ONLY]" + }, + { + "internalName": "stonecutter2_side", + "displayName": "Stonecutter (Side) [PS4 ONLY]" + }, + { + "internalName": "stonecutter2_top", + "displayName": "Stonecutter (Top) [PS4 ONLY]" + }, + { + "internalName": "stonecutter2_bottom", + "displayName": "Stonecutter (Bottom) [PS4 ONLY]" + }, + { + "internalName": "smoker_side", + "displayName": "Smoker (Side) [PS4 ONLY]" + }, + { + "internalName": "smoker_front", + "displayName": "Smoker (Front) [PS4 ONLY]" + }, + { + "internalName": "smoker_front_on", + "displayName": "Smoker (Front) (Lit) [PS4 ONLY]" + }, + { + "internalName": "smoker_top", + "displayName": "Smoker (Top) [PS4 ONLY]" + }, + { + "internalName": "smoker_bottom", + "displayName": "Smoker (Bottom) [PS4 ONLY]" + }, + { + "internalName": "compost", + "displayName": "Compost [PS4 ONLY]" + }, + { + "internalName": "compost_ready", + "displayName": "Compost (Ready) [PS4 ONLY]" + }, + { + "internalName": "composter_bottom", + "displayName": "Composter (Bottom) [PS4 ONLY]" + }, + { + "internalName": "composter_side", + "displayName": "Composter (Side) [PS4 ONLY]" + }, + { + "internalName": "barrel_top_open", + "displayName": "Barrel (Top) (Open) [PS4 ONLY]" + }, + { + "internalName": "smithing_table_bottom", + "displayName": "Smithing Table (Bottom) [PS4 ONLY]" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + } + ] +} diff --git a/PCK-Studio/Resources/atlases/experienceOrbData.json b/PCK-Studio/Resources/atlases/experienceOrbData.json new file mode 100644 index 00000000..90a6d2fe --- /dev/null +++ b/PCK-Studio/Resources/atlases/experienceOrbData.json @@ -0,0 +1,124 @@ +{ + "COMMENT_1": "JSON by MattNL", + "experience_orbs": [ + { + "internalName": "experience_orb_0", + "displayName": "Experience Orb (Size 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_1", + "displayName": "Experience Orb (Size 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_2", + "displayName": "Experience Orb (Size 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_3", + "displayName": "Experience Orb (Size 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_4", + "displayName": "Experience Orb (Size 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_5", + "displayName": "Experience Orb (Size 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_6", + "displayName": "Experience Orb (Size 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_7", + "displayName": "Experience Orb (Size 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_8", + "displayName": "Experience Orb (Size 9)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_9", + "displayName": "Experience Orb (Size 10)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_10", + "displayName": "Experience Orb (Size 11)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + } + ] +} \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/explosionData.json b/PCK-Studio/Resources/atlases/explosionData.json new file mode 100644 index 00000000..77ae7b56 --- /dev/null +++ b/PCK-Studio/Resources/atlases/explosionData.json @@ -0,0 +1,197 @@ +{ + "COMMENT_1": "JSON by MattNL", + "explosion": [ + { + "internalName": "explosion_0", + "displayName": "Explosion (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_1", + "displayName": "Explosion (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_2", + "displayName": "Explosion (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_3", + "displayName": "Explosion (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_4", + "displayName": "Explosion (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_5", + "displayName": "Explosion (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_6", + "displayName": "Explosion (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_7", + "displayName": "Explosion (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_8", + "displayName": "Explosion (Stage 9)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_9", + "displayName": "Explosion (Stage 10)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_10", + "displayName": "Explosion (Stage 11)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_11", + "displayName": "Explosion (Stage 12)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_12", + "displayName": "Explosion (Stage 13)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_13", + "displayName": "Explosion (Stage 14)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_14", + "displayName": "Explosion (Stage 15)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_15", + "displayName": "Explosion (Stage 16)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + } + ] +} \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/itemData.json b/PCK-Studio/Resources/atlases/itemData.json new file mode 100644 index 00000000..e69e114d --- /dev/null +++ b/PCK-Studio/Resources/atlases/itemData.json @@ -0,0 +1,1366 @@ +{ + "COMMENT_1": "Tile data research by MattNL", + "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", + "items": [ + { + "internalName": "helmetCloth", + "displayName": "Leather Cap", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "Armour_Default_Leather_Colour", + "variants": [ "Armour_Default_Leather_Colour" ] + } + }, + { + "internalName": "helmetChain", + "displayName": "Chain Helmet" + }, + { + "internalName": "helmetIron", + "displayName": "Iron Helmet" + }, + { + "internalName": "helmetDiamond", + "displayName": "Diamond Helmet" + }, + { + "internalName": "helmetGold", + "displayName": "Golden Helmet" + }, + { + "internalName": "flintAndSteel", + "displayName": "Flint and Steel" + }, + { + "internalName": "flint", + "displayName": "Flint" + }, + { + "internalName": "coal", + "displayName": "Coal" + }, + { + "internalName": "string", + "displayName": "String" + }, + { + "internalName": "seeds", + "displayName": "Seeds" + }, + { + "internalName": "apple", + "displayName": "Apple" + }, + { + "internalName": "appleGold", + "displayName": "Golden Apple" + }, + { + "internalName": "egg", + "displayName": "Egg" + }, + { + "internalName": "sugar", + "displayName": "Sugar" + }, + { + "internalName": "snowball", + "displayName": "Snowball" + }, + { + "internalName": "elytra", + "displayName": "Elytra" + }, + { + "internalName": "chestplateCloth", + "displayName": "Leather Tunic", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "Armour_Default_Leather_Colour", + "variants": [ "Armour_Default_Leather_Colour" ] + } + }, + { + "internalName": "chestplateChain", + "displayName": "Chain Chestplate" + }, + { + "internalName": "chestplateIron", + "displayName": "Iron Chestplate" + }, + { + "internalName": "chestplateDiamond", + "displayName": "Diamond Chestplate" + }, + { + "internalName": "chestplateGold", + "displayName": "Golden Chestplate" + }, + { + "internalName": "bow", + "displayName": "Bow" + }, + { + "internalName": "brick", + "displayName": "Brick" + }, + { + "internalName": "ingotIron", + "displayName": "Iron Ingot" + }, + { + "internalName": "feather", + "displayName": "Feather" + }, + { + "internalName": "wheat", + "displayName": "Wheat" + }, + { + "internalName": "painting", + "displayName": "Painting" + }, + { + "internalName": "reeds", + "displayName": "Sugar Canes" + }, + { + "internalName": "bone", + "displayName": "Bone" + }, + { + "internalName": "cake", + "displayName": "Cake" + }, + { + "internalName": "slimeball", + "displayName": "Slimeball" + }, + { + "internalName": "broken_elytra", + "displayName": "Elytra (Broken)" + }, + { + "internalName": "leggingsCloth", + "displayName": "Leather Pants", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "Armour_Default_Leather_Colour", + "variants": [ "Armour_Default_Leather_Colour" ] + } + }, + { + "internalName": "leggingsChain", + "displayName": "Chain Leggings" + }, + { + "internalName": "leggingsIron", + "displayName": "Iron Leggings" + }, + { + "internalName": "leggingsDiamond", + "displayName": "Diamond Leggings" + }, + { + "internalName": "leggingsGold", + "displayName": "Golden Leggings" + }, + { + "internalName": "arrow", + "displayName": "Arrow" + }, + { + "internalName": "end_crystal", + "displayName": "End Crystal" + }, + { + "internalName": "ingotGold", + "displayName": "Gold Ingot" + }, + { + "internalName": "sulphur", + "displayName": "Gunpowder" + }, + { + "internalName": "bread", + "displayName": "Bread" + }, + { + "internalName": "sign", + "displayName": "Oak Sign" + }, + { + "internalName": "doorWood", + "displayName": "Oak Door" + }, + { + "internalName": "doorIron", + "displayName": "Iron Door" + }, + { + "internalName": "bed", + "displayName": "Bed" + }, + { + "internalName": "fireball", + "displayName": "Fire Charge" + }, + { + "internalName": "chorus_fruit", + "displayName": "Chorus Fruit" + }, + { + "internalName": "bootsCloth", + "displayName": "Leather Boots", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "Armour_Default_Leather_Colour", + "variants": [ "Armour_Default_Leather_Colour" ] + } + }, + { + "internalName": "bootsChain", + "displayName": "Chain Boots" + }, + { + "internalName": "bootsIron", + "displayName": "Iron Boots" + }, + { + "internalName": "bootsDiamond", + "displayName": "Diamond Boots" + }, + { + "internalName": "bootsGold", + "displayName": "Golden Boots" + }, + { + "internalName": "stick", + "displayName": "Stick" + }, + { + "internalName": "compass", + "displayName": "Compass" + }, + { + "internalName": "diamond", + "displayName": "Diamond" + }, + { + "internalName": "redstone", + "displayName": "Redstone" + }, + { + "internalName": "clay", + "displayName": "Clay" + }, + { + "internalName": "paper", + "displayName": "Paper" + }, + { + "internalName": "book", + "displayName": "Book" + }, + { + "internalName": "map", + "displayName": "Map" + }, + { + "internalName": "seeds_pumpkin", + "displayName": "Pumpkin Seeds" + }, + { + "internalName": "seeds_melon", + "displayName": "Melon Seeds" + }, + { + "internalName": "chorus_fruit_popped", + "displayName": "Popped Chorus Fruit" + }, + { + "internalName": "swordWood", + "displayName": "Wooden Sword" + }, + { + "internalName": "swordStone", + "displayName": "Stone Sword" + }, + { + "internalName": "swordIron", + "displayName": "Iron Sword" + }, + { + "internalName": "swordDiamond", + "displayName": "Diamond Sword" + }, + { + "internalName": "swordGold", + "displayName": "Golden Sword" + }, + { + "internalName": "fishingRod_uncast", + "displayName": "Fishing Rod" + }, + { + "internalName": "clock", + "displayName": "Clock" + }, + { + "internalName": "bowl", + "displayName": "Bowl" + }, + { + "internalName": "mushroomStew", + "displayName": "Mushroom Stew" + }, + { + "internalName": "yellowDust", + "displayName": "Glowstone Dust" + }, + { + "internalName": "bucket", + "displayName": "Bucket" + }, + { + "internalName": "bucketWater", + "displayName": "Water Bucket" + }, + { + "internalName": "bucketLava", + "displayName": "Lava Bucket" + }, + { + "internalName": "milk", + "displayName": "Milk Bucket" + }, + { + "internalName": "dyePowder_black", + "displayName": "Ink Sac" + }, + { + "internalName": "dyePowder_gray", + "displayName": "Gray Dye" + }, + { + "internalName": "shovelWood", + "displayName": "Wooden Shovel" + }, + { + "internalName": "shovelStone", + "displayName": "Stone Shovel" + }, + { + "internalName": "shovelIron", + "displayName": "Iron Shovel" + }, + { + "internalName": "shovelDiamond", + "displayName": "Diamond Shovel" + }, + { + "internalName": "shovelGold", + "displayName": "Golden Shovel" + }, + { + "internalName": "fishingRod_cast", + "displayName": "Fishing Rod (Cast)" + }, + { + "internalName": "diode", + "displayName": "Redstone Repeater" + }, + { + "internalName": "porkchopRaw", + "displayName": "Raw Porkchop" + }, + { + "internalName": "porkchopCooked", + "displayName": "Cooked Porkchop" + }, + { + "internalName": "fishRaw", + "displayName": "Raw Cod" + }, + { + "internalName": "fishCooked", + "displayName": "Cooked Cod" + }, + { + "internalName": "rottenFlesh", + "displayName": "Rotten Flesh" + }, + { + "internalName": "cookie", + "displayName": "Cookie" + }, + { + "internalName": "shears", + "displayName": "Shears" + }, + { + "internalName": "dyePowder_red", + "displayName": "Rose Red" + }, + { + "internalName": "dyePowder_pink", + "displayName": "Pink Dye" + }, + { + "internalName": "pickaxeWood", + "displayName": "Wooden Pickaxe" + }, + { + "internalName": "pickaxeStone", + "displayName": "Stone Pickaxe" + }, + { + "internalName": "pickaxeIron", + "displayName": "Iron Pickaxe" + }, + { + "internalName": "pickaxeDiamond", + "displayName": "Diamond Pickaxe" + }, + { + "internalName": "pickaxeGold", + "displayName": "Golden Pickaxe" + }, + { + "internalName": "bow_pull_0", + "displayName": "Bow (Pulling Stage 1)" + }, + { + "internalName": "carrotOnAStick", + "displayName": "Carrot on a Stick" + }, + { + "internalName": "leather", + "displayName": "Leather" + }, + { + "internalName": "saddle", + "displayName": "Saddle" + }, + { + "internalName": "beefRaw", + "displayName": "Raw Beef" + }, + { + "internalName": "beefCooked", + "displayName": "Steak" + }, + { + "internalName": "enderPearl", + "displayName": "Ender Pearl" + }, + { + "internalName": "blazeRod", + "displayName": "Blaze Rod" + }, + { + "internalName": "melon", + "displayName": "Melon Slice" + }, + { + "internalName": "dyePowder_green", + "displayName": "Cactus Green" + }, + { + "internalName": "dyePowder_lime", + "displayName": "Lime Dye" + }, + { + "internalName": "hatchetWood", + "displayName": "Wooden Axe" + }, + { + "internalName": "hatchetStone", + "displayName": "Stone Axe" + }, + { + "internalName": "hatchetIron", + "displayName": "Iron Axe" + }, + { + "internalName": "hatchetDiamond", + "displayName": "Diamond Axe" + }, + { + "internalName": "hatchetGold", + "displayName": "Golden Axe" + }, + { + "internalName": "bow_pull_1", + "displayName": "Bow (Pulling Stage 2)" + }, + { + "internalName": "potatoBaked", + "displayName": "Baked Potato" + }, + { + "internalName": "potato", + "displayName": "Potato" + }, + { + "internalName": "carrots", + "displayName": "Carrot" + }, + { + "internalName": "chickenRaw", + "displayName": "Raw Chicken" + }, + { + "internalName": "chickenCooked", + "displayName": "Cooked Chicken" + }, + { + "internalName": "ghastTear", + "displayName": "Ghast Tear" + }, + { + "internalName": "goldNugget", + "displayName": "Gold Nugget" + }, + { + "internalName": "netherStalkSeeds", + "displayName": "Nether Wart" + }, + { + "internalName": "dyePowder_brown", + "displayName": "Cocoa Beans" + }, + { + "internalName": "dyePowder_yellow", + "displayName": "Dandelion Yellow" + }, + { + "internalName": "hoeWood", + "displayName": "Wooden Hoe" + }, + { + "internalName": "hoeStone", + "displayName": "Stone Hoe" + }, + { + "internalName": "hoeIron", + "displayName": "Iron Hoe" + }, + { + "internalName": "hoeDiamond", + "displayName": "Diamond Hoe" + }, + { + "internalName": "hoeGold", + "displayName": "Golden Hoe" + }, + { + "internalName": "bow_pull_2", + "displayName": "Bow (Pulling Stage 3)" + }, + { + "internalName": "potatoPoisonous", + "displayName": "Poisonous Potato" + }, + { + "internalName": "minecart", + "displayName": "Minecart" + }, + { + "internalName": "boat", + "displayName": "Oak Boat" + }, + { + "internalName": "speckledMelon", + "displayName": "Glistering Melon" + }, + { + "internalName": "fermentedSpiderEye", + "displayName": "Fermented Spider Eye" + }, + { + "internalName": "spiderEye", + "displayName": "Spider Eye" + }, + { + "internalName": "glassBottle", + "displayName": "Glass Bottle" + }, + { + "internalName": "potion_contents", + "displayName": "Potion (Overlay)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "dyePowder_blue", + "displayName": "Lapis Lazuli" + }, + { + "internalName": "dyePowder_light_blue", + "displayName": "Light Blue Dye" + }, + { + "internalName": "helmetCloth_overlay", + "displayName": "Leather Cap (Overlay)" + }, + { + "internalName": "spectral_arrow", + "displayName": "Spectral Arrow" + }, + { + "internalName": "iron_horse_armor", + "displayName": "Iron Horse Armor" + }, + { + "internalName": "diamond_horse_armor", + "displayName": "Diamond Horse Armor" + }, + { + "internalName": "gold_horse_armor", + "displayName": "Gold Horse Armor" + }, + { + "internalName": "comparator", + "displayName": "Redstone Comparator" + }, + { + "internalName": "carrotGolden", + "displayName": "Golden Carrot" + }, + { + "internalName": "minecart_chest", + "displayName": "Minecart with Chest" + }, + { + "internalName": "pumpkinPie", + "displayName": "Pumpkin Pie" + }, + { + "internalName": "monsterPlacer", + "displayName": "Spawn Egg", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Mob_Creeper_Colour1", + "variants": [ + "Mob_Creeper_Colour1", + "Mob_Skeleton_Colour1", + "Mob_Spider_Colour1", + "Mob_Zombie_Colour1", + "Mob_Slime_Colour1", + "Mob_Ghast_Colour1", + "Mob_PigZombie_Colour1", + "Mob_Enderman_Colour1", + "Mob_CaveSpider_Colour1", + "Mob_Silverfish_Colour1", + "Mob_Blaze_Colour1", + "Mob_LavaSlime_Colour1", + "Mob_Pig_Colour1", + "Mob_Sheep_Colour1", + "Mob_Cow_Colour1", + "Mob_Chicken_Colour1", + "Mob_Squid_Colour1", + "Mob_Wolf_Colour1", + "Mob_MushroomCow_Colour1", + "Mob_Ocelot_Colour1", + "Mob_Villager_Colour1", + "Mob_Bat_Colour1", + "Mob_Witch_Colour1", + "Mob_Horse_Colour1", + "Mob_Endermite_Color1", + "Mob_Guardian_Color1", + "Mob_Rabbit_Colour1", + "Mob_PolarBear_Colour1", + "Mob_Shulker_Colour1", + "Mob_Elder_Guardian_Colour1", + "Mob_Evocation_Illager_Colour1", + "Mob_Llama_Colour1", + "Mob_Donkey_Colour1", + "Mob_Skeleton_Horse_Colour1", + "Mob_Zombie_Horse_Colour1", + "Mob_Mule_Colour1", + "Mob_Stray_Colour1", + "Mob_Husk_Colour1", + "Mob_Vex_Colour1", + "Mob_Vindication_Illager_Colour1", + "Mob_Zombie_Villager_Colour1", + "Mob_Parrot_Colour1", + "Mob_Wither_Skeleton_Colour1", + "Mob_Turtle_Colour1", + "Mob_Tropical_Colour1", + "Mob_Cod_Colour1", + "Mob_Pufferfish_Colour1", + "Mob_Salmon_Colour1", + "Mob_Drowned_Colour1", + "Mob_Dolphin_Colour1", + "Mob_Phantom_Colour1" + ] + } + }, + { + "internalName": "potion_splash", + "displayName": "Splash Potion" + }, + { + "internalName": "eyeOfEnder", + "displayName": "Eye of Ender" + }, + { + "internalName": "cauldron", + "displayName": "Cauldron" + }, + { + "internalName": "blazePowder", + "displayName": "Blaze Powder" + }, + { + "internalName": "dyePowder_purple", + "displayName": "Purple Dye" + }, + { + "internalName": "dyePowder_magenta", + "displayName": "Magenta Dye" + }, + { + "internalName": "chestplateCloth_overlay", + "displayName": "Leather Tunic (Overlay)" + }, + { + "internalName": "tipped_arrow_base", + "displayName": "Tipped Arrow" + }, + { + "internalName": "dragon_breath", + "displayName": "Dragon's Breath" + }, + { + "internalName": "name_tag", + "displayName": "Name Tag" + }, + { + "internalName": "lead", + "displayName": "Lead" + }, + { + "internalName": "netherbrick", + "displayName": "Nether Brick" + }, + { + "internalName": "fish_clownfish_raw", + "displayName": "Tropical Fish" + }, + { + "internalName": "minecart_furnace", + "displayName": "Minecart with Furnace" + }, + { + "internalName": "charcoal", + "displayName": "Charcoal" + }, + { + "internalName": "monsterPlacer_overlay", + "displayName": "Spawn Egg (Overlay)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Mob_Creeper_Colour2", + "variants": [ + "Mob_Creeper_Colour2", + "Mob_Skeleton_Colour2", + "Mob_Spider_Colour2", + "Mob_Zombie_Colour2", + "Mob_Slime_Colour2", + "Mob_Ghast_Colour2", + "Mob_PigZombie_Colour2", + "Mob_Enderman_Colour2", + "Mob_CaveSpider_Colour2", + "Mob_Silverfish_Colour2", + "Mob_Blaze_Colour2", + "Mob_LavaSlime_Colour2", + "Mob_Pig_Colour2", + "Mob_Sheep_Colour2", + "Mob_Cow_Colour2", + "Mob_Chicken_Colour2", + "Mob_Squid_Colour2", + "Mob_Wolf_Colour2", + "Mob_MushroomCow_Colour2", + "Mob_Ocelot_Colour2", + "Mob_Villager_Colour2", + "Mob_Bat_Colour2", + "Mob_Witch_Colour2", + "Mob_Horse_Colour2", + "Mob_Endermite_Color2", + "Mob_Guardian_Color2", + "Mob_Rabbit_Colour2", + "Mob_PolarBear_Colour2", + "Mob_Shulker_Colour2", + "Mob_Elder_Guardian_Colour2", + "Mob_Evocation_Illager_Colour2", + "Mob_Llama_Colour2", + "Mob_Donkey_Colour2", + "Mob_Skeleton_Horse_Colour2", + "Mob_Zombie_Horse_Colour2", + "Mob_Mule_Colour2", + "Mob_Stray_Colour2", + "Mob_Husk_Colour2", + "Mob_Vex_Colour2", + "Mob_Vindication_Illager_Colour2", + "Mob_Zombie_Villager_Colour2", + "Mob_Parrot_Colour2", + "Mob_Wither_Skeleton_Colour2", + "Mob_Turtle_Colour2", + "Mob_Tropical_Colour2", + "Mob_Cod_Colour2", + "Mob_Pufferfish_Colour2", + "Mob_Salmon_Colour2", + "Mob_Drowned_Colour2", + "Mob_Dolphin_Colour2", + "Mob_Phantom_Colour2" + ] + } + }, + { + "internalName": "bed_overlay", + "displayName": "Bed (Overlay)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Bed_White", + "variants": [ + "Bed_Black", + "Bed_Blue", + "Bed_Brown", + "Bed_Cyan", + "Bed_Grey", + "Bed_Green", + "Bed_Light_Blue", + "Bed_Lime", + "Bed_Magenta", + "Bed_Orange", + "Bed_Pink", + "Bed_Purple", + "Bed_Red", + "Bed_Silver", + "Bed_White", + "Bed_Yellow" + ] + } + }, + { + "internalName": "expBottle", + "displayName": "Bottle o'Enchanting" + }, + { + "internalName": "brewingStand", + "displayName": "Brewing Stand" + }, + { + "internalName": "magmaCream", + "displayName": "Magma Cream" + }, + { + "internalName": "dyePowder_cyan", + "displayName": "Cyan Dye" + }, + { + "internalName": "dyePowder_orange", + "displayName": "Orange Dye" + }, + { + "internalName": "leggingsCloth_overlay", + "displayName": "Leather Pants (Overlay)" + }, + { + "internalName": "tipped_arrow_head", + "displayName": "Tipped Arrow (Overlay)" + }, + { + "internalName": "potion_bottle_lingering", + "displayName": "Lingering Potion" + }, + { + "internalName": "barrier", + "displayName": "debug_fourj_item" + }, + { + "internalName": "mutton_raw", + "displayName": "Raw Mutton" + }, + { + "internalName": "rabbit_raw", + "displayName": "Raw Rabbit" + }, + { + "internalName": "fish_pufferfish_raw", + "displayName": "Pufferfish" + }, + { + "internalName": "minecart_hopper", + "displayName": "Minecart with Hopper" + }, + { + "internalName": "hopper", + "displayName": "Hopper" + }, + { + "internalName": "nether_star", + "displayName": "Nether Star" + }, + { + "internalName": "emerald", + "displayName": "Emerald" + }, + { + "internalName": "writingBook", + "displayName": "Book and Quill" + }, + { + "internalName": "writtenBook", + "displayName": "Written Book" + }, + { + "internalName": "flowerPot", + "displayName": "Flower Pot" + }, + { + "internalName": "dyePowder_silver", + "displayName": "Light Gray Dye" + }, + { + "internalName": "dyePowder_white", + "displayName": "Bone Meal" + }, + { + "internalName": "bootsCloth_overlay", + "displayName": "Leather Boots (Overlay)" + }, + { + "internalName": "beetroot", + "displayName": "Beetroot" + }, + { + "internalName": "beetroot_seeds", + "displayName": "Beetroot Seeds" + }, + { + "internalName": "beetroot_soup", + "displayName": "Beetroot Soup" + }, + { + "internalName": "mutton_cooked", + "displayName": "Cooked Mutton" + }, + { + "internalName": "rabbit_cooked", + "displayName": "Cooked Rabbit" + }, + { + "internalName": "fish_salmon_raw", + "displayName": "Raw Salmon" + }, + { + "internalName": "minecart_tnt", + "displayName": "Minecart with TNT" + }, + { + "internalName": "wooden_armorstand", + "displayName": "Armor Stand" + }, + { + "internalName": "fireworks", + "displayName": "Firework Rocket" + }, + { + "internalName": "fireworks_charge", + "displayName": "Firework Star" + }, + { + "internalName": "fireworks_charge_overlay", + "displayName": "Firework Star (Overlay)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "", + "variants": [""] + } + }, + { + "internalName": "netherquartz", + "displayName": "Nether Quartz" + }, + { + "internalName": "map_empty", + "displayName": "Empty Map" + }, + { + "internalName": "frame", + "displayName": "Item Frame" + }, + { + "internalName": "enchantedBook", + "displayName": "Enchanted Book" + }, + { + "internalName": "door_acacia", + "displayName": "Acacia Door" + }, + { + "internalName": "door_birch", + "displayName": "Birch Door" + }, + { + "internalName": "door_dark_oak", + "displayName": "Dark Oak Door" + }, + { + "internalName": "door_jungle", + "displayName": "Jungle Door" + }, + { + "internalName": "door_spruce", + "displayName": "Spruce Door" + }, + { + "internalName": "rabbit_stew", + "displayName": "Rabbit Stew" + }, + { + "internalName": "fish_salmon_cooked", + "displayName": "Cooked Salmon" + }, + { + "internalName": "minecart_command_block", + "displayName": "Minecart with Command Block" + }, + { + "internalName": "acacia_boat", + "displayName": "Acacia Boat" + }, + { + "internalName": "birch_boat", + "displayName": "Birch Boat" + }, + { + "internalName": "dark_oak_boat", + "displayName": "Dark Oak Boat" + }, + { + "internalName": "jungle_boat", + "displayName": "Jungle Boat" + }, + { + "internalName": "spruce_boat", + "displayName": "Spruce Boat" + }, + { + "internalName": "prismarine_shard", + "displayName": "Prismarine Shard" + }, + { + "internalName": "prismarine_crystals", + "displayName": "Prismarine Crystals" + }, + { + "internalName": "leather_horse_armor_base", + "displayName": "Leather Horse Armor", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "Armour_Default_Leather_Colour", + "variants": [ "Armour_Default_Leather_Colour" ] + } + }, + { + "internalName": "structure_void", + "displayName": "Structure Void" + }, + { + "internalName": "map_filled_markings", + "displayName": "Filled Map (Overlay)" + }, + { + "internalName": "totem", + "displayName": "Totem of Undying" + }, + { + "internalName": "shulker_shell", + "displayName": "Shulker Shell" + }, + { + "internalName": "iron_nugget", + "displayName": "Iron Nugget" + }, + { + "internalName": "rabbit_foot", + "displayName": "Rabbit's Foot" + }, + { + "internalName": "rabbit_hide", + "displayName": "Rabbit Hide" + }, + { + "internalName": "compass", + "displayName": "" + }, + { + "internalName": "compass", + "displayName": "" + }, + { + "internalName": "compass", + "displayName": "" + }, + { + "internalName": "compass", + "displayName": "" + }, + { + "internalName": "clock", + "displayName": "" + }, + { + "internalName": "clock", + "displayName": "" + }, + { + "internalName": "clock", + "displayName": "" + }, + { + "internalName": "clock", + "displayName": "" + }, + { + "internalName": "dragonFireball", + "displayName": "Dragon Fireball" + }, + { + "internalName": "record_13", + "displayName": "Music Disc (C418 - 13)" + }, + { + "internalName": "record_cat", + "displayName": "Music Disc (C418 - cat)" + }, + { + "internalName": "record_blocks", + "displayName": "Music Disc (C418 - blocks)" + }, + { + "internalName": "record_chirp", + "displayName": "Music Disc (C418 - chirp)" + }, + { + "internalName": "record_far", + "displayName": "Music Disc (C418 - far)" + }, + { + "internalName": "record_mall", + "displayName": "Music Disc (C418 - mall)" + }, + { + "internalName": "record_mellohi", + "displayName": "Music Disc (C418 - mellohi)" + }, + { + "internalName": "record_stal", + "displayName": "Music Disc (C418 - stal)" + }, + { + "internalName": "record_strad", + "displayName": "Music Disc (C418 - strad)" + }, + { + "internalName": "record_ward", + "displayName": "Music Disc (C418 - ward)" + }, + { + "internalName": "record_11", + "displayName": "Music Disc (C418 - 11)" + }, + { + "internalName": "record_where are we now", + "displayName": "Music Disc (C418 - wait)" + }, + { + "internalName": "bucketFish", + "displayName": "Bucket of Cod" + }, + { + "internalName": "bucketSalmon", + "displayName": "Bucket of Salmon" + }, + { + "internalName": "bucketPuffer", + "displayName": "Bucket of Pufferfish" + }, + { + "internalName": "bucketTropical", + "displayName": "Bucket of Tropical Fish" + }, + { + "internalName": "leather_horse_armor_detail", + "displayName": "Leather Horse Armor (Overlay)" + }, + { + "internalName": "dyePowder_black1", + "displayName": "Black Dye [PS4 ONLY]" + }, + { + "internalName": "dyePowder_blue1", + "displayName": "Blue Dye [PS4 ONLY]" + }, + { + "internalName": "dyePowder_brown1", + "displayName": "Brown Dye [PS4 ONLY]" + }, + { + "internalName": "dyePowder_white1", + "displayName": "White Dye [PS4 ONLY]" + }, + { + "internalName": "bamboo", + "displayName": "Bamboo [PS4 ONLY]" + }, + { + "internalName": "lantern_carried", + "displayName": "Lantern [PS4 ONLY]" + }, + { + "internalName": "kelp", + "displayName": "Kelp" + }, + { + "internalName": "dried_kelp", + "displayName": "Dried Kelp" + }, + { + "internalName": "sea_pickle", + "displayName": "Sea Pickle" + }, + { + "internalName": "nautilus", + "displayName": "Nautilus Shell" + }, + { + "internalName": "nautilus_core", + "displayName": "Heart of the Sea" + }, + { + "internalName": "turtle_helmet", + "displayName": "Turtle Shell" + }, + { + "internalName": "turtle_shell_piece", + "displayName": "Scute" + }, + { + "internalName": "trident", + "displayName": "Trident" + }, + { + "internalName": "phantom_membrane", + "displayName": "Phantom Membrane" + }, + { + "internalName": "acacia_sign", + "displayName": "Acacia Sign [PS4 ONLY]" + }, + { + "internalName": "birch_sign", + "displayName": "Birch Sign [PS4 ONLY]" + }, + { + "internalName": "dark_oak_sign", + "displayName": "Dark Oak Sign [PS4 ONLY]" + }, + { + "internalName": "jungle_sign", + "displayName": "Jungle Sign [PS4 ONLY]" + }, + { + "internalName": "spruce_sign", + "displayName": "Spruce Sign [PS4 ONLY]" + }, + { + "internalName": "crossbow", + "displayName": "Crossbow [PS4 ONLY]" + }, + { + "internalName": "crossbow_pull_0", + "displayName": "Crossbow (Pulling Stage 1) [PS4 ONLY]" + }, + { + "internalName": "crossbow_pull_1", + "displayName": "Crossbow (Pulling Stage 2) [PS4 ONLY]" + }, + { + "internalName": "crossbow_pull_2", + "displayName": "Crossbow (Pulling Stage 3) [PS4 ONLY]" + }, + { + "internalName": "crossbow_arrow", + "displayName": "Crossbow (Loaded) [PS4 ONLY]" + }, + { + "internalName": "crossbow_firework", + "displayName": "Crossbow (Loaded) (Firework) [PS4 ONLY]" + }, + { + "internalName": "sweet_berries", + "displayName": "Sweet Berries [PS4 ONLY]" + }, + { + "internalName": "banner_pattern", + "displayName": "Banner Pattern [PS4 ONLY]" + }, + { + "internalName": "bell", + "displayName": "Bell [PS4 ONLY]" + }, + { + "internalName": "campfire_carried", + "displayName": "Campfire [PS4 ONLY]" + }, + { + "internalName": "", + "displayName": "" + } + ] +} diff --git a/PCK-Studio/Resources/atlases/mapIconData.json b/PCK-Studio/Resources/atlases/mapIconData.json new file mode 100644 index 00000000..6e505fd8 --- /dev/null +++ b/PCK-Studio/Resources/atlases/mapIconData.json @@ -0,0 +1,135 @@ +{ + "COMMENT_1": "JSON by MattNL", + "map_icons": [ + { + "internalName": "player_1", + "displayName": "Player 1" + }, + { + "internalName": "player_2", + "displayName": "Player 2" + }, + { + "internalName": "player_3", + "displayName": "Player 3" + }, + { + "internalName": "player_4", + "displayName": "Player 4" + }, + { + "internalName": "target_x", + "displayName": "Unused" + }, + { + "internalName": "target_point", + "displayName": "Target Point (Unused)" + }, + { + "internalName": "player_off_map", + "displayName": "Player (Off Map) (Unused)" + }, + { + "internalName": "frame", + "displayName": "Item Frame" + }, + { + "internalName": "player_5", + "displayName": "Player 5" + }, + { + "internalName": "player_6", + "displayName": "Player 6" + }, + { + "internalName": "player_7", + "displayName": "Player 7" + }, + { + "internalName": "player_8", + "displayName": "Player 8" + }, + { + "internalName": "structure", + "displayName": "Structure (Explorer Map)" + }, + { + "internalName": "player_off_limits", + "displayName": "Player (Off Limits) (Unused)" + }, + { + "internalName": "mansion", + "displayName": "Woodland Mansion (Explorer Map)" + }, + { + "internalName": "monument", + "displayName": "Ocean Monument (Explorer Map)" + } + ], + "additional_map_icons": [ + { + "internalName": "player_1_off_map", + "displayName": "Player 1 (Off Map)" + }, + { + "internalName": "player_2_off_map", + "displayName": "Player 2 (Off Map)" + }, + { + "internalName": "player_3_off_map", + "displayName": "Player 3 (Off Map)" + }, + { + "internalName": "player_4_off_map", + "displayName": "Player 4 (Off Map)" + }, + { + "internalName": "treasure", + "displayName": "Buried Treasure" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "player_5_off_map", + "displayName": "Player 5 (Off Map)" + }, + { + "internalName": "player_6_off_map", + "displayName": "Player 6 (Off Map)" + }, + { + "internalName": "player_7_off_map", + "displayName": "Player 7 (Off Map)" + }, + { + "internalName": "player_8_off_map", + "displayName": "Player 8 (Off Map)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + } + ] +} diff --git a/PCK-Studio/Resources/atlases/moonPhaseData.json b/PCK-Studio/Resources/atlases/moonPhaseData.json new file mode 100644 index 00000000..a65a1b53 --- /dev/null +++ b/PCK-Studio/Resources/atlases/moonPhaseData.json @@ -0,0 +1,37 @@ +{ + "COMMENT_1": "JSON by MattNL", + "moon_phases": [ + { + "internalName": "moon_phase_0", + "displayName": "Full Moon" + }, + { + "internalName": "moon_phase_1", + "displayName": "Waning Gibbous" + }, + { + "internalName": "moon_phase_2", + "displayName": "Last Quarter" + }, + { + "internalName": "moon_phase_3", + "displayName": "Waning Crescent" + }, + { + "internalName": "moon_phase_4", + "displayName": "New Moon" + }, + { + "internalName": "moon_phase_5", + "displayName": "Waxing Crescent" + }, + { + "internalName": "moon_phase_6", + "displayName": "First Quarter" + }, + { + "internalName": "moon_phase_7", + "displayName": "Waxing Gibbous" + } + ] +} diff --git a/PCK-Studio/Resources/atlases/particleData.json b/PCK-Studio/Resources/atlases/particleData.json new file mode 100644 index 00000000..2c9015df --- /dev/null +++ b/PCK-Studio/Resources/atlases/particleData.json @@ -0,0 +1,2112 @@ +{ + "COMMENT_1": "JSON by MattNL", + "particles": [ + { + "internalName": "generic_0", + "displayName": "Generic (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "generic_1", + "displayName": "Generic (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "generic_2", + "displayName": "Generic (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "generic_3", + "displayName": "Generic (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "generic_4", + "displayName": "Generic (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "generic_5", + "displayName": "Generic (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "generic_6", + "displayName": "Generic (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "generic_7", + "displayName": "Generic (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "unused_splash_0", + "displayName": "Splash (Stage 1) (Unused)" + }, + { + "internalName": "unused_splash_1", + "displayName": "Splash (Stage 2) (Unused)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "splash_0", + "displayName": "Splash (Stage 1)" + }, + { + "internalName": "splash_1", + "displayName": "Splash (Stage 2)" + }, + { + "internalName": "splash_2", + "displayName": "Splash (Stage 3)" + }, + { + "internalName": "splash_3", + "displayName": "Splash (Stage 4)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "classic_bubble", + "displayName": "Bubble (Unused)" + }, + { + "internalName": "bobber", + "displayName": "Fishing Bobber" + }, + { + "internalName": "bubble", + "displayName": "Bubble", + "hasColourEntry": true, + "colourEntry": { + "isWaterColour": true, + "defaultName": "Water_Plains", + "variants": [ + "Water_Ocean", + "Water_Plains", + "Water_Desert", + "Water_ExtremeHills", + "Water_Forest", + "Water_Taiga", + "Water_Swampland", + "Water_River", + "Water_Hell", + "Water_Sky", + "Water_FrozenOcean", + "Water_FrozenRiver", + "Water_IcePlains", + "Water_IceMountains", + "Water_MushroomIsland", + "Water_MushroomIslandShore", + "Water_Beach", + "Water_DesertHills", + "Water_ForestHills", + "Water_TaigaHills", + "Water_ExtremeHillsEdge", + "Water_Jungle", + "Water_JungleHills", + "Water_JungleEdge", + "Water_DeepOcean", + "Water_StoneBeach", + "Water_ColdBeach", + "Water_BirchForest", + "Water_BirchForestHills", + "Water_RoofedForest", + "Water_ColdTaiga", + "Water_ColdTaigaHills", + "Water_MegaTaiga", + "Water_MegaTaigaHills", + "Water_ExtremeHillsPlus", + "Water_Savanna", + "Water_SavannaPlateau", + "Water_Mesa", + "Water_MesaPlateauF", + "Water_MesaPlateau" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "Firework Flash", + "width": 4, + "height": 4, + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "", + "variants": [""] + } + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "flame", + "displayName": "Flame" + }, + { + "internalName": "lava", + "displayName": "Lava" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "note", + "displayName": "Noteblock Note", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Note_00", + "variants": [ + "Particle_Note_00", + "Particle_Note_01", + "Particle_Note_02", + "Particle_Note_03", + "Particle_Note_04", + "Particle_Note_05", + "Particle_Note_06", + "Particle_Note_07", + "Particle_Note_08", + "Particle_Note_09", + "Particle_Note_10", + "Particle_Note_11", + "Particle_Note_12", + "Particle_Note_13", + "Particle_Note_14", + "Particle_Note_15", + "Particle_Note_16", + "Particle_Note_17", + "Particle_Note_18", + "Particle_Note_19", + "Particle_Note_20", + "Particle_Note_21", + "Particle_Note_22", + "Particle_Note_23", + "Particle_Note_24", + ] + } + }, + { + "internalName": "critical_hit", + "displayName": "Critical Hit", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "critical_hit", + "variants": [ "critical_hit" ] + } + }, + { + "internalName": "enchanted_hit", + "displayName": "Enchanted Hit", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "critical_hit", + "variants": [ "critical_hit" ] + } + }, + { + "internalName": "damage", + "displayName": "Damage Indicator" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "heart", + "displayName": "Heart" + }, + { + "internalName": "angry", + "displayName": "Angry" + }, + { + "internalName": "glint", + "displayName": "Glint" + }, + { + "internalName": "angry_villager", + "displayName": "Angry Villager (Unused)" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "water_0", + "displayName": "Water (Stage 1) (Unused)" + }, + { + "internalName": "water_1", + "displayName": "Water (Stage 2) (Unused)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "bubble_pop_0", + "displayName": "Bubble Pop (Stage 1) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_0", + "displayName": "" + }, + { + "internalName": "bubble_pop_1", + "displayName": "Bubble Pop (Stage 2) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_1", + "displayName": "" + }, + { + "internalName": "bubble_pop_2", + "displayName": "Bubble Pop (Stage 3) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_2", + "displayName": "" + }, + { + "internalName": "bubble_pop_3", + "displayName": "Bubble Pop (Stage 4) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_3", + "displayName": "" + }, + { + "internalName": "bubble_pop_4", + "displayName": "Bubble Pop (Stage 5) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_4", + "displayName": "" + }, + { + "internalName": "drip_hang", + "displayName": "Drip (Hang)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_DripWater", + "variants": [ + "Particle_DripWater", + "Particle_DripLavaStart", + "Particle_DripLavaEnd" + ] + } + }, + { + "internalName": "drip_fall", + "displayName": "Drip (Fall)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_DripWater", + "variants": [ + "Particle_DripWater", + "Particle_DripLavaStart", + "Particle_DripLavaEnd" + ] + } + }, + { + "internalName": "drip_land", + "displayName": "Drip (Land)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_DripWater", + "variants": [ + "Particle_DripWater", + "Particle_DripLavaStart", + "Particle_DripLavaEnd" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "bubble_pop_0", + "displayName": "" + }, + { + "internalName": "bubble_pop_0", + "displayName": "" + }, + { + "internalName": "bubble_pop_1", + "displayName": "" + }, + { + "internalName": "bubble_pop_1", + "displayName": "" + }, + { + "internalName": "bubble_pop_2", + "displayName": "" + }, + { + "internalName": "bubble_pop_2", + "displayName": "" + }, + { + "internalName": "bubble_pop_3", + "displayName": "" + }, + { + "internalName": "bubble_pop_3", + "displayName": "" + }, + { + "internalName": "bubble_pop_4", + "displayName": "" + }, + { + "internalName": "bubble_pop_4", + "displayName": "" + }, + { + "internalName": "effect_0", + "displayName": "Effect (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "effect_1", + "displayName": "Effect (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "effect_2", + "displayName": "Effect (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "effect_3", + "displayName": "Effect (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "effect_4", + "displayName": "Effect (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "effect_5", + "displayName": "Effect (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "effect_6", + "displayName": "Effect (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "effect_7", + "displayName": "Effect (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "spell_0", + "displayName": "Splash Effect (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "spell_1", + "displayName": "Splash Effect (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "spell_2", + "displayName": "Splash Effect (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "spell_3", + "displayName": "Splash Effect (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "spell_4", + "displayName": "Splash Effect (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "spell_5", + "displayName": "Splash Effect (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "spell_6", + "displayName": "Splash Effect (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "spell_7", + "displayName": "Splash Effect (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "spark_0", + "displayName": "Firework Spark (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "spark_1", + "displayName": "Firework Spark (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "spark_2", + "displayName": "Firework Spark (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "spark_3", + "displayName": "Firework Spark (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "spark_4", + "displayName": "Firework Spark (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "spark_5", + "displayName": "Firework Spark (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "spark_6", + "displayName": "Firework Spark (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "spark_7", + "displayName": "Firework Spark (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "glitter_0", + "displayName": "Shulker/End Rod Glitter (Stage 1)" + }, + { + "internalName": "glitter_1", + "displayName": "Shulker/End Rod Glitter (Stage 2)" + }, + { + "internalName": "glitter_2", + "displayName": "Shulker/End Rod Glitter (Stage 3)" + }, + { + "internalName": "glitter_3", + "displayName": "Shulker/End Rod Glitter (Stage 4)" + }, + { + "internalName": "glitter_4", + "displayName": "Shulker/End Rod Glitter (Stage 5)" + }, + { + "internalName": "glitter_5", + "displayName": "Shulker/End Rod Glitter (Stage 6)" + }, + { + "internalName": "glitter_6", + "displayName": "Shulker/End Rod Glitter (Stage 7)" + }, + { + "internalName": "glitter_7", + "displayName": "Shulker/End Rod Glitter (Stage 8)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "camera_shoot_explosion_0", + "displayName": "Camera Shoot (Unused) (Stage 1)" + }, + { + "internalName": "camera_shoot_explosion_1", + "displayName": "Camera Shoot (Unused) (Stage 2)" + }, + { + "internalName": "camera_shoot_explosion_2", + "displayName": "Camera Shoot (Unused) (Stage 3)" + }, + { + "internalName": "camera_shoot_explosion_3", + "displayName": "Camera Shoot (Unused) (Stage 4)" + }, + { + "internalName": "camera_shoot_explosion_4", + "displayName": "Camera Shoot (Unused) (Stage 5)" + }, + { + "internalName": "camera_shoot_explosion_5", + "displayName": "Camera Shoot (Unused) (Stage 6)" + }, + { + "internalName": "camera_shoot_explosion_6", + "displayName": "Camera Shoot (Unused) (Stage 7)" + }, + { + "internalName": "camera_shoot_explosion_7", + "displayName": "Camera Shoot (Unused) (Stage 8)" + }, + { + "internalName": "camera_shoot_explosion_8", + "displayName": "Camera Shoot (Unused) (Stage 9)" + }, + { + "internalName": "camera_shoot_explosion_9", + "displayName": "Camera Shoot (Unused) (Stage 10)" + }, + { + "internalName": "camera_shoot_explosion_10", + "displayName": "Camera Shoot (Unused) (Stage 11)" + }, + { + "internalName": "camera_shoot_explosion_11", + "displayName": "Camera Shoot (Unused) (Stage 12)" + }, + { + "internalName": "camera_shoot_explosion_12", + "displayName": "Camera Shoot (Unused) (Stage 13)" + }, + { + "internalName": "camera_shoot_explosion_13", + "displayName": "Camera Shoot (Unused) (Stage 14)" + }, + { + "internalName": "camera_shoot_explosion_14", + "displayName": "Camera Shoot (Unused) (Stage 15)" + }, + { + "internalName": "camera_shoot_explosion_15", + "displayName": "Camera Shoot (Unused) (Stage 16)" + }, + { + "internalName": "conduit_0", + "displayName": "Conduit (Unused) (Stage 1)" + }, + { + "internalName": "conduit_1", + "displayName": "Conduit (Unused) (Stage 2)" + }, + { + "internalName": "conduit_2", + "displayName": "Conduit (Unused) (Stage 3)" + }, + { + "internalName": "conduit_3", + "displayName": "Conduit (Unused) (Stage 4)" + }, + { + "internalName": "conduit_4", + "displayName": "Conduit (Unused) (Stage 5)" + }, + { + "internalName": "conduit_5", + "displayName": "Conduit (Unused) (Stage 6)" + }, + { + "internalName": "conduit_6", + "displayName": "Conduit (Unused) (Stage 7)" + }, + { + "internalName": "conduit_7", + "displayName": "Conduit (Unused) (Stage 8)" + }, + { + "internalName": "conduit_8", + "displayName": "Conduit (Unused) (Stage 9)" + }, + { + "internalName": "conduit_9", + "displayName": "Conduit (Unused) (Stage 10)" + }, + { + "internalName": "conduit_10", + "displayName": "Conduit (Unused) (Stage 11)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "sga_a", + "displayName": "Standard Galactic Language (A)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_b", + "displayName": "Standard Galactic Language (B)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_c", + "displayName": "Standard Galactic Language (C)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_d", + "displayName": "Standard Galactic Language (D)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_e", + "displayName": "Standard Galactic Language (E)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_f", + "displayName": "Standard Galactic Language (F)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_g", + "displayName": "Standard Galactic Language (G)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_h", + "displayName": "Standard Galactic Language (H)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_i", + "displayName": "Standard Galactic Language (I)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_j", + "displayName": "Standard Galactic Language (J)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_k", + "displayName": "Standard Galactic Language (K)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_l", + "displayName": "Standard Galactic Language (L)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_m", + "displayName": "Standard Galactic Language (M)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_n", + "displayName": "Standard Galactic Language (N)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_o", + "displayName": "Standard Galactic Language (O)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_p", + "displayName": "Standard Galactic Language (P)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_q", + "displayName": "Standard Galactic Language (Q)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_r", + "displayName": "Standard Galactic Language (R)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_s", + "displayName": "Standard Galactic Language (S)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_t", + "displayName": "Standard Galactic Language (T)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_u", + "displayName": "Standard Galactic Language (U)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_v", + "displayName": "Standard Galactic Language (V)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_w", + "displayName": "Standard Galactic Language (W)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_x", + "displayName": "Standard Galactic Language (X)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_y", + "displayName": "Standard Galactic Language (Y)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_z", + "displayName": "Standard Galactic Language (Z)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + ] +} \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/tileData.json b/PCK-Studio/Resources/atlases/tileData.json deleted file mode 100644 index d9d84b5d..00000000 --- a/PCK-Studio/Resources/atlases/tileData.json +++ /dev/null @@ -1,6874 +0,0 @@ -{ - "COMMENT_1": "Tile data research by MattNL", - "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", - "blocks": [ - { - "internalName": "grass_top", - "displayName": "Grass Block (Top)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "stone", - "displayName": "Stone" - }, - { - "internalName": "dirt", - "displayName": "Dirt" - }, - { - "internalName": "grass_side", - "displayName": "Grass Block (Side)" - }, - { - "internalName": "planks_oak", - "displayName": "Oak Planks" - }, - { - "internalName": "stoneslab_side", - "displayName": "Stone Slab (Side)" - }, - { - "internalName": "stoneslab_top", - "displayName": "Stone Slab (Top)" - }, - { - "internalName": "brick", - "displayName": "Bricks" - }, - { - "internalName": "tnt_side", - "displayName": "TNT (Side)" - }, - { - "internalName": "tnt_top", - "displayName": "TNT (Top)" - }, - { - "internalName": "tnt_bottom", - "displayName": "TNT (Bottom)" - }, - { - "internalName": "web", - "displayName": "Cobweb" - }, - { - "internalName": "flower_rose", - "displayName": "Poppy" - }, - { - "internalName": "flower_dandelion", - "displayName": "Dandelion" - }, - { - "internalName": "portal", - "displayName": "Nether Portal" - }, - { - "internalName": "sapling", - "displayName": "Oak Sapling" - }, - { - "internalName": "cobblestone", - "displayName": "Cobblestone" - }, - { - "internalName": "bedrock", - "displayName": "Bedrock" - }, - { - "internalName": "sand", - "displayName": "Sand" - }, - { - "internalName": "gravel", - "displayName": "Gravel" - }, - { - "internalName": "log_oak", - "displayName": "Oak Wood (Side)" - }, - { - "internalName": "log_oak_top", - "displayName": "Oak Wood (Top)" - }, - { - "internalName": "iron_block", - "displayName": "Block of Iron" - }, - { - "internalName": "gold_block", - "displayName": "Block of Gold" - }, - { - "internalName": "diamond_block", - "displayName": "Block of Diamond" - }, - { - "internalName": "emerald_block", - "displayName": "Block of Emerald" - }, - { - "internalName": "redstone_block", - "displayName": "Block of Redstone" - }, - { - "internalName": "dropper_front_horizontal", - "displayName": "Dropper (Front)" - }, - { - "internalName": "mushroom_red", - "displayName": "Mushroom (Red)" - }, - { - "internalName": "mushroom_brown", - "displayName": "Mushroom (Brown)" - }, - { - "internalName": "sapling_jungle", - "displayName": "Jungle Tree Sapling" - }, - { - "internalName": "fire_0", - "displayName": "Fire (Layer 1)" - }, - { - "internalName": "gold_ore", - "displayName": "Gold Ore" - }, - { - "internalName": "iron_ore", - "displayName": "Iron Ore" - }, - { - "internalName": "coal_ore", - "displayName": "Coal Ore" - }, - { - "internalName": "bookshelf", - "displayName": "Bookshelf" - }, - { - "internalName": "cobblestone_mossy", - "displayName": "Moss Stone" - }, - { - "internalName": "obsidian", - "displayName": "Obsidian" - }, - { - "internalName": "grass_side_overlay", - "displayName": "Grass Side (Overlay)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "tallgrass", - "displayName": "Tall Grass", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "dispenser_front_vertical", - "displayName": "Dispenser (Vertical) (Front)" - }, - { - "internalName": "beacon", - "displayName": "Beacon" - }, - { - "internalName": "dropper_front_vertical", - "displayName": "Dropper (Vertical) (Front)" - }, - { - "internalName": "workbench_top", - "displayName": "Crafting Table (Top)" - }, - { - "internalName": "furnace_front", - "displayName": "Furnace (Front)" - }, - { - "internalName": "furnace_side", - "displayName": "Furnace/Dispenser/Dropper (Side)" - }, - { - "internalName": "dispenser_front", - "displayName": "Dispenser (Front)" - }, - { - "internalName": "fire_1", - "displayName": "Fire (Layer 2)" - }, - { - "internalName": "sponge", - "displayName": "Sponge" - }, - { - "internalName": "glass", - "displayName": "Glass" - }, - { - "internalName": "diamond_ore", - "displayName": "Diamond Ore" - }, - { - "internalName": "redstone_ore", - "displayName": "Redstone Ore" - }, - { - "internalName": "leaves", - "displayName": "Oak Leaves", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "leaves_opaque", - "displayName": "Oak Leaves (Opaque)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "stonebrick", - "displayName": "Stone Bricks" - }, - { - "internalName": "deadbush", - "displayName": "Dead Bush/Shrub" - }, - { - "internalName": "fern", - "displayName": "Fern", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "daylight_detector_top", - "displayName": "Daylight Sensor (Top)" - }, - { - "internalName": "daylight_detector_side", - "displayName": "Daylight Sensor (Side)" - }, - { - "internalName": "workbench_side", - "displayName": "Crafting Table (Side)" - }, - { - "internalName": "workbench_front", - "displayName": "Crafting Table (Front)" - }, - { - "internalName": "furnace_front_lit", - "displayName": "Furnace (Lit) (Front)" - }, - { - "internalName": "furnace_top", - "displayName": "Furnace/Dispenser/Dropper (Top)" - }, - { - "internalName": "sapling_spruce", - "displayName": "Spruce Sapling" - }, - { - "internalName": "wool_colored_white", - "displayName": "White Wool" - }, - { - "internalName": "mob_spawner", - "displayName": "Monster Spawner" - }, - { - "internalName": "snow", - "displayName": "Snow" - }, - { - "internalName": "ice", - "displayName": "Ice" - }, - { - "internalName": "snow_side", - "displayName": "Grass Block (Snowy) (Side)" - }, - { - "internalName": "cactus_top", - "displayName": "Cactus (Top)" - }, - { - "internalName": "cactus_side", - "displayName": "Cactus (Side)" - }, - { - "internalName": "cactus_bottom", - "displayName": "Cactus (Bottom)" - }, - { - "internalName": "clay", - "displayName": "Clay" - }, - { - "internalName": "reeds", - "displayName": "Sugar Canes" - }, - { - "internalName": "jukebox_side", - "displayName": "Jukebox (Side)" - }, - { - "internalName": "jukebox_top", - "displayName": "Jukebox (Top)" - }, - { - "internalName": "waterlily", - "displayName": "Lily Pad", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Tile_WaterLily", - "variants": [ "Tile_WaterLily" ] - } - }, - { - "internalName": "mycel_side", - "displayName": "Mycelium (Side)" - }, - { - "internalName": "mycel_top", - "displayName": "Mycelium (Top)" - }, - { - "internalName": "sapling_birch", - "displayName": "Birch Sapling" - }, - { - "internalName": "torch_on", - "displayName": "Torch" - }, - { - "internalName": "door_wood_upper", - "displayName": "Oak Door (Top)" - }, - { - "internalName": "door_iron_upper", - "displayName": "Iron Door (Top)" - }, - { - "internalName": "ladder", - "displayName": "Ladder" - }, - { - "internalName": "trapdoor", - "displayName": "Oak Trapdoor" - }, - { - "internalName": "iron_bars", - "displayName": "Iron Bars" - }, - { - "internalName": "farmland_wet", - "displayName": "Farmland (Wet)" - }, - { - "internalName": "farmland_dry", - "displayName": "Farmland" - }, - { - "internalName": "crops_0", - "displayName": "Wheat (Stage 1)" - }, - { - "internalName": "crops_1", - "displayName": "Wheat (Stage 2)" - }, - { - "internalName": "crops_2", - "displayName": "Wheat (Stage 3)" - }, - { - "internalName": "crops_3", - "displayName": "Wheat (Stage 4)" - }, - { - "internalName": "crops_4", - "displayName": "Wheat (Stage 5)" - }, - { - "internalName": "crops_5", - "displayName": "Wheat (Stage 6)" - }, - { - "internalName": "crops_6", - "displayName": "Wheat (Stage 7)" - }, - { - "internalName": "crops_7", - "displayName": "Wheat (Stage 8)" - }, - { - "internalName": "lever", - "displayName": "Lever" - }, - { - "internalName": "door_wood_lower", - "displayName": "Oak Door (Bottom)" - }, - { - "internalName": "door_iron_lower", - "displayName": "Iron Door (Bottom)" - }, - { - "internalName": "redstone_torch_on", - "displayName": "Redstone Torch" - }, - { - "internalName": "stonebrick_mossy", - "displayName": "Mossy Stone Bricks" - }, - { - "internalName": "stonebrick_cracked", - "displayName": "Cracked Stone Bricks" - }, - { - "internalName": "pumpkin_top", - "displayName": "Pumpkin (Top)" - }, - { - "internalName": "netherrack", - "displayName": "Netherrack" - }, - { - "internalName": "soul_sand", - "displayName": "Soul Sand" - }, - { - "internalName": "glowstone", - "displayName": "Glowstone" - }, - { - "internalName": "piston_top_sticky", - "displayName": "Sticky Piston (Top)" - }, - { - "internalName": "piston_top", - "displayName": "Piston (Top)" - }, - { - "internalName": "piston_side", - "displayName": "Piston (Side)" - }, - { - "internalName": "piston_bottom", - "displayName": "Piston (Bottom)" - }, - { - "internalName": "piston_inner_top", - "displayName": "Piston (Inside)" - }, - { - "internalName": "stem_straight", - "displayName": "Stem", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Tile_StemMin", - "variants": [ - "Tile_StemMin", - "Tile_StemMax" - ] - } - }, - { - "internalName": "rail_normal_turned", - "displayName": "Rail (Turned)" - }, - { - "internalName": "wool_colored_black", - "displayName": "Black Wool" - }, - { - "internalName": "wool_colored_gray", - "displayName": "Gray Wool" - }, - { - "internalName": "redstone_torch_off", - "displayName": "Redstone Torch (Off)" - }, - { - "internalName": "log_spruce", - "displayName": "Spruce Wood (Side)" - }, - { - "internalName": "log_birch", - "displayName": "Birch Wood (Side)" - }, - { - "internalName": "pumpkin_side", - "displayName": "Pumpkin (Side)" - }, - { - "internalName": "pumpkin_face_off", - "displayName": "Carved Pumpkin" - }, - { - "internalName": "pumpkin_face_on", - "displayName": "Jack-O-Lantern" - }, - { - "internalName": "cake_top", - "displayName": "Cake (Top)" - }, - { - "internalName": "cake_side", - "displayName": "Cake (Side)" - }, - { - "internalName": "cake_inner", - "displayName": "Cake (Inside)" - }, - { - "internalName": "cake_bottom", - "displayName": "Cake (Bottom)" - }, - { - "internalName": "mushroom_block_skin_red", - "displayName": "Mushroom (Red Block)" - }, - { - "internalName": "mushroom_block_skin_brown", - "displayName": "Mushroom (Brown Block)" - }, - { - "internalName": "stem_bent", - "displayName": "Stem (Attached)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Tile_StemMin", - "variants": [ - "Tile_StemMin", - "Tile_StemMax" - ] - } - }, - { - "internalName": "rail_normal", - "displayName": "Rail" - }, - { - "internalName": "wool_colored_red", - "displayName": "Red Wool" - }, - { - "internalName": "wool_colored_pink", - "displayName": "Pink Wool" - }, - { - "internalName": "repeater_off", - "displayName": "Repeater" - }, - { - "internalName": "leaves_spruce", - "displayName": "Spruce Leaves", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Evergreen", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "leaves_spruce_opaque", - "displayName": "Spruce Leaves (Opaque)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Evergreen", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "conduit_top", - "displayName": "Conduit (Break Particles)" - }, - { - "internalName": "turtle_egg_hatch_0", - "displayName": "Sea Turtle Egg (Stage 1)" - }, - { - "internalName": "melon_side", - "displayName": "Melon (Side)" - }, - { - "internalName": "melon_top", - "displayName": "Melon (Top)" - }, - { - "internalName": "cauldron_top", - "displayName": "Cauldron (Top)" - }, - { - "internalName": "cauldron_inner", - "displayName": "Cauldron (Inside)" - }, - { - "internalName": "sponge_wet", - "displayName": "Wet Sponge" - }, - { - "internalName": "mushroom_block_skin_stem", - "displayName": "Mushroom (Stem Block)" - }, - { - "internalName": "mushroom_block_inside", - "displayName": "Mushroom (Inside Block)" - }, - { - "internalName": "vine", - "displayName": "Vines", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "lapis_block", - "displayName": "Lapis Lazuli Block" - }, - { - "internalName": "wool_colored_green", - "displayName": "Green Wool" - }, - { - "internalName": "wool_colored_lime", - "displayName": "Lime Wool" - }, - { - "internalName": "repeater_on", - "displayName": "Redstone Repeater (On)" - }, - { - "internalName": "glass_pane_top", - "displayName": "Glass Pane (Top)" - }, - { - "internalName": "chest_top", - "displayName": "Chest (Break Particles)" - }, - { - "internalName": "ender_chest_top", - "displayName": "Ender Chest (Break Particles)" - }, - { - "internalName": "turtle_egg_hatch_1", - "displayName": "Sea Turtle Egg (Stage 2)" - }, - { - "internalName": "turtle_egg_hatch_2", - "displayName": "Sea Turtle Egg (Stage 3)" - }, - { - "internalName": "log_jungle", - "displayName": "Jungle Wood (Side)" - }, - { - "internalName": "cauldron_side", - "displayName": "Cauldron (Side)" - }, - { - "internalName": "cauldron_bottom", - "displayName": "Cauldron (Bottom)" - }, - { - "internalName": "brewing_stand_base", - "displayName": "Brewing Stand (Base)" - }, - { - "internalName": "brewing_stand", - "displayName": "Brewing Stand" - }, - { - "internalName": "endframe_top", - "displayName": "End Portal Frame (Top)" - }, - { - "internalName": "endframe_side", - "displayName": "End Portal Frame (Side)" - }, - { - "internalName": "lapis_ore", - "displayName": "Lapis Lazuli Ore" - }, - { - "internalName": "wool_colored_brown", - "displayName": "Brown Wool" - }, - { - "internalName": "wool_colored_yellow", - "displayName": "Yellow Wool" - }, - { - "internalName": "rail_golden", - "displayName": "Powered Rail" - }, - { - "internalName": "redstone_dust_cross", - "displayName": "Redstone Dust (Cross)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Tile_RedstoneDust", - "variants": [ - "Tile_RedstoneDust", - "Tile_RedstoneDustUnlit", - "Tile_RedstoneDustLitMin", - "Tile_RedstoneDustLitMax" - ] - } - }, - { - "internalName": "redstone_dust_line", - "displayName": "Redstone Dust (Line)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Tile_RedstoneDust", - "variants": [ - "Tile_RedstoneDust", - "Tile_RedstoneDustUnlit", - "Tile_RedstoneDustLitMin", - "Tile_RedstoneDustLitMax" - ] - } - }, - { - "internalName": "enchantment_top", - "displayName": "Enchantment Table (Top)" - }, - { - "internalName": "dragon_egg", - "displayName": "Dragon Egg" - }, - { - "internalName": "cocoa_2", - "displayName": "Cocoa (Stage 3)" - }, - { - "internalName": "cocoa_1", - "displayName": "Cocoa (Stage 2)" - }, - { - "internalName": "cocoa_0", - "displayName": "Cocoa (Stage 1)" - }, - { - "internalName": "emerald_ore", - "displayName": "Emerald Ore" - }, - { - "internalName": "trip_wire_source", - "displayName": "Tripwire Hook" - }, - { - "internalName": "trip_wire", - "displayName": "Tripwire" - }, - { - "internalName": "endframe_eye", - "displayName": "End Portal Frame (Eye)" - }, - { - "internalName": "end_stone", - "displayName": "End Stone" - }, - { - "internalName": "sandstone_top", - "displayName": "Sandstone (Top)" - }, - { - "internalName": "wool_colored_blue", - "displayName": "Blue Wool" - }, - { - "internalName": "wool_colored_light_blue", - "displayName": "Light Blue Wool" - }, - { - "internalName": "rail_golden_powered", - "displayName": "Powered Rail (On)" - }, - { - "internalName": "redstone_dust_cross_overlay", - "displayName": "Redstone Dust (Cross) (Overlay)" - }, - { - "internalName": "redstone_dust_line_overlay", - "displayName": "Redstone Dust (Line) (Overlay)" - }, - { - "internalName": "enchantment_side", - "displayName": "Enchantment Table (Side)" - }, - { - "internalName": "enchantment_bottom", - "displayName": "Enchantment Table (Bottom)" - }, - { - "internalName": "diamondRing", - "displayName": "Diamond Score Ring" - }, - { - "internalName": "itemframe_back", - "displayName": "Item Frame" - }, - { - "internalName": "flower_pot", - "displayName": "Flower Pot" - }, - { - "internalName": "comparator_off", - "displayName": "Redstone Comparator" - }, - { - "internalName": "comparator_on", - "displayName": "Redstone Comparator (On)" - }, - { - "internalName": "rail_activator", - "displayName": "Activator Rail" - }, - { - "internalName": "rail_activator_powered", - "displayName": "Activator Rail (On)" - }, - { - "internalName": "quartz_ore", - "displayName": "Nether Quartz Ore" - }, - { - "internalName": "sandstone_side", - "displayName": "Sandstone (Side)" - }, - { - "internalName": "wool_colored_purple", - "displayName": "Purple Wool" - }, - { - "internalName": "wool_colored_magenta", - "displayName": "Magenta Wool" - }, - { - "internalName": "detectorRail", - "displayName": "Detector Rail" - }, - { - "internalName": "leaves_jungle", - "displayName": "Jungle Leaves", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "leaves_jungle_opaque", - "displayName": "Jungle Leaves (Opaque)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "planks_spruce", - "displayName": "Spruce Planks" - }, - { - "internalName": "planks_jungle", - "displayName": "Jungle Planks" - }, - { - "internalName": "carrots_stage_0", - "displayName": "Carrots (Stage 1)" - }, - { - "internalName": "carrots_stage_1", - "displayName": "Carrots (Stage 2)" - }, - { - "internalName": "carrots_stage_2", - "displayName": "Carrots (Stage 3)" - }, - { - "internalName": "carrots_stage_3", - "displayName": "Carrots (Stage 4)" - }, - { - "internalName": "slime", - "displayName": "Slime Block" - }, - { - "internalName": "water", - "displayName": "Water", - "hasColourEntry": true, - "colourEntry": { - "isWaterColour": true, - "defaultName": "Water_Plains", - "variants": [ - "Water_Ocean", - "Water_Plains", - "Water_Desert", - "Water_ExtremeHills", - "Water_Forest", - "Water_Taiga", - "Water_Swampland", - "Water_River", - "Water_Hell", - "Water_Sky", - "Water_FrozenOcean", - "Water_FrozenRiver", - "Water_IcePlains", - "Water_IceMountains", - "Water_MushroomIsland", - "Water_MushroomIslandShore", - "Water_Beach", - "Water_DesertHills", - "Water_ForestHills", - "Water_TaigaHills", - "Water_ExtremeHillsEdge", - "Water_Jungle", - "Water_JungleHills", - "Water_JungleEdge", - "Water_DeepOcean", - "Water_StoneBeach", - "Water_ColdBeach", - "Water_BirchForest", - "Water_BirchForestHills", - "Water_RoofedForest", - "Water_ColdTaiga", - "Water_ColdTaigaHills", - "Water_MegaTaiga", - "Water_MegaTaigaHills", - "Water_ExtremeHillsPlus", - "Water_Savanna", - "Water_SavannaPlateau", - "Water_Mesa", - "Water_MesaPlateauF", - "Water_MesaPlateau" - ] - } - }, - { - "internalName": "water_flow", - "displayName": "Flowing Water", - "hasColourEntry": true, - "width": 2, - "height": 2, - "colourEntry": { - "isWaterColour": true, - "defaultName": "Water_Plains", - "variants": [ - "Water_Ocean", - "Water_Plains", - "Water_Desert", - "Water_ExtremeHills", - "Water_Forest", - "Water_Taiga", - "Water_Swampland", - "Water_River", - "Water_Hell", - "Water_Sky", - "Water_FrozenOcean", - "Water_FrozenRiver", - "Water_IcePlains", - "Water_IceMountains", - "Water_MushroomIsland", - "Water_MushroomIslandShore", - "Water_Beach", - "Water_DesertHills", - "Water_ForestHills", - "Water_TaigaHills", - "Water_ExtremeHillsEdge", - "Water_Jungle", - "Water_JungleHills", - "Water_JungleEdge", - "Water_DeepOcean", - "Water_StoneBeach", - "Water_ColdBeach", - "Water_BirchForest", - "Water_BirchForestHills", - "Water_RoofedForest", - "Water_ColdTaiga", - "Water_ColdTaigaHills", - "Water_MegaTaiga", - "Water_MegaTaigaHills", - "Water_ExtremeHillsPlus", - "Water_Savanna", - "Water_SavannaPlateau", - "Water_Mesa", - "Water_MesaPlateauF", - "Water_MesaPlateau" - ] - } - }, - { - "internalName": "water_flow", - "displayName": "" - }, - { - "internalName": "sandstone_bottom", - "displayName": "Sandstone (Bottom)" - }, - { - "internalName": "wool_colored_cyan", - "displayName": "Cyan Wool" - }, - { - "internalName": "wool_colored_orange", - "displayName": "Orange Wool" - }, - { - "internalName": "redstoneLight", - "displayName": "Redstone Lamp" - }, - { - "internalName": "redstoneLight_lit", - "displayName": "Redstone Lamp (On)" - }, - { - "internalName": "stonebrick_carved", - "displayName": "Chiseled Stone Bricks" - }, - { - "internalName": "planks_birch", - "displayName": "Birch Planks" - }, - { - "internalName": "anvil_base", - "displayName": "Anvil (Base)" - }, - { - "internalName": "anvil_top_damaged_1", - "displayName": "Anvil (Slightly Damaged) (Top)" - }, - { - "internalName": "quartz_block_chiseled_top", - "displayName": "Chiseled Quartz Block (Top)" - }, - { - "internalName": "quartz_block_lines_top", - "displayName": "Pillar Quartz Block (Top)" - }, - { - "internalName": "quartz_block_top", - "displayName": "Block of Quartz (Top)" - }, - { - "internalName": "hopper_outside", - "displayName": "Hopper (Side)" - }, - { - "internalName": "detectorRail_on", - "displayName": "Detector Rail (On)" - }, - { - "internalName": "water_flow", - "displayName": "" - }, - { - "internalName": "water_flow", - "displayName": "" - }, - { - "internalName": "nether_brick", - "displayName": "Nether Brick" - }, - { - "internalName": "wool_colored_silver", - "displayName": "Light Gray Wool" - }, - { - "internalName": "nether_wart_stage_0", - "displayName": "Nether Wart (Stage 1)" - }, - { - "internalName": "nether_wart_stage_1", - "displayName": "Nether Wart (Stage 2)" - }, - { - "internalName": "nether_wart_stage_2", - "displayName": "Nether Wart (Stage 3)" - }, - { - "internalName": "sandstone_carved", - "displayName": "Chiseled Sandstone" - }, - { - "internalName": "sandstone_smooth", - "displayName": "Smooth Sandstone" - }, - { - "internalName": "anvil_top", - "displayName": "Anvil (Top)" - }, - { - "internalName": "anvil_top_damaged_2", - "displayName": "Anvil (Very Damaged) (Top)" - }, - { - "internalName": "quartz_block_chiseled", - "displayName": "Chiseled Quartz Block (Side)" - }, - { - "internalName": "quartz_block_lines", - "displayName": "Pillar Quartz Block (Side)" - }, - { - "internalName": "quartz_block_side", - "displayName": "Block of Quartz (Side)" - }, - { - "internalName": "hopper_inside", - "displayName": "Hopper (Inside)" - }, - { - "internalName": "lava", - "displayName": "Lava" - }, - { - "internalName": "lava_flow", - "displayName": "Flowing Lava", - "width": 2, - "height": 2 - }, - { - "internalName": "lava_flow", - "displayName": "", - }, - { - "internalName": "destroy_0", - "displayName": "Destroy (Stage 1)" - }, - { - "internalName": "destroy_1", - "displayName": "Destroy (Stage 2)" - }, - { - "internalName": "destroy_2", - "displayName": "Destroy (Stage 3)" - }, - { - "internalName": "destroy_3", - "displayName": "Destroy (Stage 4)" - }, - { - "internalName": "destroy_4", - "displayName": "Destroy (Stage 5)" - }, - { - "internalName": "destroy_5", - "displayName": "Destroy (Stage 6)" - }, - { - "internalName": "destroy_6", - "displayName": "Destroy (Stage 7)" - }, - { - "internalName": "destroy_7", - "displayName": "Destroy (Stage 8)" - }, - { - "internalName": "destroy_8", - "displayName": "Destroy (Stage 9)" - }, - { - "internalName": "destroy_9", - "displayName": "Destroy (Stage 10)" - }, - { - "internalName": "hay_block_side", - "displayName": "Hay Bale (Side)" - }, - { - "internalName": "quartz_block_bottom", - "displayName": "Quartz Block (Bottom)" - }, - { - "internalName": "hopper_top", - "displayName": "Hopper (Top)" - }, - { - "internalName": "hay_block_top", - "displayName": "Hay Bale (Top)" - }, - { - "internalName": "lava_flow", - "displayName": "", - }, - { - "internalName": "lava_flow", - "displayName": "", - }, - { - "internalName": "coal_block", - "displayName": "Block of Coal" - }, - { - "internalName": "hardened_clay", - "displayName": "Terracotta" - }, - { - "internalName": "noteblock", - "displayName": "Note Block" - }, - { - "internalName": "stone_andesite", - "displayName": "Andesite" - }, - { - "internalName": "stone_andesite_smooth", - "displayName": "Polished Andesite" - }, - { - "internalName": "stone_diorite", - "displayName": "Diorite" - }, - { - "internalName": "stone_diorite_smooth", - "displayName": "Polished Diorite" - }, - { - "internalName": "stone_granite", - "displayName": "Granite" - }, - { - "internalName": "stone_granite_smooth", - "displayName": "Polished Granite" - }, - { - "internalName": "potatoes_stage_0", - "displayName": "Potatoes (Stage 1)" - }, - { - "internalName": "potatoes_stage_1", - "displayName": "Potatoes (Stage 2)" - }, - { - "internalName": "potatoes_stage_2", - "displayName": "Potatoes (Stage 3)" - }, - { - "internalName": "potatoes_stage_3", - "displayName": "Potatoes (Stage 4)" - }, - { - "internalName": "log_spruce_top", - "displayName": "Spruce Wood (Top)" - }, - { - "internalName": "log_jungle_top", - "displayName": "Jungle Wood (Top)" - }, - { - "internalName": "log_birch_top", - "displayName": "Birch Wood (Top)" - }, - { - "internalName": "hardened_clay_stained_black", - "displayName": "Black Terracotta" - }, - { - "internalName": "hardened_clay_stained_blue", - "displayName": "Blue Terracotta" - }, - { - "internalName": "hardened_clay_stained_brown", - "displayName": "Brown Terracotta" - }, - { - "internalName": "hardened_clay_stained_cyan", - "displayName": "Cyan Terracotta" - }, - { - "internalName": "hardened_clay_stained_gray", - "displayName": "Gray Terracotta" - }, - { - "internalName": "hardened_clay_stained_green", - "displayName": "Green Terracotta" - }, - { - "internalName": "hardened_clay_stained_light_blue", - "displayName": "Light Blue Terracotta" - }, - { - "internalName": "hardened_clay_stained_lime", - "displayName": "Lime Terracotta" - }, - { - "internalName": "hardened_clay_stained_magenta", - "displayName": "Magenta Terracotta" - }, - { - "internalName": "hardened_clay_stained_orange", - "displayName": "Orange Terracotta" - }, - { - "internalName": "hardened_clay_stained_pink", - "displayName": "Pink Terracotta" - }, - { - "internalName": "hardened_clay_stained_purple", - "displayName": "Purple Terracotta" - }, - { - "internalName": "hardened_clay_stained_red", - "displayName": "Red Terracotta" - }, - { - "internalName": "hardened_clay_stained_silver", - "displayName": "Light Gray Terracotta" - }, - { - "internalName": "hardened_clay_stained_white", - "displayName": "White Terracotta" - }, - { - "internalName": "hardened_clay_stained_yellow", - "displayName": "Yellow Terracotta" - }, - { - "internalName": "glass_black", - "displayName": "Black Stained Glass" - }, - { - "internalName": "glass_blue", - "displayName": "Blue Stained Glass" - }, - { - "internalName": "glass_brown", - "displayName": "Brown Stained Glass" - }, - { - "internalName": "glass_cyan", - "displayName": "Cyan Stained Glass" - }, - { - "internalName": "glass_gray", - "displayName": "Gray Stained Glass" - }, - { - "internalName": "glass_green", - "displayName": "Green Stained Glass" - }, - { - "internalName": "glass_light_blue", - "displayName": "Light Blue Stained Glass" - }, - { - "internalName": "glass_lime", - "displayName": "Lime Stained Glass" - }, - { - "internalName": "glass_magenta", - "displayName": "Magenta Stained Glass" - }, - { - "internalName": "glass_orange", - "displayName": "Orange Stained Glass" - }, - { - "internalName": "glass_pink", - "displayName": "Pink Stained Glass" - }, - { - "internalName": "glass_purple", - "displayName": "Purple Stained Glass" - }, - { - "internalName": "glass_red", - "displayName": "Red Stained Glass" - }, - { - "internalName": "glass_silver", - "displayName": "Light Gray Stained Glass" - }, - { - "internalName": "glass_white", - "displayName": "White Stained Glass" - }, - { - "internalName": "glass_yellow", - "displayName": "Yellow Stained Glass" - }, - { - "internalName": "glass_pane_top_black", - "displayName": "Black Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_blue", - "displayName": "Blue Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_brown", - "displayName": "Brown Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_cyan", - "displayName": "Cyan Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_gray", - "displayName": "Gray Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_green", - "displayName": "Green Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_light_blue", - "displayName": "Light Blue Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_lime", - "displayName": "Lime Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_magenta", - "displayName": "Magenta Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_orange", - "displayName": "Orange Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_pink", - "displayName": "Pink Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_purple", - "displayName": "Purple Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_red", - "displayName": "Red Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_silver", - "displayName": "Light Gray Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_white", - "displayName": "White Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_yellow", - "displayName": "Yellow Stained Glass Pane (Top)" - }, - { - "internalName": "double_plant_fern_top", - "displayName": "Large Fern (Top)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "double_plant_grass_top", - "displayName": "Double Tall Grass (Top)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "double_plant_paeonia_top", - "displayName": "Peony (Top)" - }, - { - "internalName": "double_plant_rose_top", - "displayName": "Rose Bush (Top)" - }, - { - "internalName": "double_plant_syringa_top", - "displayName": "Lilac (Top)" - }, - { - "internalName": "flower_tulip_orange", - "displayName": "Orange Tulip" - }, - { - "internalName": "double_plant_sunflower_top", - "displayName": "Sunflower (Top)" - }, - { - "internalName": "double_plant_sunflower_front", - "displayName": "Sunflower (Front)" - }, - { - "internalName": "log_acacia", - "displayName": "Acacia Wood (Side)" - }, - { - "internalName": "log_acacia_top", - "displayName": "Acacia Wood (Top)" - }, - { - "internalName": "planks_acacia", - "displayName": "Acacia Planks" - }, - { - "internalName": "leaves_acacia", - "displayName": "Acacia Leaves", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "leaves_acacia_fast", - "displayName": "Acacia Leaves (Opaque)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "prismarine_bricks", - "displayName": "Prismarine Bricks" - }, - { - "internalName": "red_sand", - "displayName": "Red Sand" - }, - { - "internalName": "red_sandstone_top", - "displayName": "Red Sandstone (Top)" - }, - { - "internalName": "double_plant_fern_bottom", - "displayName": "Large Fern (Bottom)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "double_plant_grass_bottom", - "displayName": "Double Tall Grass (Bottom)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "double_plant_paeonia_bottom", - "displayName": "Peony (Bottom)" - }, - { - "internalName": "double_plant_rose_bottom", - "displayName": "Rose Bush (Bottom)" - }, - { - "internalName": "double_plant_syringa_bottom", - "displayName": "Lilac (Bottom)" - }, - { - "internalName": "flower_tulip_pink", - "displayName": "Pink Tulip" - }, - { - "internalName": "double_plant_sunflower_bottom", - "displayName": "Sunflower (Bottom)" - }, - { - "internalName": "double_plant_sunflower_back", - "displayName": "Sunflower (Back)" - }, - { - "internalName": "log_big_oak", - "displayName": "Dark Oak Wood (Side)" - }, - { - "internalName": "log_big_oak_top", - "displayName": "Dark Oak Wood (Top)" - }, - { - "internalName": "planks_big_oak", - "displayName": "Dark Oak Planks" - }, - { - "internalName": "leaves_big_oak", - "displayName": "Dark Oak Leaves", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "leaves_big_oak_fast", - "displayName": "Dark Oak Leaves (Opaque)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "prismarine_dark", - "displayName": "Dark Prismarine" - }, - { - "internalName": "red_sandstone_bottom", - "displayName": "Red Sandstone (Bottom)" - }, - { - "internalName": "red_sandstone_normal", - "displayName": "Red Sandstone (Side)" - }, - { - "internalName": "flower_alium", - "displayName": "Allium" - }, - { - "internalName": "flower_blue_orchid", - "displayName": "Blue Orchid" - }, - { - "internalName": "flower_houstonia", - "displayName": "Azure Bluet" - }, - { - "internalName": "flower_oxeye_daisy", - "displayName": "Oxeye Daisy" - }, - { - "internalName": "flower_tulip_red", - "displayName": "Red Tulip" - }, - { - "internalName": "flower_tulip_white", - "displayName": "White Tulip" - }, - { - "internalName": "sapling_acacia", - "displayName": "Acacia Sapling" - }, - { - "internalName": "sapling_roofed_oak", - "displayName": "Dark Oak Sapling" - }, - { - "internalName": "coarse_dirt", - "displayName": "Coarse Dirt" - }, - { - "internalName": "dirt_podzol_side", - "displayName": "Podzol (Side)" - }, - { - "internalName": "dirt_podzol_top", - "displayName": "Podzol (Top)" - }, - { - "internalName": "leaves_birch", - "displayName": "Birch Leaves", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Birch", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "leaves_birch_fast", - "displayName": "Birch Leaves (Opaque)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Birch", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "prismarine_rough", - "displayName": "Prismarine" - }, - { - "internalName": "red_sandstone_carved", - "displayName": "Chiseled Red Sandstone" - }, - { - "internalName": "red_sandstone_smooth", - "displayName": "Smooth Red Standstone" - }, - { - "internalName": "door_acacia_upper", - "displayName": "Acacia Door (Top)" - }, - { - "internalName": "door_birch_upper", - "displayName": "Birch Door (Top)" - }, - { - "internalName": "door_dark_oak_upper", - "displayName": "Dark Oak Door (Top)" - }, - { - "internalName": "door_jungle_upper", - "displayName": "Jungle Door (Top)" - }, - { - "internalName": "door_spruce_upper", - "displayName": "Spruce Door (Top)" - }, - { - "internalName": "chorus_flower", - "displayName": "Chorus Flower" - }, - { - "internalName": "chorus_flower_dead", - "displayName": "Chorus Flower (Dead)" - }, - { - "internalName": "chorus_flower_plant", - "displayName": "Chorus Plant" - }, - { - "internalName": "end_bricks", - "displayName": "End Stone Bricks" - }, - { - "internalName": "grass_path_side", - "displayName": "Grass Path (Side)" - }, - { - "internalName": "grass_path_top", - "displayName": "Grass Path (Top)" - }, - { - "internalName": "barrier", - "displayName": "Barrier" - }, - { - "internalName": "ice_packed", - "displayName": "Packed Ice" - }, - { - "internalName": "sea_lantern", - "displayName": "Sea Lantern" - }, - { - "internalName": "daylight_detector_inverted_top", - "displayName": "Daylight Sensor (Inverted) (Top)" - }, - { - "internalName": "iron_trapdoor", - "displayName": "Iron Trapdoor" - }, - { - "internalName": "door_acacia_lower", - "displayName": "Acacia Door (Bottom)" - }, - { - "internalName": "door_birch_lower", - "displayName": "Birch Door (Bottom)" - }, - { - "internalName": "door_dark_oak_lower", - "displayName": "Dark Oak Door (Bottom)" - }, - { - "internalName": "door_jungle_lower", - "displayName": "Jungle Door (Bottom)" - }, - { - "internalName": "door_spruce_lower", - "displayName": "Spruce Door (Bottom)" - }, - { - "internalName": "purpur_block", - "displayName": "Purpur Block" - }, - { - "internalName": "purpur_pillar", - "displayName": "Purpur Pillar (Side)" - }, - { - "internalName": "purpur_pillar_top", - "displayName": "Purpur Pillar (Top)" - }, - { - "internalName": "end_rod", - "displayName": "End Rod" - }, - { - "internalName": "magma", - "displayName": "Magma Block" - }, - { - "internalName": "nether_wart_block", - "displayName": "Nether Wart Block" - }, - { - "internalName": "red_nether_brick", - "displayName": "Red Nether Brick" - }, - { - "internalName": "frosted_ice_0", - "displayName": "Frosted Ice (Stage 1)" - }, - { - "internalName": "frosted_ice_1", - "displayName": "Frosted Ice (Stage 2)" - }, - { - "internalName": "frosted_ice_2", - "displayName": "Frosted Ice (Stage 3)" - }, - { - "internalName": "frosted_ice_3", - "displayName": "Frosted Ice (Stage 4)" - }, - { - "internalName": "beetroots_stage_0", - "displayName": "Beetroots (Stage 1)" - }, - { - "internalName": "beetroots_stage_1", - "displayName": "Beetroots (Stage 2)" - }, - { - "internalName": "beetroots_stage_2", - "displayName": "Beetroots (Stage 3)" - }, - { - "internalName": "beetroots_stage_3", - "displayName": "Beetroots (Stage 4)" - }, - { - "internalName": "chain_command_block_back", - "displayName": "Chain Command Block (Back)" - }, - { - "internalName": "chain_command_block_conditional", - "displayName": "Chain Command Block (Conditional) (Side)" - }, - { - "internalName": "chain_command_block_front", - "displayName": "Chain Command Block (Front)" - }, - { - "internalName": "chain_command_block_side", - "displayName": "Chain Command Block (Side)" - }, - { - "internalName": "command_block_back", - "displayName": "Command Block (Back)" - }, - { - "internalName": "command_block_conditional", - "displayName": "Command Block (Conditional) (Side)" - }, - { - "internalName": "command_block_front", - "displayName": "Command Block (Front)" - }, - { - "internalName": "command_block_side", - "displayName": "Command Block (Side)" - }, - { - "internalName": "repeating_command_block_back", - "displayName": "Repeating Command Block (Back)" - }, - { - "internalName": "repeating_command_block_conditional", - "displayName": "Repeating Command Block (Conditional) (Side)" - }, - { - "internalName": "repeating_command_block_front", - "displayName": "Repeating Command Block (Front)" - }, - { - "internalName": "repeating_command_block_side", - "displayName": "Repeating Command Block (Side)" - }, - { - "internalName": "bone_block_side", - "displayName": "Bone Block (Side)" - }, - { - "internalName": "bone_block_top", - "displayName": "Bone Block (Top)" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "observer_front", - "displayName": "Observer (Front)" - }, - { - "internalName": "observer_side", - "displayName": "Observer (Side)" - }, - { - "internalName": "observer_back", - "displayName": "Observer (Back)" - }, - { - "internalName": "observer_back_lit", - "displayName": "Observer (On) (Back)" - }, - { - "internalName": "observer_top", - "displayName": "Observer (Top and Bottom)" - }, - { - "internalName": "goldRing", - "displayName": "Gold Score Ring" - }, - { - "internalName": "emeraldRing", - "displayName": "Emerald Score Ring" - }, - { - "internalName": "structure_block", - "displayName": "Structure Block" - }, - { - "internalName": "structure_block_corner", - "displayName": "Structure Block (Corner)" - }, - { - "internalName": "structure_block_data", - "displayName": "Structure Block (Data)" - }, - { - "internalName": "structure_block_load", - "displayName": "Structure Block (Load)" - }, - { - "internalName": "structure_block_save", - "displayName": "Structure Block (Save)" - }, - { - "internalName": "concrete_black", - "displayName": "Black Concrete" - }, - { - "internalName": "concrete_blue", - "displayName": "Blue Concrete" - }, - { - "internalName": "concrete_brown", - "displayName": "Brown Concrete" - }, - { - "internalName": "concrete_cyan", - "displayName": "Cyan Concrete" - }, - { - "internalName": "concrete_gray", - "displayName": "Gray Concrete" - }, - { - "internalName": "concrete_green", - "displayName": "Green Concrete" - }, - { - "internalName": "concrete_light_blue", - "displayName": "Light Blue Concrete" - }, - { - "internalName": "concrete_lime", - "displayName": "Lime Concrete" - }, - { - "internalName": "concrete_magenta", - "displayName": "Magenta Concrete" - }, - { - "internalName": "concrete_orange", - "displayName": "Orange Concrete" - }, - { - "internalName": "concrete_pink", - "displayName": "Pink Concrete" - }, - { - "internalName": "concrete_purple", - "displayName": "Purple Concrete" - }, - { - "internalName": "concrete_red", - "displayName": "Red Concrete" - }, - { - "internalName": "concrete_silver", - "displayName": "Light Gray Concrete" - }, - { - "internalName": "concrete_white", - "displayName": "White Concrete" - }, - { - "internalName": "concrete_yellow", - "displayName": "Yellow Concrete" - }, - { - "internalName": "concrete_powder_black", - "displayName": "Black Concrete Powder" - }, - { - "internalName": "concrete_powder_blue", - "displayName": "Blue Concrete Powder" - }, - { - "internalName": "concrete_powder_brown", - "displayName": "Brown Concrete Powder" - }, - { - "internalName": "concrete_powder_cyan", - "displayName": "Cyan Concrete Powder" - }, - { - "internalName": "concrete_powder_gray", - "displayName": "Gray Concrete Powder" - }, - { - "internalName": "concrete_powder_green", - "displayName": "Green Concrete Powder" - }, - { - "internalName": "concrete_powder_light_blue", - "displayName": "Light Blue Concrete Powder" - }, - { - "internalName": "concrete_powder_lime", - "displayName": "Lime Concrete Powder" - }, - { - "internalName": "concrete_powder_magenta", - "displayName": "Magenta Concrete Powder" - }, - { - "internalName": "concrete_powder_orange", - "displayName": "Orange Concrete Powder" - }, - { - "internalName": "concrete_powder_pink", - "displayName": "Pink Concrete Powder" - }, - { - "internalName": "concrete_powder_purple", - "displayName": "Purple Concrete Powder" - }, - { - "internalName": "concrete_powder_red", - "displayName": "Red Concrete Powder" - }, - { - "internalName": "concrete_powder_silver", - "displayName": "Light Gray Concrete Powder" - }, - { - "internalName": "concrete_powder_white", - "displayName": "White Concrete Powder" - }, - { - "internalName": "concrete_powder_yellow", - "displayName": "Yellow Concrete Powder" - }, - { - "internalName": "glazed_terracotta_black", - "displayName": "Black Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_blue", - "displayName": "Blue Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_brown", - "displayName": "Brown Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_cyan", - "displayName": "Cyan Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_gray", - "displayName": "Gray Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_green", - "displayName": "Green Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_light_blue", - "displayName": "Light Blue Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_lime", - "displayName": "Lime Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_magenta", - "displayName": "Magenta Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_orange", - "displayName": "Orange Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_pink", - "displayName": "Pink Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_purple", - "displayName": "Purple Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_red", - "displayName": "Red Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_silver", - "displayName": "Light Gray Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_white", - "displayName": "White Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_yellow", - "displayName": "Yellow Glazed Terracotta" - }, - { - "internalName": "shulker_top", - "displayName": "Shulker Box (Break Particles)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Shulker_Box_Purple", - "variants": [ - "Shulker_Box_Black", - "Shulker_Box_Blue", - "Shulker_Box_Brown", - "Shulker_Box_Cyan", - "Shulker_Box_Grey", - "Shulker_Box_Green", - "Shulker_Box_Light_Blue", - "Shulker_Box_Light_Green", - "Shulker_Box_Magenta", - "Shulker_Box_Orange", - "Shulker_Box_Pink", - "Shulker_Box_Purple", - "Shulker_Box_Red", - "Shulker_Box_Silver", - "Shulker_Box_White", - "Shulker_Box_Yellow" - ] - } - }, - { - "internalName": "shulker_top_overlay", - "displayName": "Shulker Box (Break Particles) (Overlay) (Unused)" - }, - { - "internalName": "cauldron_water", - "displayName": "Cauldron Water", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "Cauldron_Water", - "variants": [ - "Cauldron_Water", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "seagrass_doubletall_top", - "displayName": "Double Tall Seagrass (Top)" - }, - { - "internalName": "coral_blue", - "displayName": "Tube Coral Block" - }, - { - "internalName": "coral_purple", - "displayName": "Bubble Coral Block" - }, - { - "internalName": "coral_pink", - "displayName": "Brain Coral Block" - }, - { - "internalName": "coral_red", - "displayName": "Fire Coral Block" - }, - { - "internalName": "coral_yellow", - "displayName": "Horn Coral Block" - }, - { - "internalName": "coral_plant_blue", - "displayName": "Tube Coral" - }, - { - "internalName": "coral_plant_purple", - "displayName": "Bubble Coral" - }, - { - "internalName": "coral_plant_pink", - "displayName": "Brain Coral" - }, - { - "internalName": "coral_plant_red", - "displayName": "Fire Coral" - }, - { - "internalName": "coral_plant_yellow", - "displayName": "Horn Coral" - }, - { - "internalName": "sea_pickle", - "displayName": "Sea Pickle" - }, - { - "internalName": "blue_ice", - "displayName": "Blue Ice" - }, - { - "internalName": "dried_kelp_top", - "displayName": "Dried Kelp Block (Top)" - }, - { - "internalName": "dried_kelp_side", - "displayName": "Dried Kelp Block (Side)" - }, - { - "internalName": "seagrass_carried", - "displayName": "Seagrass (Item)" - }, - { - "internalName": "seagrass_doubletall_bottom", - "displayName": "Double Tall Seagrass (Bottom)" - }, - { - "internalName": "coral_blue_dead", - "displayName": "Dead Tube Coral Block" - }, - { - "internalName": "coral_purple_dead", - "displayName": "Dead Bubble Coral Block" - }, - { - "internalName": "coral_pink_dead", - "displayName": "Dead Brain Coral Block" - }, - { - "internalName": "coral_red_dead", - "displayName": "Dead Fire Coral Block" - }, - { - "internalName": "coral_yellow_dead", - "displayName": "Dead Horn Coral Block" - }, - { - "internalName": "coral_fan_blue", - "displayName": "Tube Coral Fan" - }, - { - "internalName": "coral_fan_purple", - "displayName": "Bubble Coral Fan" - }, - { - "internalName": "coral_fan_pink", - "displayName": "Brain Coral Fan" - }, - { - "internalName": "coral_fan_red", - "displayName": "Fire Coral Fan" - }, - { - "internalName": "coral_fan_yellow", - "displayName": "Horn Coral Fan" - }, - { - "internalName": "bamboo_stem", - "displayName": "Bamboo (Stem) [PS4 ONLY]" - }, - { - "internalName": "bamboo_leaf_small", - "displayName": "Bamboo (Small Leaves) [PS4 ONLY]" - }, - { - "internalName": "kelp_a", - "displayName": "Kelp (Bottom)" - }, - { - "internalName": "kelp_a", - "displayName": "" - }, - { - "internalName": "kelp_a", - "displayName": "" - }, - { - "internalName": "kelp_a", - "displayName": "" - }, - { - "internalName": "kelp_top_a", - "displayName": "Kelp (Top)" - }, - { - "internalName": "kelp_top_a", - "displayName": "" - }, - { - "internalName": "kelp_top_a", - "displayName": "" - }, - { - "internalName": "kelp_top_a", - "displayName": "" - }, - { - "internalName": "seagrass", - "displayName": "Seagrass" - }, - { - "internalName": "coral_fan_blue_dead", - "displayName": "Dead Tube Coral Fan" - }, - { - "internalName": "coral_fan_purple_dead", - "displayName": "Dead Bubble Coral Fan" - }, - { - "internalName": "coral_fan_pink_dead", - "displayName": "Dead Brain Coral Fan" - }, - { - "internalName": "coral_fan_red_dead", - "displayName": "Dead Fire Coral Fan" - }, - { - "internalName": "coral_fan_yellow_dead", - "displayName": "Dead Horn Coral Fan" - }, - { - "internalName": "bamboo_leaf", - "displayName": "Bamboo (Leaves) [PS4 ONLY]" - }, - { - "internalName": "spruce_trapdoor", - "displayName": "Spruce Trapdoor" - }, - { - "internalName": "stripped_log_oak", - "displayName": "Stripped Oak Log (Side)" - }, - { - "internalName": "stripped_log_oak_top", - "displayName": "Stripped Oak Log (Top)" - }, - { - "internalName": "stripped_log_acacia", - "displayName": "Stripped Acacia Log (Side)" - }, - { - "internalName": "stripped_log_acacia_top", - "displayName": "Stripped Acacia Log (Top)" - }, - { - "internalName": "stripped_log_birch", - "displayName": "Stripped Birch Log (Side)" - }, - { - "internalName": "stripped_log_birch_top", - "displayName": "Stripped Birch Log (Top)" - }, - { - "internalName": "stripped_log_dark_oak", - "displayName": "Stripped Dark Oak Log (Side)" - }, - { - "internalName": "stripped_log_dark_oak_top", - "displayName": "Stripped Dark Oak Log (Top)" - }, - { - "internalName": "stripped_log_jungle", - "displayName": "Stripped Jungle Log (Side)" - }, - { - "internalName": "stripped_log_jungle_top", - "displayName": "Stripped Birch Log (Top)" - }, - { - "internalName": "stripped_log_spruce", - "displayName": "Stripped Spruce Log (Side)" - }, - { - "internalName": "stripped_log_spruce_top", - "displayName": "Stripped Spruce Log (Top)" - }, - { - "internalName": "acacia_trapdoor", - "displayName": "Acacia Trapdoor" - }, - { - "internalName": "birch_trapdoor", - "displayName": "Birch Trapdoor" - }, - { - "internalName": "dark_oak_trapdoor", - "displayName": "Dark Oak Trapdoor" - }, - { - "internalName": "jungle_trapdoor", - "displayName": "Jungle Trapdoor" - }, - { - "internalName": "bamboo_sapling", - "displayName": "Bamboo Sapling [PS4 ONLY]" - }, - { - "internalName": "bamboo_singleleaf", - "displayName": "Bamboo (Single Leaf) [PS4 ONLY]" - }, - { - "internalName": "flower_lily_of_the_valley", - "displayName": "Lily of the Valley [PS4 ONLY]" - }, - { - "internalName": "flower_cornflower", - "displayName": "Cornflower [PS4 ONLY]" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "berry_bush_sapling", - "displayName": "Sweet Berry Bush (Stage 1) [PS4 ONLY]" - }, - { - "internalName": "berry_bush_no_berries", - "displayName": "Sweet Berry Bush (Stage 2) [PS4 ONLY]" - }, - { - "internalName": "berry_bush_some_berries", - "displayName": "Sweet Berry Bush (Stage 3) [PS4 ONLY]" - }, - { - "internalName": "berry_bush_full_berries", - "displayName": "Sweet Berry Bush (Stage 4) [PS4 ONLY]" - }, - { - "internalName": "campfire_log", - "displayName": "Campfire (Log) [PS4 ONLY]" - }, - { - "internalName": "campfire_log_lit", - "displayName": "Campfire (Log) (Lit) [PS4 ONLY]" - }, - { - "internalName": "campfire_smoke", - "displayName": "Campfire (Smoke) [PS4 ONLY]" - }, - { - "internalName": "campfire", - "displayName": "Campfire (Flame) [PS4 ONLY]" - }, - { - "internalName": "scaffolding_side", - "displayName": "Scaffolding (Side) [PS4 ONLY]" - }, - { - "internalName": "scaffolding_bottom", - "displayName": "Scaffolding (Bottom) [PS4 ONLY]" - }, - { - "internalName": "scaffolding_top", - "displayName": "Scaffolding (Top) [PS4 ONLY]" - }, - { - "internalName": "barrel_side", - "displayName": "Barrel (Side) [PS4 ONLY]" - }, - { - "internalName": "barrel_top", - "displayName": "Barrel (Top) [PS4 ONLY]" - }, - { - "internalName": "barrel_bottom", - "displayName": "Barrel (Bottom) [PS4 ONLY]" - }, - { - "internalName": "bell_side", - "displayName": "Bell (Side) [PS4 ONLY]" - }, - { - "internalName": "bell_top", - "displayName": "Bell (Top) [PS4 ONLY]" - }, - { - "internalName": "bell_bottom", - "displayName": "Bell (Bottom) [PS4 ONLY]" - }, - { - "internalName": "lantern", - "displayName": "Lantern [PS4 ONLY]" - }, - { - "internalName": "jigsaw_side", - "displayName": "Jigsaw (Side) [PS4 ONLY]" - }, - { - "internalName": "jigsaw_top", - "displayName": "Jigsaw (Top) [PS4 ONLY]" - }, - { - "internalName": "blast_furnace_front", - "displayName": "Blast Furnace (Front) [PS4 ONLY]" - }, - { - "internalName": "blast_furnace_front_on", - "displayName": "Blast Furnace (Front) (Lit) [PS4 ONLY]" - }, - { - "internalName": "blast_furnace_side", - "displayName": "Blast Furnace (Side) [PS4 ONLY]" - }, - { - "internalName": "blast_furnace_top", - "displayName": "Blast Furnace (Top) [PS4 ONLY]" - }, - { - "internalName": "grindstone_side", - "displayName": "Grindstone (Side) [PS4 ONLY]" - }, - { - "internalName": "grindstone_round", - "displayName": "Grindstone (Round) [PS4 ONLY]" - }, - { - "internalName": "grindstone_pivot", - "displayName": "Grindstone (Pivot) [PS4 ONLY]" - }, - { - "internalName": "cartography_table_side1", - "displayName": "Cartography Table (Back) [PS4 ONLY]" - }, - { - "internalName": "cartography_table_side2", - "displayName": "Cartography Table (Right Side) [PS4 ONLY]" - }, - { - "internalName": "cartography_table_side3", - "displayName": "Cartography Table (Front and Left Side) [PS4 ONLY]" - }, - { - "internalName": "cartography_table_top", - "displayName": "Cartography Table (Top) [PS4 ONLY]" - }, - { - "internalName": "lectern_sides", - "displayName": "Lectern (Side) [PS4 ONLY]" - }, - { - "internalName": "lectern_front", - "displayName": "Lectern (Front) [PS4 ONLY]" - }, - { - "internalName": "lectern_base", - "displayName": "Lectern (Base) [PS4 ONLY]" - }, - { - "internalName": "lectern_top", - "displayName": "Lectern (Top) [PS4 ONLY]" - }, - { - "internalName": "loom_side", - "displayName": "Loom (Side) [PS4 ONLY]" - }, - { - "internalName": "loom_front", - "displayName": "Loom (Front) [PS4 ONLY]" - }, - { - "internalName": "loom_top", - "displayName": "Loom (Top) [PS4 ONLY]" - }, - { - "internalName": "loom_bottom", - "displayName": "Loom (Bottom) [PS4 ONLY]" - }, - { - "internalName": "smithing_table_side", - "displayName": "Smithing Table (Side) [PS4 ONLY]" - }, - { - "internalName": "smithing_table_front", - "displayName": "Smithing Table (Front) [PS4 ONLY]" - }, - { - "internalName": "smithing_table_top", - "displayName": "Smithing Table (Top) [PS4 ONLY]" - }, - { - "internalName": "composter_top", - "displayName": "Composter (Top) [PS4 ONLY]" - }, - { - "internalName": "fletcher_table_side2", - "displayName": "Fletching Table (Front and Back) [PS4 ONLY]" - }, - { - "internalName": "fletcher_table_side1", - "displayName": "Fletching Table (Side) [PS4 ONLY]" - }, - { - "internalName": "fletcher_table_top", - "displayName": "Fletching Table (Top) [PS4 ONLY]" - }, - { - "internalName": "stonecutter2_saw", - "displayName": "Stonecutter (Saw) [PS4 ONLY]" - }, - { - "internalName": "stonecutter2_side", - "displayName": "Stonecutter (Side) [PS4 ONLY]" - }, - { - "internalName": "stonecutter2_top", - "displayName": "Stonecutter (Top) [PS4 ONLY]" - }, - { - "internalName": "stonecutter2_bottom", - "displayName": "Stonecutter (Bottom) [PS4 ONLY]" - }, - { - "internalName": "smoker_side", - "displayName": "Smoker (Side) [PS4 ONLY]" - }, - { - "internalName": "smoker_front", - "displayName": "Smoker (Front) [PS4 ONLY]" - }, - { - "internalName": "smoker_front_on", - "displayName": "Smoker (Front) (Lit) [PS4 ONLY]" - }, - { - "internalName": "smoker_top", - "displayName": "Smoker (Top) [PS4 ONLY]" - }, - { - "internalName": "smoker_bottom", - "displayName": "Smoker (Bottom) [PS4 ONLY]" - }, - { - "internalName": "compost", - "displayName": "Compost [PS4 ONLY]" - }, - { - "internalName": "compost_ready", - "displayName": "Compost (Ready) [PS4 ONLY]" - }, - { - "internalName": "composter_bottom", - "displayName": "Composter (Bottom) [PS4 ONLY]" - }, - { - "internalName": "composter_side", - "displayName": "Composter (Side) [PS4 ONLY]" - }, - { - "internalName": "barrel_top_open", - "displayName": "Barrel (Top) (Open) [PS4 ONLY]" - }, - { - "internalName": "smithing_table_bottom", - "displayName": "Smithing Table (Bottom) [PS4 ONLY]" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - } - ], - "items": [ - { - "internalName": "helmetCloth", - "displayName": "Leather Cap", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "Armour_Default_Leather_Colour", - "variants": [ "Armour_Default_Leather_Colour" ] - } - }, - { - "internalName": "helmetChain", - "displayName": "Chain Helmet" - }, - { - "internalName": "helmetIron", - "displayName": "Iron Helmet" - }, - { - "internalName": "helmetDiamond", - "displayName": "Diamond Helmet" - }, - { - "internalName": "helmetGold", - "displayName": "Golden Helmet" - }, - { - "internalName": "flintAndSteel", - "displayName": "Flint and Steel" - }, - { - "internalName": "flint", - "displayName": "Flint" - }, - { - "internalName": "coal", - "displayName": "Coal" - }, - { - "internalName": "string", - "displayName": "String" - }, - { - "internalName": "seeds", - "displayName": "Seeds" - }, - { - "internalName": "apple", - "displayName": "Apple" - }, - { - "internalName": "appleGold", - "displayName": "Golden Apple" - }, - { - "internalName": "egg", - "displayName": "Egg" - }, - { - "internalName": "sugar", - "displayName": "Sugar" - }, - { - "internalName": "snowball", - "displayName": "Snowball" - }, - { - "internalName": "elytra", - "displayName": "Elytra" - }, - { - "internalName": "chestplateCloth", - "displayName": "Leather Tunic", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "Armour_Default_Leather_Colour", - "variants": [ "Armour_Default_Leather_Colour" ] - } - }, - { - "internalName": "chestplateChain", - "displayName": "Chain Chestplate" - }, - { - "internalName": "chestplateIron", - "displayName": "Iron Chestplate" - }, - { - "internalName": "chestplateDiamond", - "displayName": "Diamond Chestplate" - }, - { - "internalName": "chestplateGold", - "displayName": "Golden Chestplate" - }, - { - "internalName": "bow", - "displayName": "Bow" - }, - { - "internalName": "brick", - "displayName": "Brick" - }, - { - "internalName": "ingotIron", - "displayName": "Iron Ingot" - }, - { - "internalName": "feather", - "displayName": "Feather" - }, - { - "internalName": "wheat", - "displayName": "Wheat" - }, - { - "internalName": "painting", - "displayName": "Painting" - }, - { - "internalName": "reeds", - "displayName": "Sugar Canes" - }, - { - "internalName": "bone", - "displayName": "Bone" - }, - { - "internalName": "cake", - "displayName": "Cake" - }, - { - "internalName": "slimeball", - "displayName": "Slimeball" - }, - { - "internalName": "broken_elytra", - "displayName": "Elytra (Broken)" - }, - { - "internalName": "leggingsCloth", - "displayName": "Leather Pants", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "Armour_Default_Leather_Colour", - "variants": [ "Armour_Default_Leather_Colour" ] - } - }, - { - "internalName": "leggingsChain", - "displayName": "Chain Leggings" - }, - { - "internalName": "leggingsIron", - "displayName": "Iron Leggings" - }, - { - "internalName": "leggingsDiamond", - "displayName": "Diamond Leggings" - }, - { - "internalName": "leggingsGold", - "displayName": "Golden Leggings" - }, - { - "internalName": "arrow", - "displayName": "Arrow" - }, - { - "internalName": "end_crystal", - "displayName": "End Crystal" - }, - { - "internalName": "ingotGold", - "displayName": "Gold Ingot" - }, - { - "internalName": "sulphur", - "displayName": "Gunpowder" - }, - { - "internalName": "bread", - "displayName": "Bread" - }, - { - "internalName": "sign", - "displayName": "Oak Sign" - }, - { - "internalName": "doorWood", - "displayName": "Oak Door" - }, - { - "internalName": "doorIron", - "displayName": "Iron Door" - }, - { - "internalName": "bed", - "displayName": "Bed" - }, - { - "internalName": "fireball", - "displayName": "Fire Charge" - }, - { - "internalName": "chorus_fruit", - "displayName": "Chorus Fruit" - }, - { - "internalName": "bootsCloth", - "displayName": "Leather Boots", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "Armour_Default_Leather_Colour", - "variants": [ "Armour_Default_Leather_Colour" ] - } - }, - { - "internalName": "bootsChain", - "displayName": "Chain Boots" - }, - { - "internalName": "bootsIron", - "displayName": "Iron Boots" - }, - { - "internalName": "bootsDiamond", - "displayName": "Diamond Boots" - }, - { - "internalName": "bootsGold", - "displayName": "Golden Boots" - }, - { - "internalName": "stick", - "displayName": "Stick" - }, - { - "internalName": "compass", - "displayName": "Compass" - }, - { - "internalName": "diamond", - "displayName": "Diamond" - }, - { - "internalName": "redstone", - "displayName": "Redstone" - }, - { - "internalName": "clay", - "displayName": "Clay" - }, - { - "internalName": "paper", - "displayName": "Paper" - }, - { - "internalName": "book", - "displayName": "Book" - }, - { - "internalName": "map", - "displayName": "Map" - }, - { - "internalName": "seeds_pumpkin", - "displayName": "Pumpkin Seeds" - }, - { - "internalName": "seeds_melon", - "displayName": "Melon Seeds" - }, - { - "internalName": "chorus_fruit_popped", - "displayName": "Popped Chorus Fruit" - }, - { - "internalName": "swordWood", - "displayName": "Wooden Sword" - }, - { - "internalName": "swordStone", - "displayName": "Stone Sword" - }, - { - "internalName": "swordIron", - "displayName": "Iron Sword" - }, - { - "internalName": "swordDiamond", - "displayName": "Diamond Sword" - }, - { - "internalName": "swordGold", - "displayName": "Golden Sword" - }, - { - "internalName": "fishingRod_uncast", - "displayName": "Fishing Rod" - }, - { - "internalName": "clock", - "displayName": "Clock" - }, - { - "internalName": "bowl", - "displayName": "Bowl" - }, - { - "internalName": "mushroomStew", - "displayName": "Mushroom Stew" - }, - { - "internalName": "yellowDust", - "displayName": "Glowstone Dust" - }, - { - "internalName": "bucket", - "displayName": "Bucket" - }, - { - "internalName": "bucketWater", - "displayName": "Water Bucket" - }, - { - "internalName": "bucketLava", - "displayName": "Lava Bucket" - }, - { - "internalName": "milk", - "displayName": "Milk Bucket" - }, - { - "internalName": "dyePowder_black", - "displayName": "Ink Sac" - }, - { - "internalName": "dyePowder_gray", - "displayName": "Gray Dye" - }, - { - "internalName": "shovelWood", - "displayName": "Wooden Shovel" - }, - { - "internalName": "shovelStone", - "displayName": "Stone Shovel" - }, - { - "internalName": "shovelIron", - "displayName": "Iron Shovel" - }, - { - "internalName": "shovelDiamond", - "displayName": "Diamond Shovel" - }, - { - "internalName": "shovelGold", - "displayName": "Golden Shovel" - }, - { - "internalName": "fishingRod_cast", - "displayName": "Fishing Rod (Cast)" - }, - { - "internalName": "diode", - "displayName": "Redstone Repeater" - }, - { - "internalName": "porkchopRaw", - "displayName": "Raw Porkchop" - }, - { - "internalName": "porkchopCooked", - "displayName": "Cooked Porkchop" - }, - { - "internalName": "fishRaw", - "displayName": "Raw Cod" - }, - { - "internalName": "fishCooked", - "displayName": "Cooked Cod" - }, - { - "internalName": "rottenFlesh", - "displayName": "Rotten Flesh" - }, - { - "internalName": "cookie", - "displayName": "Cookie" - }, - { - "internalName": "shears", - "displayName": "Shears" - }, - { - "internalName": "dyePowder_red", - "displayName": "Rose Red" - }, - { - "internalName": "dyePowder_pink", - "displayName": "Pink Dye" - }, - { - "internalName": "pickaxeWood", - "displayName": "Wooden Pickaxe" - }, - { - "internalName": "pickaxeStone", - "displayName": "Stone Pickaxe" - }, - { - "internalName": "pickaxeIron", - "displayName": "Iron Pickaxe" - }, - { - "internalName": "pickaxeDiamond", - "displayName": "Diamond Pickaxe" - }, - { - "internalName": "pickaxeGold", - "displayName": "Golden Pickaxe" - }, - { - "internalName": "bow_pull_0", - "displayName": "Bow (Pulling Stage 1)" - }, - { - "internalName": "carrotOnAStick", - "displayName": "Carrot on a Stick" - }, - { - "internalName": "leather", - "displayName": "Leather" - }, - { - "internalName": "saddle", - "displayName": "Saddle" - }, - { - "internalName": "beefRaw", - "displayName": "Raw Beef" - }, - { - "internalName": "beefCooked", - "displayName": "Steak" - }, - { - "internalName": "enderPearl", - "displayName": "Ender Pearl" - }, - { - "internalName": "blazeRod", - "displayName": "Blaze Rod" - }, - { - "internalName": "melon", - "displayName": "Melon Slice" - }, - { - "internalName": "dyePowder_green", - "displayName": "Cactus Green" - }, - { - "internalName": "dyePowder_lime", - "displayName": "Lime Dye" - }, - { - "internalName": "hatchetWood", - "displayName": "Wooden Axe" - }, - { - "internalName": "hatchetStone", - "displayName": "Stone Axe" - }, - { - "internalName": "hatchetIron", - "displayName": "Iron Axe" - }, - { - "internalName": "hatchetDiamond", - "displayName": "Diamond Axe" - }, - { - "internalName": "hatchetGold", - "displayName": "Golden Axe" - }, - { - "internalName": "bow_pull_1", - "displayName": "Bow (Pulling Stage 2)" - }, - { - "internalName": "potatoBaked", - "displayName": "Baked Potato" - }, - { - "internalName": "potato", - "displayName": "Potato" - }, - { - "internalName": "carrots", - "displayName": "Carrot" - }, - { - "internalName": "chickenRaw", - "displayName": "Raw Chicken" - }, - { - "internalName": "chickenCooked", - "displayName": "Cooked Chicken" - }, - { - "internalName": "ghastTear", - "displayName": "Ghast Tear" - }, - { - "internalName": "goldNugget", - "displayName": "Gold Nugget" - }, - { - "internalName": "netherStalkSeeds", - "displayName": "Nether Wart" - }, - { - "internalName": "dyePowder_brown", - "displayName": "Cocoa Beans" - }, - { - "internalName": "dyePowder_yellow", - "displayName": "Dandelion Yellow" - }, - { - "internalName": "hoeWood", - "displayName": "Wooden Hoe" - }, - { - "internalName": "hoeStone", - "displayName": "Stone Hoe" - }, - { - "internalName": "hoeIron", - "displayName": "Iron Hoe" - }, - { - "internalName": "hoeDiamond", - "displayName": "Diamond Hoe" - }, - { - "internalName": "hoeGold", - "displayName": "Golden Hoe" - }, - { - "internalName": "bow_pull_2", - "displayName": "Bow (Pulling Stage 3)" - }, - { - "internalName": "potatoPoisonous", - "displayName": "Poisonous Potato" - }, - { - "internalName": "minecart", - "displayName": "Minecart" - }, - { - "internalName": "boat", - "displayName": "Oak Boat" - }, - { - "internalName": "speckledMelon", - "displayName": "Glistering Melon" - }, - { - "internalName": "fermentedSpiderEye", - "displayName": "Fermented Spider Eye" - }, - { - "internalName": "spiderEye", - "displayName": "Spider Eye" - }, - { - "internalName": "glassBottle", - "displayName": "Glass Bottle" - }, - { - "internalName": "potion_contents", - "displayName": "Potion (Overlay)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "dyePowder_blue", - "displayName": "Lapis Lazuli" - }, - { - "internalName": "dyePowder_light_blue", - "displayName": "Light Blue Dye" - }, - { - "internalName": "helmetCloth_overlay", - "displayName": "Leather Cap (Overlay)" - }, - { - "internalName": "spectral_arrow", - "displayName": "Spectral Arrow" - }, - { - "internalName": "iron_horse_armor", - "displayName": "Iron Horse Armor" - }, - { - "internalName": "diamond_horse_armor", - "displayName": "Diamond Horse Armor" - }, - { - "internalName": "gold_horse_armor", - "displayName": "Gold Horse Armor" - }, - { - "internalName": "comparator", - "displayName": "Redstone Comparator" - }, - { - "internalName": "carrotGolden", - "displayName": "Golden Carrot" - }, - { - "internalName": "minecart_chest", - "displayName": "Minecart with Chest" - }, - { - "internalName": "pumpkinPie", - "displayName": "Pumpkin Pie" - }, - { - "internalName": "monsterPlacer", - "displayName": "Spawn Egg", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Mob_Creeper_Colour1", - "variants": [ - "Mob_Creeper_Colour1", - "Mob_Skeleton_Colour1", - "Mob_Spider_Colour1", - "Mob_Zombie_Colour1", - "Mob_Slime_Colour1", - "Mob_Ghast_Colour1", - "Mob_PigZombie_Colour1", - "Mob_Enderman_Colour1", - "Mob_CaveSpider_Colour1", - "Mob_Silverfish_Colour1", - "Mob_Blaze_Colour1", - "Mob_LavaSlime_Colour1", - "Mob_Pig_Colour1", - "Mob_Sheep_Colour1", - "Mob_Cow_Colour1", - "Mob_Chicken_Colour1", - "Mob_Squid_Colour1", - "Mob_Wolf_Colour1", - "Mob_MushroomCow_Colour1", - "Mob_Ocelot_Colour1", - "Mob_Villager_Colour1", - "Mob_Bat_Colour1", - "Mob_Witch_Colour1", - "Mob_Horse_Colour1", - "Mob_Endermite_Color1", - "Mob_Guardian_Color1", - "Mob_Rabbit_Colour1", - "Mob_PolarBear_Colour1", - "Mob_Shulker_Colour1", - "Mob_Elder_Guardian_Colour1", - "Mob_Evocation_Illager_Colour1", - "Mob_Llama_Colour1", - "Mob_Donkey_Colour1", - "Mob_Skeleton_Horse_Colour1", - "Mob_Zombie_Horse_Colour1", - "Mob_Mule_Colour1", - "Mob_Stray_Colour1", - "Mob_Husk_Colour1", - "Mob_Vex_Colour1", - "Mob_Vindication_Illager_Colour1", - "Mob_Zombie_Villager_Colour1", - "Mob_Parrot_Colour1", - "Mob_Wither_Skeleton_Colour1", - "Mob_Turtle_Colour1", - "Mob_Tropical_Colour1", - "Mob_Cod_Colour1", - "Mob_Pufferfish_Colour1", - "Mob_Salmon_Colour1", - "Mob_Drowned_Colour1", - "Mob_Dolphin_Colour1", - "Mob_Phantom_Colour1" - ] - } - }, - { - "internalName": "potion_splash", - "displayName": "Splash Potion" - }, - { - "internalName": "eyeOfEnder", - "displayName": "Eye of Ender" - }, - { - "internalName": "cauldron", - "displayName": "Cauldron" - }, - { - "internalName": "blazePowder", - "displayName": "Blaze Powder" - }, - { - "internalName": "dyePowder_purple", - "displayName": "Purple Dye" - }, - { - "internalName": "dyePowder_magenta", - "displayName": "Magenta Dye" - }, - { - "internalName": "chestplateCloth_overlay", - "displayName": "Leather Tunic (Overlay)" - }, - { - "internalName": "tipped_arrow_base", - "displayName": "Tipped Arrow" - }, - { - "internalName": "dragon_breath", - "displayName": "Dragon's Breath" - }, - { - "internalName": "name_tag", - "displayName": "Name Tag" - }, - { - "internalName": "lead", - "displayName": "Lead" - }, - { - "internalName": "netherbrick", - "displayName": "Nether Brick" - }, - { - "internalName": "fish_clownfish_raw", - "displayName": "Tropical Fish" - }, - { - "internalName": "minecart_furnace", - "displayName": "Minecart with Furnace" - }, - { - "internalName": "charcoal", - "displayName": "Charcoal" - }, - { - "internalName": "monsterPlacer_overlay", - "displayName": "Spawn Egg (Overlay)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Mob_Creeper_Colour2", - "variants": [ - "Mob_Creeper_Colour2", - "Mob_Skeleton_Colour2", - "Mob_Spider_Colour2", - "Mob_Zombie_Colour2", - "Mob_Slime_Colour2", - "Mob_Ghast_Colour2", - "Mob_PigZombie_Colour2", - "Mob_Enderman_Colour2", - "Mob_CaveSpider_Colour2", - "Mob_Silverfish_Colour2", - "Mob_Blaze_Colour2", - "Mob_LavaSlime_Colour2", - "Mob_Pig_Colour2", - "Mob_Sheep_Colour2", - "Mob_Cow_Colour2", - "Mob_Chicken_Colour2", - "Mob_Squid_Colour2", - "Mob_Wolf_Colour2", - "Mob_MushroomCow_Colour2", - "Mob_Ocelot_Colour2", - "Mob_Villager_Colour2", - "Mob_Bat_Colour2", - "Mob_Witch_Colour2", - "Mob_Horse_Colour2", - "Mob_Endermite_Color2", - "Mob_Guardian_Color2", - "Mob_Rabbit_Colour2", - "Mob_PolarBear_Colour2", - "Mob_Shulker_Colour2", - "Mob_Elder_Guardian_Colour2", - "Mob_Evocation_Illager_Colour2", - "Mob_Llama_Colour2", - "Mob_Donkey_Colour2", - "Mob_Skeleton_Horse_Colour2", - "Mob_Zombie_Horse_Colour2", - "Mob_Mule_Colour2", - "Mob_Stray_Colour2", - "Mob_Husk_Colour2", - "Mob_Vex_Colour2", - "Mob_Vindication_Illager_Colour2", - "Mob_Zombie_Villager_Colour2", - "Mob_Parrot_Colour2", - "Mob_Wither_Skeleton_Colour2", - "Mob_Turtle_Colour2", - "Mob_Tropical_Colour2", - "Mob_Cod_Colour2", - "Mob_Pufferfish_Colour2", - "Mob_Salmon_Colour2", - "Mob_Drowned_Colour2", - "Mob_Dolphin_Colour2", - "Mob_Phantom_Colour2" - ] - } - }, - { - "internalName": "bed_overlay", - "displayName": "Bed (Overlay)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Bed_White", - "variants": [ - "Bed_Black", - "Bed_Blue", - "Bed_Brown", - "Bed_Cyan", - "Bed_Grey", - "Bed_Green", - "Bed_Light_Blue", - "Bed_Lime", - "Bed_Magenta", - "Bed_Orange", - "Bed_Pink", - "Bed_Purple", - "Bed_Red", - "Bed_Silver", - "Bed_White", - "Bed_Yellow" - ] - } - }, - { - "internalName": "expBottle", - "displayName": "Bottle o'Enchanting" - }, - { - "internalName": "brewingStand", - "displayName": "Brewing Stand" - }, - { - "internalName": "magmaCream", - "displayName": "Magma Cream" - }, - { - "internalName": "dyePowder_cyan", - "displayName": "Cyan Dye" - }, - { - "internalName": "dyePowder_orange", - "displayName": "Orange Dye" - }, - { - "internalName": "leggingsCloth_overlay", - "displayName": "Leather Pants (Overlay)" - }, - { - "internalName": "tipped_arrow_head", - "displayName": "Tipped Arrow (Overlay)" - }, - { - "internalName": "potion_bottle_lingering", - "displayName": "Lingering Potion" - }, - { - "internalName": "barrier", - "displayName": "debug_fourj_item" - }, - { - "internalName": "mutton_raw", - "displayName": "Raw Mutton" - }, - { - "internalName": "rabbit_raw", - "displayName": "Raw Rabbit" - }, - { - "internalName": "fish_pufferfish_raw", - "displayName": "Pufferfish" - }, - { - "internalName": "minecart_hopper", - "displayName": "Minecart with Hopper" - }, - { - "internalName": "hopper", - "displayName": "Hopper" - }, - { - "internalName": "nether_star", - "displayName": "Nether Star" - }, - { - "internalName": "emerald", - "displayName": "Emerald" - }, - { - "internalName": "writingBook", - "displayName": "Book and Quill" - }, - { - "internalName": "writtenBook", - "displayName": "Written Book" - }, - { - "internalName": "flowerPot", - "displayName": "Flower Pot" - }, - { - "internalName": "dyePowder_silver", - "displayName": "Light Gray Dye" - }, - { - "internalName": "dyePowder_white", - "displayName": "Bone Meal" - }, - { - "internalName": "bootsCloth_overlay", - "displayName": "Leather Boots (Overlay)" - }, - { - "internalName": "beetroot", - "displayName": "Beetroot" - }, - { - "internalName": "beetroot_seeds", - "displayName": "Beetroot Seeds" - }, - { - "internalName": "beetroot_soup", - "displayName": "Beetroot Soup" - }, - { - "internalName": "mutton_cooked", - "displayName": "Cooked Mutton" - }, - { - "internalName": "rabbit_cooked", - "displayName": "Cooked Rabbit" - }, - { - "internalName": "fish_salmon_raw", - "displayName": "Raw Salmon" - }, - { - "internalName": "minecart_tnt", - "displayName": "Minecart with TNT" - }, - { - "internalName": "wooden_armorstand", - "displayName": "Armor Stand" - }, - { - "internalName": "fireworks", - "displayName": "Firework Rocket" - }, - { - "internalName": "fireworks_charge", - "displayName": "Firework Star" - }, - { - "internalName": "fireworks_charge_overlay", - "displayName": "Firework Star (Overlay)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "", - "variants": [""] - } - }, - { - "internalName": "netherquartz", - "displayName": "Nether Quartz" - }, - { - "internalName": "map_empty", - "displayName": "Empty Map" - }, - { - "internalName": "frame", - "displayName": "Item Frame" - }, - { - "internalName": "enchantedBook", - "displayName": "Enchanted Book" - }, - { - "internalName": "door_acacia", - "displayName": "Acacia Door" - }, - { - "internalName": "door_birch", - "displayName": "Birch Door" - }, - { - "internalName": "door_dark_oak", - "displayName": "Dark Oak Door" - }, - { - "internalName": "door_jungle", - "displayName": "Jungle Door" - }, - { - "internalName": "door_spruce", - "displayName": "Spruce Door" - }, - { - "internalName": "rabbit_stew", - "displayName": "Rabbit Stew" - }, - { - "internalName": "fish_salmon_cooked", - "displayName": "Cooked Salmon" - }, - { - "internalName": "minecart_command_block", - "displayName": "Minecart with Command Block" - }, - { - "internalName": "acacia_boat", - "displayName": "Acacia Boat" - }, - { - "internalName": "birch_boat", - "displayName": "Birch Boat" - }, - { - "internalName": "dark_oak_boat", - "displayName": "Dark Oak Boat" - }, - { - "internalName": "jungle_boat", - "displayName": "Jungle Boat" - }, - { - "internalName": "spruce_boat", - "displayName": "Spruce Boat" - }, - { - "internalName": "prismarine_shard", - "displayName": "Prismarine Shard" - }, - { - "internalName": "prismarine_crystals", - "displayName": "Prismarine Crystals" - }, - { - "internalName": "leather_horse_armor_base", - "displayName": "Leather Horse Armor", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "Armour_Default_Leather_Colour", - "variants": [ "Armour_Default_Leather_Colour" ] - } - }, - { - "internalName": "structure_void", - "displayName": "Structure Void" - }, - { - "internalName": "map_filled_markings", - "displayName": "Filled Map (Overlay)" - }, - { - "internalName": "totem", - "displayName": "Totem of Undying" - }, - { - "internalName": "shulker_shell", - "displayName": "Shulker Shell" - }, - { - "internalName": "iron_nugget", - "displayName": "Iron Nugget" - }, - { - "internalName": "rabbit_foot", - "displayName": "Rabbit's Foot" - }, - { - "internalName": "rabbit_hide", - "displayName": "Rabbit Hide" - }, - { - "internalName": "compass", - "displayName": "" - }, - { - "internalName": "compass", - "displayName": "" - }, - { - "internalName": "compass", - "displayName": "" - }, - { - "internalName": "compass", - "displayName": "" - }, - { - "internalName": "clock", - "displayName": "" - }, - { - "internalName": "clock", - "displayName": "" - }, - { - "internalName": "clock", - "displayName": "" - }, - { - "internalName": "clock", - "displayName": "" - }, - { - "internalName": "dragonFireball", - "displayName": "Dragon Fireball" - }, - { - "internalName": "record_13", - "displayName": "Music Disc (C418 - 13)" - }, - { - "internalName": "record_cat", - "displayName": "Music Disc (C418 - cat)" - }, - { - "internalName": "record_blocks", - "displayName": "Music Disc (C418 - blocks)" - }, - { - "internalName": "record_chirp", - "displayName": "Music Disc (C418 - chirp)" - }, - { - "internalName": "record_far", - "displayName": "Music Disc (C418 - far)" - }, - { - "internalName": "record_mall", - "displayName": "Music Disc (C418 - mall)" - }, - { - "internalName": "record_mellohi", - "displayName": "Music Disc (C418 - mellohi)" - }, - { - "internalName": "record_stal", - "displayName": "Music Disc (C418 - stal)" - }, - { - "internalName": "record_strad", - "displayName": "Music Disc (C418 - strad)" - }, - { - "internalName": "record_ward", - "displayName": "Music Disc (C418 - ward)" - }, - { - "internalName": "record_11", - "displayName": "Music Disc (C418 - 11)" - }, - { - "internalName": "record_where are we now", - "displayName": "Music Disc (C418 - wait)" - }, - { - "internalName": "bucketFish", - "displayName": "Bucket of Cod" - }, - { - "internalName": "bucketSalmon", - "displayName": "Bucket of Salmon" - }, - { - "internalName": "bucketPuffer", - "displayName": "Bucket of Pufferfish" - }, - { - "internalName": "bucketTropical", - "displayName": "Bucket of Tropical Fish" - }, - { - "internalName": "leather_horse_armor_detail", - "displayName": "Leather Horse Armor (Overlay)" - }, - { - "internalName": "dyePowder_black1", - "displayName": "Black Dye [PS4 ONLY]" - }, - { - "internalName": "dyePowder_blue1", - "displayName": "Blue Dye [PS4 ONLY]" - }, - { - "internalName": "dyePowder_brown1", - "displayName": "Brown Dye [PS4 ONLY]" - }, - { - "internalName": "dyePowder_white1", - "displayName": "White Dye [PS4 ONLY]" - }, - { - "internalName": "bamboo", - "displayName": "Bamboo [PS4 ONLY]" - }, - { - "internalName": "lantern_carried", - "displayName": "Lantern [PS4 ONLY]" - }, - { - "internalName": "kelp", - "displayName": "Kelp" - }, - { - "internalName": "dried_kelp", - "displayName": "Dried Kelp" - }, - { - "internalName": "sea_pickle", - "displayName": "Sea Pickle" - }, - { - "internalName": "nautilus", - "displayName": "Nautilus Shell" - }, - { - "internalName": "nautilus_core", - "displayName": "Heart of the Sea" - }, - { - "internalName": "turtle_helmet", - "displayName": "Turtle Shell" - }, - { - "internalName": "turtle_shell_piece", - "displayName": "Scute" - }, - { - "internalName": "trident", - "displayName": "Trident" - }, - { - "internalName": "phantom_membrane", - "displayName": "Phantom Membrane" - }, - { - "internalName": "acacia_sign", - "displayName": "Acacia Sign [PS4 ONLY]" - }, - { - "internalName": "birch_sign", - "displayName": "Birch Sign [PS4 ONLY]" - }, - { - "internalName": "dark_oak_sign", - "displayName": "Dark Oak Sign [PS4 ONLY]" - }, - { - "internalName": "jungle_sign", - "displayName": "Jungle Sign [PS4 ONLY]" - }, - { - "internalName": "spruce_sign", - "displayName": "Spruce Sign [PS4 ONLY]" - }, - { - "internalName": "crossbow", - "displayName": "Crossbow [PS4 ONLY]" - }, - { - "internalName": "crossbow_pull_0", - "displayName": "Crossbow (Pulling Stage 1) [PS4 ONLY]" - }, - { - "internalName": "crossbow_pull_1", - "displayName": "Crossbow (Pulling Stage 2) [PS4 ONLY]" - }, - { - "internalName": "crossbow_pull_2", - "displayName": "Crossbow (Pulling Stage 3) [PS4 ONLY]" - }, - { - "internalName": "crossbow_arrow", - "displayName": "Crossbow (Loaded) [PS4 ONLY]" - }, - { - "internalName": "crossbow_firework", - "displayName": "Crossbow (Loaded) (Firework) [PS4 ONLY]" - }, - { - "internalName": "sweet_berries", - "displayName": "Sweet Berries [PS4 ONLY]" - }, - { - "internalName": "banner_pattern", - "displayName": "Banner Pattern [PS4 ONLY]" - }, - { - "internalName": "bell", - "displayName": "Bell [PS4 ONLY]" - }, - { - "internalName": "campfire_carried", - "displayName": "Campfire [PS4 ONLY]" - }, - { - "internalName": "", - "displayName": "" - } - ], - "moon_phases": [ - { - "internalName": "moon_phase_0", - "displayName": "Full Moon" - }, - { - "internalName": "moon_phase_1", - "displayName": "Waning Gibbous" - }, - { - "internalName": "moon_phase_2", - "displayName": "Last Quarter" - }, - { - "internalName": "moon_phase_3", - "displayName": "Waning Crescent" - }, - { - "internalName": "moon_phase_4", - "displayName": "New Moon" - }, - { - "internalName": "moon_phase_5", - "displayName": "Waxing Crescent" - }, - { - "internalName": "moon_phase_6", - "displayName": "First Quarter" - }, - { - "internalName": "moon_phase_7", - "displayName": "Waxing Gibbous" - } - ], - "map_icons": [ - { - "internalName": "player_1", - "displayName": "Player 1" - }, - { - "internalName": "player_2", - "displayName": "Player 2" - }, - { - "internalName": "player_3", - "displayName": "Player 3" - }, - { - "internalName": "player_4", - "displayName": "Player 4" - }, - { - "internalName": "target_x", - "displayName": "Unused" - }, - { - "internalName": "target_point", - "displayName": "Target Point (Unused)" - }, - { - "internalName": "player_off_map", - "displayName": "Player (Off Map) (Unused)" - }, - { - "internalName": "frame", - "displayName": "Item Frame" - }, - { - "internalName": "player_5", - "displayName": "Player 5" - }, - { - "internalName": "player_6", - "displayName": "Player 6" - }, - { - "internalName": "player_7", - "displayName": "Player 7" - }, - { - "internalName": "player_8", - "displayName": "Player 8" - }, - { - "internalName": "structure", - "displayName": "Structure (Explorer Map)" - }, - { - "internalName": "player_off_limits", - "displayName": "Player (Off Limits) (Unused)" - }, - { - "internalName": "mansion", - "displayName": "Woodland Mansion (Explorer Map)" - }, - { - "internalName": "monument", - "displayName": "Ocean Monument (Explorer Map)" - } - ], - "additional_map_icons": [ - { - "internalName": "player_1_off_map", - "displayName": "Player 1 (Off Map)" - }, - { - "internalName": "player_2_off_map", - "displayName": "Player 2 (Off Map)" - }, - { - "internalName": "player_3_off_map", - "displayName": "Player 3 (Off Map)" - }, - { - "internalName": "player_4_off_map", - "displayName": "Player 4 (Off Map)" - }, - { - "internalName": "treasure", - "displayName": "Buried Treasure" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "player_5_off_map", - "displayName": "Player 5 (Off Map)" - }, - { - "internalName": "player_6_off_map", - "displayName": "Player 6 (Off Map)" - }, - { - "internalName": "player_7_off_map", - "displayName": "Player 7 (Off Map)" - }, - { - "internalName": "player_8_off_map", - "displayName": "Player 8 (Off Map)" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - } - ], - "experience_orbs": [ - { - "internalName": "experience_orb_0", - "displayName": "Experience Orb (Size 1)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_1", - "displayName": "Experience Orb (Size 2)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_2", - "displayName": "Experience Orb (Size 3)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_3", - "displayName": "Experience Orb (Size 4)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_4", - "displayName": "Experience Orb (Size 5)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_5", - "displayName": "Experience Orb (Size 6)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_6", - "displayName": "Experience Orb (Size 7)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_7", - "displayName": "Experience Orb (Size 8)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_8", - "displayName": "Experience Orb (Size 9)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_9", - "displayName": "Experience Orb (Size 10)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_10", - "displayName": "Experience Orb (Size 11)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - } - ], - "explosion": [ - { - "internalName": "explosion_0", - "displayName": "Explosion (Stage 1)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_1", - "displayName": "Explosion (Stage 2)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_2", - "displayName": "Explosion (Stage 3)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_3", - "displayName": "Explosion (Stage 4)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_4", - "displayName": "Explosion (Stage 5)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_5", - "displayName": "Explosion (Stage 6)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_6", - "displayName": "Explosion (Stage 7)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_7", - "displayName": "Explosion (Stage 8)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_8", - "displayName": "Explosion (Stage 9)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_9", - "displayName": "Explosion (Stage 10)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_10", - "displayName": "Explosion (Stage 11)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_11", - "displayName": "Explosion (Stage 12)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_12", - "displayName": "Explosion (Stage 13)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_13", - "displayName": "Explosion (Stage 14)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_14", - "displayName": "Explosion (Stage 15)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_15", - "displayName": "Explosion (Stage 16)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - } - ], - "particles": [ - { - "internalName": "generic_0", - "displayName": "Generic (Stage 1)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "generic_1", - "displayName": "Generic (Stage 2)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "generic_2", - "displayName": "Generic (Stage 3)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "generic_3", - "displayName": "Generic (Stage 4)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "generic_4", - "displayName": "Generic (Stage 5)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "generic_5", - "displayName": "Generic (Stage 6)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "generic_6", - "displayName": "Generic (Stage 7)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "generic_7", - "displayName": "Generic (Stage 8)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "unused_splash_0", - "displayName": "Splash (Stage 1) (Unused)" - }, - { - "internalName": "unused_splash_1", - "displayName": "Splash (Stage 2) (Unused)" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "splash_0", - "displayName": "Splash (Stage 1)" - }, - { - "internalName": "splash_1", - "displayName": "Splash (Stage 2)" - }, - { - "internalName": "splash_2", - "displayName": "Splash (Stage 3)" - }, - { - "internalName": "splash_3", - "displayName": "Splash (Stage 4)" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "classic_bubble", - "displayName": "Bubble (Unused)" - }, - { - "internalName": "bobber", - "displayName": "Fishing Bobber" - }, - { - "internalName": "bubble", - "displayName": "Bubble", - "hasColourEntry": true, - "colourEntry": { - "isWaterColour": true, - "defaultName": "Water_Plains", - "variants": [ - "Water_Ocean", - "Water_Plains", - "Water_Desert", - "Water_ExtremeHills", - "Water_Forest", - "Water_Taiga", - "Water_Swampland", - "Water_River", - "Water_Hell", - "Water_Sky", - "Water_FrozenOcean", - "Water_FrozenRiver", - "Water_IcePlains", - "Water_IceMountains", - "Water_MushroomIsland", - "Water_MushroomIslandShore", - "Water_Beach", - "Water_DesertHills", - "Water_ForestHills", - "Water_TaigaHills", - "Water_ExtremeHillsEdge", - "Water_Jungle", - "Water_JungleHills", - "Water_JungleEdge", - "Water_DeepOcean", - "Water_StoneBeach", - "Water_ColdBeach", - "Water_BirchForest", - "Water_BirchForestHills", - "Water_RoofedForest", - "Water_ColdTaiga", - "Water_ColdTaigaHills", - "Water_MegaTaiga", - "Water_MegaTaigaHills", - "Water_ExtremeHillsPlus", - "Water_Savanna", - "Water_SavannaPlateau", - "Water_Mesa", - "Water_MesaPlateauF", - "Water_MesaPlateau" - ] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "Firework Flash", - "width": 4, - "height": 4, - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "", - "variants": [""] - } - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "flame", - "displayName": "Flame" - }, - { - "internalName": "lava", - "displayName": "Lava" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "note", - "displayName": "Noteblock Note", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Note_00", - "variants": [ - "Particle_Note_00", - "Particle_Note_01", - "Particle_Note_02", - "Particle_Note_03", - "Particle_Note_04", - "Particle_Note_05", - "Particle_Note_06", - "Particle_Note_07", - "Particle_Note_08", - "Particle_Note_09", - "Particle_Note_10", - "Particle_Note_11", - "Particle_Note_12", - "Particle_Note_13", - "Particle_Note_14", - "Particle_Note_15", - "Particle_Note_16", - "Particle_Note_17", - "Particle_Note_18", - "Particle_Note_19", - "Particle_Note_20", - "Particle_Note_21", - "Particle_Note_22", - "Particle_Note_23", - "Particle_Note_24", - ] - } - }, - { - "internalName": "critical_hit", - "displayName": "Critical Hit", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "critical_hit", - "variants": [ "critical_hit" ] - } - }, - { - "internalName": "enchanted_hit", - "displayName": "Enchanted Hit", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "critical_hit", - "variants": [ "critical_hit" ] - } - }, - { - "internalName": "damage", - "displayName": "Damage Indicator" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "heart", - "displayName": "Heart" - }, - { - "internalName": "angry", - "displayName": "Angry" - }, - { - "internalName": "glint", - "displayName": "Glint" - }, - { - "internalName": "angry_villager", - "displayName": "Angry Villager (Unused)" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "water_0", - "displayName": "Water (Stage 1) (Unused)" - }, - { - "internalName": "water_1", - "displayName": "Water (Stage 2) (Unused)" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "bubble_pop_0", - "displayName": "Bubble Pop (Stage 1) (Unused)", - "width": 2, - "height": 2 - }, - { - "internalName": "bubble_pop_0", - "displayName": "" - }, - { - "internalName": "bubble_pop_1", - "displayName": "Bubble Pop (Stage 2) (Unused)", - "width": 2, - "height": 2 - }, - { - "internalName": "bubble_pop_1", - "displayName": "" - }, - { - "internalName": "bubble_pop_2", - "displayName": "Bubble Pop (Stage 3) (Unused)", - "width": 2, - "height": 2 - }, - { - "internalName": "bubble_pop_2", - "displayName": "" - }, - { - "internalName": "bubble_pop_3", - "displayName": "Bubble Pop (Stage 4) (Unused)", - "width": 2, - "height": 2 - }, - { - "internalName": "bubble_pop_3", - "displayName": "" - }, - { - "internalName": "bubble_pop_4", - "displayName": "Bubble Pop (Stage 5) (Unused)", - "width": 2, - "height": 2 - }, - { - "internalName": "bubble_pop_4", - "displayName": "" - }, - { - "internalName": "drip_hang", - "displayName": "Drip (Hang)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_DripWater", - "variants": [ - "Particle_DripWater", - "Particle_DripLavaStart", - "Particle_DripLavaEnd" - ] - } - }, - { - "internalName": "drip_fall", - "displayName": "Drip (Fall)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_DripWater", - "variants": [ - "Particle_DripWater", - "Particle_DripLavaStart", - "Particle_DripLavaEnd" - ] - } - }, - { - "internalName": "drip_land", - "displayName": "Drip (Land)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_DripWater", - "variants": [ - "Particle_DripWater", - "Particle_DripLavaStart", - "Particle_DripLavaEnd" - ] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "bubble_pop_0", - "displayName": "" - }, - { - "internalName": "bubble_pop_0", - "displayName": "" - }, - { - "internalName": "bubble_pop_1", - "displayName": "" - }, - { - "internalName": "bubble_pop_1", - "displayName": "" - }, - { - "internalName": "bubble_pop_2", - "displayName": "" - }, - { - "internalName": "bubble_pop_2", - "displayName": "" - }, - { - "internalName": "bubble_pop_3", - "displayName": "" - }, - { - "internalName": "bubble_pop_3", - "displayName": "" - }, - { - "internalName": "bubble_pop_4", - "displayName": "" - }, - { - "internalName": "bubble_pop_4", - "displayName": "" - }, - { - "internalName": "effect_0", - "displayName": "Effect (Stage 1)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "effect_1", - "displayName": "Effect (Stage 2)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "effect_2", - "displayName": "Effect (Stage 3)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "effect_3", - "displayName": "Effect (Stage 4)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "effect_4", - "displayName": "Effect (Stage 5)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "effect_5", - "displayName": "Effect (Stage 6)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "effect_6", - "displayName": "Effect (Stage 7)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "effect_7", - "displayName": "Effect (Stage 8)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "spell_0", - "displayName": "Splash Effect (Stage 1)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "spell_1", - "displayName": "Splash Effect (Stage 2)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "spell_2", - "displayName": "Splash Effect (Stage 3)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "spell_3", - "displayName": "Splash Effect (Stage 4)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "spell_4", - "displayName": "Splash Effect (Stage 5)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "spell_5", - "displayName": "Splash Effect (Stage 6)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "spell_6", - "displayName": "Splash Effect (Stage 7)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "spell_7", - "displayName": "Splash Effect (Stage 8)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "spark_0", - "displayName": "Firework Spark (Stage 1)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "spark_1", - "displayName": "Firework Spark (Stage 2)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "spark_2", - "displayName": "Firework Spark (Stage 3)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "spark_3", - "displayName": "Firework Spark (Stage 4)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "spark_4", - "displayName": "Firework Spark (Stage 5)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "spark_5", - "displayName": "Firework Spark (Stage 6)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "spark_6", - "displayName": "Firework Spark (Stage 7)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "spark_7", - "displayName": "Firework Spark (Stage 8)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "glitter_0", - "displayName": "Shulker/End Rod Glitter (Stage 1)" - }, - { - "internalName": "glitter_1", - "displayName": "Shulker/End Rod Glitter (Stage 2)" - }, - { - "internalName": "glitter_2", - "displayName": "Shulker/End Rod Glitter (Stage 3)" - }, - { - "internalName": "glitter_3", - "displayName": "Shulker/End Rod Glitter (Stage 4)" - }, - { - "internalName": "glitter_4", - "displayName": "Shulker/End Rod Glitter (Stage 5)" - }, - { - "internalName": "glitter_5", - "displayName": "Shulker/End Rod Glitter (Stage 6)" - }, - { - "internalName": "glitter_6", - "displayName": "Shulker/End Rod Glitter (Stage 7)" - }, - { - "internalName": "glitter_7", - "displayName": "Shulker/End Rod Glitter (Stage 8)" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "camera_shoot_explosion_0", - "displayName": "Camera Shoot (Unused) (Stage 1)" - }, - { - "internalName": "camera_shoot_explosion_1", - "displayName": "Camera Shoot (Unused) (Stage 2)" - }, - { - "internalName": "camera_shoot_explosion_2", - "displayName": "Camera Shoot (Unused) (Stage 3)" - }, - { - "internalName": "camera_shoot_explosion_3", - "displayName": "Camera Shoot (Unused) (Stage 4)" - }, - { - "internalName": "camera_shoot_explosion_4", - "displayName": "Camera Shoot (Unused) (Stage 5)" - }, - { - "internalName": "camera_shoot_explosion_5", - "displayName": "Camera Shoot (Unused) (Stage 6)" - }, - { - "internalName": "camera_shoot_explosion_6", - "displayName": "Camera Shoot (Unused) (Stage 7)" - }, - { - "internalName": "camera_shoot_explosion_7", - "displayName": "Camera Shoot (Unused) (Stage 8)" - }, - { - "internalName": "camera_shoot_explosion_8", - "displayName": "Camera Shoot (Unused) (Stage 9)" - }, - { - "internalName": "camera_shoot_explosion_9", - "displayName": "Camera Shoot (Unused) (Stage 10)" - }, - { - "internalName": "camera_shoot_explosion_10", - "displayName": "Camera Shoot (Unused) (Stage 11)" - }, - { - "internalName": "camera_shoot_explosion_11", - "displayName": "Camera Shoot (Unused) (Stage 12)" - }, - { - "internalName": "camera_shoot_explosion_12", - "displayName": "Camera Shoot (Unused) (Stage 13)" - }, - { - "internalName": "camera_shoot_explosion_13", - "displayName": "Camera Shoot (Unused) (Stage 14)" - }, - { - "internalName": "camera_shoot_explosion_14", - "displayName": "Camera Shoot (Unused) (Stage 15)" - }, - { - "internalName": "camera_shoot_explosion_15", - "displayName": "Camera Shoot (Unused) (Stage 16)" - }, - { - "internalName": "conduit_0", - "displayName": "Conduit (Unused) (Stage 1)" - }, - { - "internalName": "conduit_1", - "displayName": "Conduit (Unused) (Stage 2)" - }, - { - "internalName": "conduit_2", - "displayName": "Conduit (Unused) (Stage 3)" - }, - { - "internalName": "conduit_3", - "displayName": "Conduit (Unused) (Stage 4)" - }, - { - "internalName": "conduit_4", - "displayName": "Conduit (Unused) (Stage 5)" - }, - { - "internalName": "conduit_5", - "displayName": "Conduit (Unused) (Stage 6)" - }, - { - "internalName": "conduit_6", - "displayName": "Conduit (Unused) (Stage 7)" - }, - { - "internalName": "conduit_7", - "displayName": "Conduit (Unused) (Stage 8)" - }, - { - "internalName": "conduit_8", - "displayName": "Conduit (Unused) (Stage 9)" - }, - { - "internalName": "conduit_9", - "displayName": "Conduit (Unused) (Stage 10)" - }, - { - "internalName": "conduit_10", - "displayName": "Conduit (Unused) (Stage 11)" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "sga_a", - "displayName": "Standard Galactic Language (A)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_b", - "displayName": "Standard Galactic Language (B)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_c", - "displayName": "Standard Galactic Language (C)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_d", - "displayName": "Standard Galactic Language (D)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_e", - "displayName": "Standard Galactic Language (E)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_f", - "displayName": "Standard Galactic Language (F)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_g", - "displayName": "Standard Galactic Language (G)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_h", - "displayName": "Standard Galactic Language (H)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_i", - "displayName": "Standard Galactic Language (I)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_j", - "displayName": "Standard Galactic Language (J)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_k", - "displayName": "Standard Galactic Language (K)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_l", - "displayName": "Standard Galactic Language (L)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_m", - "displayName": "Standard Galactic Language (M)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_n", - "displayName": "Standard Galactic Language (N)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_o", - "displayName": "Standard Galactic Language (O)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_p", - "displayName": "Standard Galactic Language (P)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_q", - "displayName": "Standard Galactic Language (Q)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_r", - "displayName": "Standard Galactic Language (R)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_s", - "displayName": "Standard Galactic Language (S)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_t", - "displayName": "Standard Galactic Language (T)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_u", - "displayName": "Standard Galactic Language (U)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_v", - "displayName": "Standard Galactic Language (V)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_w", - "displayName": "Standard Galactic Language (W)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_x", - "displayName": "Standard Galactic Language (X)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_y", - "displayName": "Standard Galactic Language (Y)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_z", - "displayName": "Standard Galactic Language (Z)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - ] -} From b942cb9f5b2d21e12003398d7cc4db00970a6e77 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 19:19:17 -0400 Subject: [PATCH 22/29] Fixed bizarre drawing issue with MapIcons atlas --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 4f8c2e7b..d92e21cd 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -188,7 +188,7 @@ namespace PckStudio.Forms.Editor { g.ApplyConfig(graphicsConfig); g.Clear(Color.Transparent); - g.DrawImage(_workingTexture, new Point(0, 0)); + g.DrawImage(_workingTexture, 0, 0, _workingTexture.Width, _workingTexture.Height); SolidBrush brush = new SolidBrush(Color.FromArgb(127, 255, 255, 255)); From 81322a0ca38dbb142393dbe9e4d7eb1a6e4fd69a Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 19:25:55 -0400 Subject: [PATCH 23/29] Renamed atlas resources --- PCK-Studio/Internal/ApplicationScope.cs | 2 +- PCK-Studio/Internal/Json/Tiles.cs | 16 ++++----- PCK-Studio/PckStudio.csproj | 1 - PCK-Studio/Properties/Resources.Designer.cs | 36 ++++++++++----------- PCK-Studio/Properties/Resources.resx | 18 +++++------ 5 files changed, 36 insertions(+), 37 deletions(-) diff --git a/PCK-Studio/Internal/ApplicationScope.cs b/PCK-Studio/Internal/ApplicationScope.cs index 61efd6d4..998178df 100644 --- a/PCK-Studio/Internal/ApplicationScope.cs +++ b/PCK-Studio/Internal/ApplicationScope.cs @@ -21,7 +21,7 @@ namespace PckStudio.Internal { Profiler.Start(); { - _entityImages ??= Resources.entities_sheet.SplitHorizontal(32).ToArray(); + _entityImages ??= Resources.entities_atlas.SplitHorizontal(32).ToArray(); DataCacher ??= new FileCacher(Program.AppDataCache); _ = Tiles.JsonBlockData; _ = Tiles.JsonItemData; diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index a973638b..2c026335 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -63,28 +63,28 @@ namespace PckStudio.Internal.Json internal static List ExplosionTileInfos => JsonExplosionData.Explosion; private static Image[] _itemImages; - public static Image[] ItemImages => _itemImages ??= Resources.items_sheet.SplitHorizontal(16).ToArray(); + public static Image[] ItemImages => _itemImages ??= Resources.items_atlas.SplitHorizontal(16).ToArray(); private static Image[] _blockImages; - public static Image[] BlockImages => _blockImages ??= Resources.terrain_sheet.SplitHorizontal(16).ToArray(); + public static Image[] BlockImages => _blockImages ??= Resources.terrain_atlas.SplitHorizontal(16).ToArray(); private static Image[] _particleImages; - public static Image[] ParticleImages => _particleImages ??= Resources.particles_sheet.SplitHorizontal(16).ToArray(); + public static Image[] ParticleImages => _particleImages ??= Resources.particles_atlas.SplitHorizontal(16).ToArray(); private static Image[] _moonPhaseImages; - public static Image[] MoonPhaseImages => _moonPhaseImages ??= Resources.moon_phases_sheet.SplitHorizontal(4).ToArray(); + public static Image[] MoonPhaseImages => _moonPhaseImages ??= Resources.moon_phases_atlas.SplitHorizontal(4).ToArray(); private static Image[] _mapIconImages; - public static Image[] MapIconImages => _mapIconImages ??= Resources.map_icons_sheet.SplitHorizontal(4).ToArray(); + public static Image[] MapIconImages => _mapIconImages ??= Resources.map_icons_atlas.SplitHorizontal(4).ToArray(); private static Image[] _additionalMapIconImages; - public static Image[] AdditionalMapIconImages => _additionalMapIconImages ??= Resources.additional_map_icons_sheet.SplitHorizontal(4).ToArray(); + public static Image[] AdditionalMapIconImages => _additionalMapIconImages ??= Resources.additional_map_icons_atlas.SplitHorizontal(4).ToArray(); private static Image[] _experienceOrbIconImages; - public static Image[] ExperienceOrbImages => _experienceOrbIconImages ??= Resources.experience_orbs_sheet.SplitHorizontal(4).ToArray(); + public static Image[] ExperienceOrbImages => _experienceOrbIconImages ??= Resources.experience_orbs_atlas.SplitHorizontal(4).ToArray(); private static Image[] _explosionImages; - public static Image[] ExplosionImages => _explosionImages ??= Resources.explosion_sheet.SplitHorizontal(4).ToArray(); + public static Image[] ExplosionImages => _explosionImages ??= Resources.explosion_atlas.SplitHorizontal(4).ToArray(); private static ImageList GetImageList(Image[] images) { diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index de86f119..ce2935ae 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -636,7 +636,6 @@ - diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index 97f21855..abd4c5f3 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -73,9 +73,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap additional_map_icons_sheet { + public static System.Drawing.Bitmap additional_map_icons_atlas { get { - object obj = ResourceManager.GetObject("additional_map_icons_sheet", resourceCulture); + object obj = ResourceManager.GetObject("additional_map_icons_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -277,9 +277,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap entities_sheet { + public static System.Drawing.Bitmap entities_atlas { get { - object obj = ResourceManager.GetObject("entities_sheet", resourceCulture); + object obj = ResourceManager.GetObject("entities_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -329,9 +329,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap experience_orbs_sheet { + public static System.Drawing.Bitmap experience_orbs_atlas { get { - object obj = ResourceManager.GetObject("experience_orbs_sheet", resourceCulture); + object obj = ResourceManager.GetObject("experience_orbs_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -369,9 +369,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap explosion_sheet { + public static System.Drawing.Bitmap explosion_atlas { get { - object obj = ResourceManager.GetObject("explosion_sheet", resourceCulture); + object obj = ResourceManager.GetObject("explosion_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -538,9 +538,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap items_sheet { + public static System.Drawing.Bitmap items_atlas { get { - object obj = ResourceManager.GetObject("items_sheet", resourceCulture); + object obj = ResourceManager.GetObject("items_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -558,9 +558,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap map_icons_sheet { + public static System.Drawing.Bitmap map_icons_atlas { get { - object obj = ResourceManager.GetObject("map_icons_sheet", resourceCulture); + object obj = ResourceManager.GetObject("map_icons_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -615,9 +615,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap moon_phases_sheet { + public static System.Drawing.Bitmap moon_phases_atlas { get { - object obj = ResourceManager.GetObject("moon_phases_sheet", resourceCulture); + object obj = ResourceManager.GetObject("moon_phases_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -730,9 +730,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap particles_sheet { + public static System.Drawing.Bitmap particles_atlas { get { - object obj = ResourceManager.GetObject("particles_sheet", resourceCulture); + object obj = ResourceManager.GetObject("particles_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -870,9 +870,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap terrain_sheet { + public static System.Drawing.Bitmap terrain_atlas { get { - object obj = ResourceManager.GetObject("terrain_sheet", resourceCulture); + object obj = ResourceManager.GetObject("terrain_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index cda749a2..2fcf9388 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -223,7 +223,7 @@ ..\Resources\iconImageList\INFO ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + ..\Resources\atlases\terrain.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -232,7 +232,7 @@ ..\Resources\icons\clock.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + ..\Resources\atlases\items.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -277,7 +277,7 @@ ..\Resources\iconImageList\blank.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + ..\Resources\atlases\entities.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -325,16 +325,16 @@ ..\..\ProjectLogo.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + ..\Resources\atlases\moon_phases.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + ..\Resources\atlases\additional_mapicons.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + ..\Resources\atlases\map_icons.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + ..\Resources\atlases\experience_orbs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -346,7 +346,7 @@ ..\Resources\atlases\explosionData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - + ..\Resources\atlases\explosion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -361,7 +361,7 @@ ..\Resources\atlases\particleData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - + ..\Resources\atlases\particles.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file From a26f2824768b833c8708d4f5ae5861e9cd1e45ee Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 20:34:35 -0400 Subject: [PATCH 24/29] Added Painting support to Atlas Editor --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 3 +- PCK-Studio/Internal/ApplicationScope.cs | 9 +- PCK-Studio/Internal/Json/Tiles.cs | 23 +- PCK-Studio/MainForm.cs | 9 +- PCK-Studio/PckStudio.csproj | 2 + PCK-Studio/Properties/Resources.Designer.cs | 64 +- PCK-Studio/Properties/Resources.resx | 8 +- .../Resources/atlases/explosionData.json | 2 +- .../Resources/atlases/paintingData.json | 1062 +++++++++++++++++ PCK-Studio/Resources/atlases/paintings.png | Bin 0 -> 92439 bytes 10 files changed, 1156 insertions(+), 26 deletions(-) create mode 100644 PCK-Studio/Resources/atlases/paintingData.json create mode 100644 PCK-Studio/Resources/atlases/paintings.png diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index d92e21cd..1f5caaea 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -113,7 +113,8 @@ namespace PckStudio.Forms.Editor "additionalmapicons" => (Tiles.AdditionalMapIconTileInfos, "additional_map_icons"), "moon_phases" => (Tiles.MoonPhaseTileInfos, "moon_phases"), "xporb" => (Tiles.ExperienceOrbTileInfos, "experience_orbs"), - "explosion" => (Tiles.ExplosionTileInfos, "explosion"), + "explosion" => (Tiles.ExplosionTileInfos, "explosions"), + "kz" => (Tiles.PaintingTileInfos, "paintings"), _ => (null, null), }; diff --git a/PCK-Studio/Internal/ApplicationScope.cs b/PCK-Studio/Internal/ApplicationScope.cs index 998178df..e3812620 100644 --- a/PCK-Studio/Internal/ApplicationScope.cs +++ b/PCK-Studio/Internal/ApplicationScope.cs @@ -30,8 +30,15 @@ namespace PckStudio.Internal _ = Tiles.JsonExplosionData; _ = Tiles.JsonMapIconData; _ = Tiles.JsonExperienceOrbData; - _ = Tiles.ItemImageList; + _ = Tiles.JsonPaintingData; _ = Tiles.BlockImageList; + _ = Tiles.ItemImageList; + _ = Tiles.ParticleImageList; + _ = Tiles.ExplosionImageList; + _ = Tiles.MapIconImageList; + _ = Tiles.ExperienceOrbImageList; + _ = Tiles.MoonPhaseImageList; + _ = Tiles.PaintingImageList; SettingsManager.Initialize(); CultureInfo.CurrentCulture = CultureInfo.InvariantCulture; } diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index 2c026335..377ae159 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -34,8 +34,11 @@ namespace PckStudio.Internal.Json [JsonProperty("experience_orbs")] public List ExperienceOrbs { get; set; } - [JsonProperty("explosion")] - public List Explosion { get; set; } + [JsonProperty("explosions")] + public List Explosions { get; set; } + + [JsonProperty("paintings")] + public List Paintings { get; set; } } internal static class Tiles @@ -44,7 +47,7 @@ namespace PckStudio.Internal.Json _jsonBlockData, _jsonItemData, _jsonParticleData, _jsonMoonPhaseData, _jsonMapIconData, _jsonExplosionData, - _jsonExperienceOrbData; + _jsonExperienceOrbData, _jsonPaintingData; internal static JsonTiles JsonBlockData => _jsonBlockData ??= JsonConvert.DeserializeObject(Resources.blockData); internal static JsonTiles JsonItemData => _jsonItemData ??= JsonConvert.DeserializeObject(Resources.itemData); internal static JsonTiles JsonParticleData => _jsonParticleData ??= JsonConvert.DeserializeObject(Resources.particleData); @@ -52,6 +55,7 @@ namespace PckStudio.Internal.Json internal static JsonTiles JsonMapIconData => _jsonMapIconData ??= JsonConvert.DeserializeObject(Resources.mapIconData); internal static JsonTiles JsonExplosionData => _jsonExplosionData ??= JsonConvert.DeserializeObject(Resources.explosionData); internal static JsonTiles JsonExperienceOrbData => _jsonExperienceOrbData ??= JsonConvert.DeserializeObject(Resources.experienceOrbData); + internal static JsonTiles JsonPaintingData => _jsonPaintingData ??= JsonConvert.DeserializeObject(Resources.paintingData); internal static List ItemTileInfos => JsonItemData.Items; internal static List BlockTileInfos => JsonBlockData.Blocks; @@ -60,7 +64,8 @@ namespace PckStudio.Internal.Json internal static List MapIconTileInfos => JsonMapIconData.MapIcons; internal static List AdditionalMapIconTileInfos => JsonMapIconData.AdditionalMapIcons; internal static List ExperienceOrbTileInfos => JsonExperienceOrbData.ExperienceOrbs; - internal static List ExplosionTileInfos => JsonExplosionData.Explosion; + internal static List ExplosionTileInfos => JsonExplosionData.Explosions; + internal static List PaintingTileInfos => JsonPaintingData.Paintings; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_atlas.SplitHorizontal(16).ToArray(); @@ -84,7 +89,10 @@ namespace PckStudio.Internal.Json public static Image[] ExperienceOrbImages => _experienceOrbIconImages ??= Resources.experience_orbs_atlas.SplitHorizontal(4).ToArray(); private static Image[] _explosionImages; - public static Image[] ExplosionImages => _explosionImages ??= Resources.explosion_atlas.SplitHorizontal(4).ToArray(); + public static Image[] ExplosionImages => _explosionImages ??= Resources.explosions_atlas.SplitHorizontal(4).ToArray(); + + private static Image[] _paintingImages; + public static Image[] PaintingImages => _paintingImages ??= Resources.paintings_atlas.SplitHorizontal(16).ToArray(); private static ImageList GetImageList(Image[] images) { @@ -114,9 +122,12 @@ namespace PckStudio.Internal.Json public static ImageList AdditionalMapIconImageList { get { return _additionalMapIconImageList; } } private static ImageList _experienceOrbsImageList = GetImageList(ExperienceOrbImages); - public static ImageList ExperienceOrbsImageList { get { return _experienceOrbsImageList; } } + public static ImageList ExperienceOrbImageList { get { return _experienceOrbsImageList; } } private static ImageList _explosionImageList = GetImageList(ExplosionImages); public static ImageList ExplosionImageList { get { return _explosionImageList; } } + + private static ImageList _paintingImageList = GetImageList(PaintingImages); + public static ImageList PaintingImageList { get { return _paintingImageList; } } } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 2ed0a7f6..6253a6b1 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -382,11 +382,12 @@ namespace PckStudio bool isMapIcons = file.Filename == "res/misc/mapicons.png"; bool isAdditionalMapIcons = file.Filename == "res/misc/additionalmapicons.png"; bool isXPOrbs = file.Filename == "res/item/xporb.png"; - bool isExplosion = file.Filename == "res/misc/explosion.png"; + bool isExplosions = file.Filename == "res/misc/explosion.png"; + bool isPaintings = file.Filename == "res/art/kz.png"; if ( - isTerrain || isItems || isParticles || isMoonPhases || - isMapIcons || isAdditionalMapIcons || isXPOrbs || isExplosion + isTerrain || isItems || isParticles || isMoonPhases || isPaintings || + isMapIcons || isAdditionalMapIcons || isXPOrbs || isExplosions ) { var img = file.GetTexture(); @@ -394,7 +395,7 @@ namespace PckStudio // all of the other atlases so far use 4 var columnCount = 4; - if (isTerrain || isItems || isParticles) columnCount = 16; + if (isTerrain || isItems || isParticles || isPaintings) columnCount = 16; var resolution = img.Width / columnCount; var size = new Size(resolution, resolution); diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index ce2935ae..9c952d7e 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -635,6 +635,7 @@ + @@ -691,6 +692,7 @@ + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index abd4c5f3..30cb940d 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -366,20 +366,10 @@ namespace PckStudio.Properties { } } - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - public static System.Drawing.Bitmap explosion_atlas { - get { - object obj = ResourceManager.GetObject("explosion_atlas", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - /// /// Looks up a localized string similar to { /// "COMMENT_1": "JSON by MattNL", - /// "explosion": [ + /// "explosions": [ /// { /// "internalName": "explosion_0", /// "displayName": "Explosion (Stage 1)", @@ -399,7 +389,7 @@ namespace PckStudio.Properties { /// "colourEntry": { /// "defaultName": "Particle_Explode", /// "variants": [ - /// [rest of string was truncated]";. + /// [rest of string was truncated]";. /// public static string explosionData { get { @@ -407,6 +397,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap explosions_atlas { + get { + object obj = ResourceManager.GetObject("explosions_atlas", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -696,6 +696,46 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "JSON by MattNL", + /// "paintings": [ + /// { + /// "internalName": "Kebab", + /// "displayName": "\"Kebab med tre pepperoni\" by Kristoffer Zetterstrand" + /// }, + /// { + /// "internalName": "Aztec", + /// "displayName": "\"de_aztec\" by Kristoffer Zetterstrand" + /// }, + /// { + /// "internalName": "Alban", + /// "displayName": "\"Albanian\" by Kristoffer Zetterstrand" + /// }, + /// { + /// "internalName": "Aztec2", + /// "displayName": "\"de_aztec\" by Kristoffer Zetterstrand" + /// }, + /// { + /// "internalName": "Bomb", + /// "di [rest of string was truncated]";. + /// + public static string paintingData { + get { + return ResourceManager.GetString("paintingData", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap paintings_atlas { + get { + object obj = ResourceManager.GetObject("paintings_atlas", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized string similar to { /// "COMMENT_1": "JSON by MattNL", diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index 2fcf9388..19110ffd 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -346,7 +346,7 @@ ..\Resources\atlases\explosionData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - + ..\Resources\atlases\explosion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -364,4 +364,10 @@ ..\Resources\atlases\particles.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\paintingData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + + ..\Resources\atlases\paintings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/explosionData.json b/PCK-Studio/Resources/atlases/explosionData.json index 77ae7b56..a48a1930 100644 --- a/PCK-Studio/Resources/atlases/explosionData.json +++ b/PCK-Studio/Resources/atlases/explosionData.json @@ -1,6 +1,6 @@ { "COMMENT_1": "JSON by MattNL", - "explosion": [ + "explosions": [ { "internalName": "explosion_0", "displayName": "Explosion (Stage 1)", diff --git a/PCK-Studio/Resources/atlases/paintingData.json b/PCK-Studio/Resources/atlases/paintingData.json new file mode 100644 index 00000000..276a3dde --- /dev/null +++ b/PCK-Studio/Resources/atlases/paintingData.json @@ -0,0 +1,1062 @@ +{ + "COMMENT_1": "JSON by MattNL", + "paintings": [ + { + "internalName": "Kebab", + "displayName": "\"Kebab med tre pepperoni\" by Kristoffer Zetterstrand" + }, + { + "internalName": "Aztec", + "displayName": "\"de_aztec\" by Kristoffer Zetterstrand" + }, + { + "internalName": "Alban", + "displayName": "\"Albanian\" by Kristoffer Zetterstrand" + }, + { + "internalName": "Aztec2", + "displayName": "\"de_aztec\" by Kristoffer Zetterstrand" + }, + { + "internalName": "Bomb", + "displayName": "\"Target Successfully Bombed\" by Kristoffer Zetterstrand" + }, + { + "internalName": "Plant", + "displayName": "\"Paradisträd\" by Kristoffer Zetterstrand" + }, + { + "internalName": "Wasteland", + "displayName": "\"Wasteland\" by Kristoffer Zetterstrand" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Back", + "displayName": "Back Texture", + "width": 4, + "height": 4 + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "1x1E1", + "displayName": "Extra Painting 1" + }, + { + "internalName": "1x1E2", + "displayName": "Extra Painting 2" + }, + { + "internalName": "1x1E3", + "displayName": "Extra Painting 3" + }, + { + "internalName": "1x1E4", + "displayName": "Extra Painting 4" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Back", + "displayName": "" + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Pool", + "displayName": "\"The Pool\" by Kristoffer Zetterstrand", + "width": 2 + }, + { + "internalName": "Pool", + "displayName": "" + }, + { + "internalName": "Courbet", + "displayName": "\"Bonjour Monsieur Courbet\" by Kristoffer Zetterstrand", + "width": 2 + }, + { + "internalName": "Courbet", + "displayName": "" + }, + { + "internalName": "Sea", + "displayName": "\"Seaside\" by Kristoffer Zetterstrand", + "width": 2 + }, + { + "internalName": "Sea", + "displayName": "" + }, + { + "internalName": "Sunset", + "displayName": "\"sunset_dense\" by Kristoffer Zetterstrand", + "width": 2 + }, + { + "internalName": "Sunset", + "displayName": "" + }, + { + "internalName": "Creebet", + "displayName": "\"Creebet\" by Kristoffer Zetterstrand", + "width": 2 + }, + { + "internalName": "Creebet", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Back", + "displayName": "" + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Back", + "displayName": "" + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Wanderer", + "displayName": "\"Wanderer\" by Kristoffer Zetterstrand", + "height": 2 + }, + { + "internalName": "Graham", + "displayName": "\"Graham\" by Kristoffer Zetterstrand", + "height": 2 + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Skeleton", + "displayName": "\"Mortal Coil\" by Kristoffer Zetterstrand", + "width": 4, + "height": 3 + }, + { + "internalName": "Skeleton", + "displayName": "", + }, + { + "internalName": "Skeleton", + "displayName": "", + }, + { + "internalName": "Skeleton", + "displayName": "", + }, + { + "internalName": "Wanderer", + "displayName": "" + }, + { + "internalName": "Graham", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Skeleton", + "displayName": "", + }, + { + "internalName": "Skeleton", + "displayName": "", + }, + { + "internalName": "Skeleton", + "displayName": "", + }, + { + "internalName": "Skeleton", + "displayName": "", + }, + { + "internalName": "Fighters", + "displayName": "\"Fighters\" by Kristoffer Zetterstrand", + "width": 4, + "height": 2 + }, + { + "internalName": "Fighters", + "displayName": "" + }, + { + "internalName": "Fighters", + "displayName": "" + }, + { + "internalName": "Fighters", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Skeleton", + "displayName": "" + }, + { + "internalName": "Skeleton", + "displayName": "" + }, + { + "internalName": "Skeleton", + "displayName": "" + }, + { + "internalName": "Skeleton", + "displayName": "" + }, + { + "internalName": "Fighters", + "displayName": "" + }, + { + "internalName": "Fighters", + "displayName": "" + }, + { + "internalName": "Fighters", + "displayName": "" + }, + { + "internalName": "Fighters", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "\"Kong\" by Kristoffer Zetterstrand", + "width": 4, + "height": 3 + }, + { + "internalName": "DonkeyKong", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "" + }, + { + "internalName": "Match", + "displayName": "\"Match\" by Kristoffer Zetterstrand", + "width": 2, + "height": 2 + }, + { + "internalName": "Match", + "displayName": "" + }, + { + "internalName": "Bust", + "displayName": "\"Bust\" by Kristoffer Zetterstrand", + "width": 2, + "height": 2 + }, + { + "internalName": "Bust", + "displayName": "" + }, + { + "internalName": "Stage", + "displayName": "\"The stage is set\" by Kristoffer Zetterstrand", + "width": 2, + "height": 2 + }, + { + "internalName": "Stage", + "displayName": "" + }, + { + "internalName": "Void", + "displayName": "\"The Void\" by Kristoffer Zetterstrand", + "width": 2, + "height": 2 + }, + { + "internalName": "Void", + "displayName": "" + }, + { + "internalName": "SkullAndRoses", + "displayName": "\"Skull and Roses\" by Kristoffer Zetterstrand", + "width": 2, + "height": 2 + }, + { + "internalName": "SkullAndRoses", + "displayName": "" + }, + { + "internalName": "Wither", + "displayName": "\"Wither\" by Jens Bergensten", + "width": 2, + "height": 2 + }, + { + "internalName": "Wither", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "" + }, + { + "internalName": "Match", + "displayName": "" + }, + { + "internalName": "Match", + "displayName": "" + }, + { + "internalName": "Bust", + "displayName": "" + }, + { + "internalName": "Bust", + "displayName": "" + }, + { + "internalName": "Stage", + "displayName": "" + }, + { + "internalName": "Stage", + "displayName": "" + }, + { + "internalName": "Void", + "displayName": "" + }, + { + "internalName": "Void", + "displayName": "" + }, + { + "internalName": "SkullAndRoses", + "displayName": "" + }, + { + "internalName": "SkullAndRoses", + "displayName": "" + }, + { + "internalName": "Wither", + "displayName": "" + }, + { + "internalName": "Wither", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "", + }, + { + "internalName": "DonkeyKong", + "displayName": "", + }, + { + "internalName": "DonkeyKong", + "displayName": "", + }, + { + "internalName": "DonkeyKong", + "displayName": "", + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "\"Pointer\" by Kristoffer Zetterstrand", + "width": 4, + "height": 4 + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "\"Pigscene\" by Kristoffer Zetterstrand", + "width": 4, + "height": 4 + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "\"Skull On Fire\" by Kristoffer Zetterstrand", + "width": 4, + "height": 4 + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "Pointer", + "displayName": "", + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "", + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "", + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "Pointer", + "displayName": "", + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "", + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "", + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + } + ] +} diff --git a/PCK-Studio/Resources/atlases/paintings.png b/PCK-Studio/Resources/atlases/paintings.png new file mode 100644 index 0000000000000000000000000000000000000000..b8bc84fec490e432028cf67dfefb271bd22c980b GIT binary patch literal 92439 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 z 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 Date: Fri, 15 Mar 2024 20:43:16 -0400 Subject: [PATCH 25/29] Fixed SetTile bug with "child" tiles --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 1f5caaea..68f24c98 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -390,7 +390,10 @@ namespace PckStudio.Forms.Editor g.DrawImage(texture, dataTile.Area); } - _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, texture); + if(_selectedTile != dataTile) + _tiles[dataTile.Index] = new AtlasTile(dataTile.Index, dataTile.Area, dataTile.Tile, texture); + else + _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, texture); selectTilePictureBox.Image = texture; UpdateAtlasDisplay(); From ae74ed7d1497201ae60c0c93ec3eaf991a08cf6f Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 22:16:02 -0400 Subject: [PATCH 26/29] Made all atlas types uniform --- PCK-Studio/Internal/Json/Tiles.cs | 48 ++++++------------- PCK-Studio/Resources/atlases/blockData.json | 2 +- .../Resources/atlases/experienceOrbData.json | 2 +- .../Resources/atlases/explosionData.json | 2 +- PCK-Studio/Resources/atlases/itemData.json | 2 +- PCK-Studio/Resources/atlases/mapIconData.json | 4 +- .../Resources/atlases/moonPhaseData.json | 2 +- .../Resources/atlases/paintingData.json | 2 +- .../Resources/atlases/particleData.json | 2 +- 9 files changed, 23 insertions(+), 43 deletions(-) diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index 377ae159..e49815b4 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -13,32 +13,11 @@ namespace PckStudio.Internal.Json { internal class JsonTiles { - [JsonProperty("blocks")] - public List Blocks { get; set; } - - [JsonProperty("items")] - public List Items { get; set; } + [JsonProperty("entries")] + public List Entries { get; set; } - [JsonProperty("particles")] - public List Particles { get; set; } - - [JsonProperty("moon_phases")] - public List MoonPhases { get; set; } - - [JsonProperty("map_icons")] - public List MapIcons { get; set; } - - [JsonProperty("additional_map_icons")] - public List AdditionalMapIcons { get; set; } - - [JsonProperty("experience_orbs")] - public List ExperienceOrbs { get; set; } - - [JsonProperty("explosions")] - public List Explosions { get; set; } - - [JsonProperty("paintings")] - public List Paintings { get; set; } + [JsonProperty("additional_entries")] + public List AdditionalEntries { get; set; } } internal static class Tiles @@ -57,15 +36,16 @@ namespace PckStudio.Internal.Json internal static JsonTiles JsonExperienceOrbData => _jsonExperienceOrbData ??= JsonConvert.DeserializeObject(Resources.experienceOrbData); internal static JsonTiles JsonPaintingData => _jsonPaintingData ??= JsonConvert.DeserializeObject(Resources.paintingData); - internal static List ItemTileInfos => JsonItemData.Items; - internal static List BlockTileInfos => JsonBlockData.Blocks; - internal static List ParticleTileInfos => JsonParticleData.Particles; - internal static List MoonPhaseTileInfos => JsonMoonPhaseData.MoonPhases; - internal static List MapIconTileInfos => JsonMapIconData.MapIcons; - internal static List AdditionalMapIconTileInfos => JsonMapIconData.AdditionalMapIcons; - internal static List ExperienceOrbTileInfos => JsonExperienceOrbData.ExperienceOrbs; - internal static List ExplosionTileInfos => JsonExplosionData.Explosions; - internal static List PaintingTileInfos => JsonPaintingData.Paintings; + internal static List ItemTileInfos => JsonItemData.Entries; + internal static List BlockTileInfos => JsonBlockData.Entries; + internal static List ParticleTileInfos => JsonParticleData.Entries; + internal static List MoonPhaseTileInfos => JsonMoonPhaseData.Entries; + internal static List MapIconTileInfos => JsonMapIconData.Entries; + internal static List AdditionalMapIconTileInfos => JsonMapIconData.AdditionalEntries; + internal static List ExperienceOrbTileInfos => JsonExperienceOrbData.Entries; + internal static List ExplosionTileInfos => JsonExplosionData.Entries; + internal static List PaintingTileInfos => JsonPaintingData.Entries; + internal static List BannerTileInfos => JsonPaintingData.Entries; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_atlas.SplitHorizontal(16).ToArray(); diff --git a/PCK-Studio/Resources/atlases/blockData.json b/PCK-Studio/Resources/atlases/blockData.json index 33bc0f3a..c2cb1b8f 100644 --- a/PCK-Studio/Resources/atlases/blockData.json +++ b/PCK-Studio/Resources/atlases/blockData.json @@ -1,7 +1,7 @@ { "COMMENT_1": "Tile data research by MattNL", "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", - "blocks": [ + "entries": [ { "internalName": "grass_top", "displayName": "Grass Block (Top)", diff --git a/PCK-Studio/Resources/atlases/experienceOrbData.json b/PCK-Studio/Resources/atlases/experienceOrbData.json index 90a6d2fe..f83a7ab3 100644 --- a/PCK-Studio/Resources/atlases/experienceOrbData.json +++ b/PCK-Studio/Resources/atlases/experienceOrbData.json @@ -1,6 +1,6 @@ { "COMMENT_1": "JSON by MattNL", - "experience_orbs": [ + "entries": [ { "internalName": "experience_orb_0", "displayName": "Experience Orb (Size 1)", diff --git a/PCK-Studio/Resources/atlases/explosionData.json b/PCK-Studio/Resources/atlases/explosionData.json index a48a1930..f9845f7e 100644 --- a/PCK-Studio/Resources/atlases/explosionData.json +++ b/PCK-Studio/Resources/atlases/explosionData.json @@ -1,6 +1,6 @@ { "COMMENT_1": "JSON by MattNL", - "explosions": [ + "entries": [ { "internalName": "explosion_0", "displayName": "Explosion (Stage 1)", diff --git a/PCK-Studio/Resources/atlases/itemData.json b/PCK-Studio/Resources/atlases/itemData.json index e69e114d..0c49ee02 100644 --- a/PCK-Studio/Resources/atlases/itemData.json +++ b/PCK-Studio/Resources/atlases/itemData.json @@ -1,7 +1,7 @@ { "COMMENT_1": "Tile data research by MattNL", "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", - "items": [ + "entries": [ { "internalName": "helmetCloth", "displayName": "Leather Cap", diff --git a/PCK-Studio/Resources/atlases/mapIconData.json b/PCK-Studio/Resources/atlases/mapIconData.json index 6e505fd8..8e1273f2 100644 --- a/PCK-Studio/Resources/atlases/mapIconData.json +++ b/PCK-Studio/Resources/atlases/mapIconData.json @@ -1,6 +1,6 @@ { "COMMENT_1": "JSON by MattNL", - "map_icons": [ + "entries": [ { "internalName": "player_1", "displayName": "Player 1" @@ -66,7 +66,7 @@ "displayName": "Ocean Monument (Explorer Map)" } ], - "additional_map_icons": [ + "additional_entries": [ { "internalName": "player_1_off_map", "displayName": "Player 1 (Off Map)" diff --git a/PCK-Studio/Resources/atlases/moonPhaseData.json b/PCK-Studio/Resources/atlases/moonPhaseData.json index a65a1b53..506e7f6f 100644 --- a/PCK-Studio/Resources/atlases/moonPhaseData.json +++ b/PCK-Studio/Resources/atlases/moonPhaseData.json @@ -1,6 +1,6 @@ { "COMMENT_1": "JSON by MattNL", - "moon_phases": [ + "entries": [ { "internalName": "moon_phase_0", "displayName": "Full Moon" diff --git a/PCK-Studio/Resources/atlases/paintingData.json b/PCK-Studio/Resources/atlases/paintingData.json index 276a3dde..5b5b0ef9 100644 --- a/PCK-Studio/Resources/atlases/paintingData.json +++ b/PCK-Studio/Resources/atlases/paintingData.json @@ -1,6 +1,6 @@ { "COMMENT_1": "JSON by MattNL", - "paintings": [ + "entries": [ { "internalName": "Kebab", "displayName": "\"Kebab med tre pepperoni\" by Kristoffer Zetterstrand" diff --git a/PCK-Studio/Resources/atlases/particleData.json b/PCK-Studio/Resources/atlases/particleData.json index 2c9015df..9e6fa646 100644 --- a/PCK-Studio/Resources/atlases/particleData.json +++ b/PCK-Studio/Resources/atlases/particleData.json @@ -1,6 +1,6 @@ { "COMMENT_1": "JSON by MattNL", - "particles": [ + "entries": [ { "internalName": "generic_0", "displayName": "Generic (Stage 1)", From 07b962e0073cd823f94afe451deecaf782b34ace Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 23:42:18 -0400 Subject: [PATCH 27/29] Corrected particle data --- .../Resources/atlases/particleData.json | 54 +++++++++--------- PCK-Studio/Resources/atlases/particles.png | Bin 21971 -> 23424 bytes 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/PCK-Studio/Resources/atlases/particleData.json b/PCK-Studio/Resources/atlases/particleData.json index 9e6fa646..e89bcf85 100644 --- a/PCK-Studio/Resources/atlases/particleData.json +++ b/PCK-Studio/Resources/atlases/particleData.json @@ -1672,111 +1672,111 @@ }, { "internalName": "camera_shoot_explosion_0", - "displayName": "Camera Shoot (Unused) (Stage 1)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 1)" }, { "internalName": "camera_shoot_explosion_1", - "displayName": "Camera Shoot (Unused) (Stage 2)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 2)" }, { "internalName": "camera_shoot_explosion_2", - "displayName": "Camera Shoot (Unused) (Stage 3)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 3)" }, { "internalName": "camera_shoot_explosion_3", - "displayName": "Camera Shoot (Unused) (Stage 4)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 4)" }, { "internalName": "camera_shoot_explosion_4", - "displayName": "Camera Shoot (Unused) (Stage 5)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 5)" }, { "internalName": "camera_shoot_explosion_5", - "displayName": "Camera Shoot (Unused) (Stage 6)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 6)" }, { "internalName": "camera_shoot_explosion_6", - "displayName": "Camera Shoot (Unused) (Stage 7)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 7)" }, { "internalName": "camera_shoot_explosion_7", - "displayName": "Camera Shoot (Unused) (Stage 8)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 8)" }, { "internalName": "camera_shoot_explosion_8", - "displayName": "Camera Shoot (Unused) (Stage 9)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 9)" }, { "internalName": "camera_shoot_explosion_9", - "displayName": "Camera Shoot (Unused) (Stage 10)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 10)" }, { "internalName": "camera_shoot_explosion_10", - "displayName": "Camera Shoot (Unused) (Stage 11)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 11)" }, { "internalName": "camera_shoot_explosion_11", - "displayName": "Camera Shoot (Unused) (Stage 12)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 12)" }, { "internalName": "camera_shoot_explosion_12", - "displayName": "Camera Shoot (Unused) (Stage 13)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 13)" }, { "internalName": "camera_shoot_explosion_13", - "displayName": "Camera Shoot (Unused) (Stage 14)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 14)" }, { "internalName": "camera_shoot_explosion_14", - "displayName": "Camera Shoot (Unused) (Stage 15)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 15)" }, { "internalName": "camera_shoot_explosion_15", - "displayName": "Camera Shoot (Unused) (Stage 16)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 16)" }, { "internalName": "conduit_0", - "displayName": "Conduit (Unused) (Stage 1)" + "displayName": "Conduit (Stage 1)" }, { "internalName": "conduit_1", - "displayName": "Conduit (Unused) (Stage 2)" + "displayName": "Conduit (Stage 2)" }, { "internalName": "conduit_2", - "displayName": "Conduit (Unused) (Stage 3)" + "displayName": "Conduit (Stage 3)" }, { "internalName": "conduit_3", - "displayName": "Conduit (Unused) (Stage 4)" + "displayName": "Conduit (Stage 4)" }, { "internalName": "conduit_4", - "displayName": "Conduit (Unused) (Stage 5)" + "displayName": "Conduit (Stage 5)" }, { "internalName": "conduit_5", - "displayName": "Conduit (Unused) (Stage 6)" + "displayName": "Conduit (Stage 6)" }, { "internalName": "conduit_6", - "displayName": "Conduit (Unused) (Stage 7)" + "displayName": "Conduit (Stage 7)" }, { "internalName": "conduit_7", - "displayName": "Conduit (Unused) (Stage 8)" + "displayName": "Conduit (Stage 8)" }, { "internalName": "conduit_8", - "displayName": "Conduit (Unused) (Stage 9)" + "displayName": "Conduit (Stage 9)" }, { "internalName": "conduit_9", - "displayName": "Conduit (Unused) (Stage 10)" + "displayName": "Conduit (Stage 10)" }, { "internalName": "conduit_10", - "displayName": "Conduit (Unused) (Stage 11)" + "displayName": "Conduit (Stage 11)" }, { "internalName": "", diff --git a/PCK-Studio/Resources/atlases/particles.png b/PCK-Studio/Resources/atlases/particles.png index 63041dcbf8da33dcea86f40ab8d9f74ca1b97387..b4f1e1f6b30a4630bec6d59789e671c3aae03604 100644 GIT binary patch literal 23424 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 From 95a70cf8cd57663abcfda5d08f956eb6f4e150f3 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Sat, 16 Mar 2024 00:03:26 -0400 Subject: [PATCH 28/29] Fix for nonuniform tile images being incorrectly set --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 68f24c98..ef19a899 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -390,11 +390,13 @@ namespace PckStudio.Forms.Editor g.DrawImage(texture, dataTile.Area); } + var _finalTexture = _workingTexture.GetArea(new Rectangle(dataTile.Area.X, dataTile.Area.Y, dataTile.Area.Width, dataTile.Area.Height)); + if(_selectedTile != dataTile) - _tiles[dataTile.Index] = new AtlasTile(dataTile.Index, dataTile.Area, dataTile.Tile, texture); + _tiles[dataTile.Index] = new AtlasTile(dataTile.Index, dataTile.Area, dataTile.Tile, _finalTexture); else - _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, texture); - selectTilePictureBox.Image = texture; + _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, _finalTexture); + selectTilePictureBox.Image = _finalTexture; UpdateAtlasDisplay(); } From c34868abee4594b65088b4bcc3a949473a3487bc Mon Sep 17 00:00:00 2001 From: MattN-L Date: Sat, 16 Mar 2024 00:05:20 -0400 Subject: [PATCH 29/29] Added Banner support for Atlas Editor --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 1 + PCK-Studio/Internal/Json/Tiles.cs | 11 +- PCK-Studio/MainForm.cs | 54 +- PCK-Studio/PckStudio.csproj | 2 + PCK-Studio/Properties/Resources.Designer.cs | 47 + PCK-Studio/Properties/Resources.resx | 6 + PCK-Studio/Resources/atlases/bannerData.json | 1031 +++++++++++++++++ PCK-Studio/Resources/atlases/banners.png | Bin 0 -> 12404 bytes 8 files changed, 1142 insertions(+), 10 deletions(-) create mode 100644 PCK-Studio/Resources/atlases/bannerData.json create mode 100644 PCK-Studio/Resources/atlases/banners.png diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index ef19a899..2f93d182 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -115,6 +115,7 @@ namespace PckStudio.Forms.Editor "xporb" => (Tiles.ExperienceOrbTileInfos, "experience_orbs"), "explosion" => (Tiles.ExplosionTileInfos, "explosions"), "kz" => (Tiles.PaintingTileInfos, "paintings"), + "Banner_Atlas" => (Tiles.BannerTileInfos, "banners"), _ => (null, null), }; diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index e49815b4..921407a2 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -26,7 +26,7 @@ namespace PckStudio.Internal.Json _jsonBlockData, _jsonItemData, _jsonParticleData, _jsonMoonPhaseData, _jsonMapIconData, _jsonExplosionData, - _jsonExperienceOrbData, _jsonPaintingData; + _jsonExperienceOrbData, _jsonPaintingData, _jsonBannerData; internal static JsonTiles JsonBlockData => _jsonBlockData ??= JsonConvert.DeserializeObject(Resources.blockData); internal static JsonTiles JsonItemData => _jsonItemData ??= JsonConvert.DeserializeObject(Resources.itemData); internal static JsonTiles JsonParticleData => _jsonParticleData ??= JsonConvert.DeserializeObject(Resources.particleData); @@ -35,6 +35,7 @@ namespace PckStudio.Internal.Json internal static JsonTiles JsonExplosionData => _jsonExplosionData ??= JsonConvert.DeserializeObject(Resources.explosionData); internal static JsonTiles JsonExperienceOrbData => _jsonExperienceOrbData ??= JsonConvert.DeserializeObject(Resources.experienceOrbData); internal static JsonTiles JsonPaintingData => _jsonPaintingData ??= JsonConvert.DeserializeObject(Resources.paintingData); + internal static JsonTiles JsonBannerData => _jsonBannerData ??= JsonConvert.DeserializeObject(Resources.bannerData); internal static List ItemTileInfos => JsonItemData.Entries; internal static List BlockTileInfos => JsonBlockData.Entries; @@ -45,7 +46,7 @@ namespace PckStudio.Internal.Json internal static List ExperienceOrbTileInfos => JsonExperienceOrbData.Entries; internal static List ExplosionTileInfos => JsonExplosionData.Entries; internal static List PaintingTileInfos => JsonPaintingData.Entries; - internal static List BannerTileInfos => JsonPaintingData.Entries; + internal static List BannerTileInfos => JsonBannerData.Entries; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_atlas.SplitHorizontal(16).ToArray(); @@ -74,6 +75,9 @@ namespace PckStudio.Internal.Json private static Image[] _paintingImages; public static Image[] PaintingImages => _paintingImages ??= Resources.paintings_atlas.SplitHorizontal(16).ToArray(); + private static Image[] _bannerImages; + public static Image[] BannerImages => _bannerImages ??= Resources.banners_atlas.SplitHorizontal(6).ToArray(); + private static ImageList GetImageList(Image[] images) { ImageList _imageList = new ImageList(); @@ -109,5 +113,8 @@ namespace PckStudio.Internal.Json private static ImageList _paintingImageList = GetImageList(PaintingImages); public static ImageList PaintingImageList { get { return _paintingImageList; } } + + private static ImageList _bannerImageList = GetImageList(BannerImages); + public static ImageList BannerImageList { get { return _bannerImageList; } } } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 6253a6b1..4652f6f7 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -384,25 +384,63 @@ namespace PckStudio bool isXPOrbs = file.Filename == "res/item/xporb.png"; bool isExplosions = file.Filename == "res/misc/explosion.png"; bool isPaintings = file.Filename == "res/art/kz.png"; + bool isBanners = file.Filename == "res/item/banner/Banner_Atlas.png"; if ( isTerrain || isItems || isParticles || isMoonPhases || isPaintings || - isMapIcons || isAdditionalMapIcons || isXPOrbs || isExplosions + isMapIcons || isAdditionalMapIcons || isXPOrbs || isExplosions || isBanners ) { var img = file.GetTexture(); + var tile_size = new Size(); + + var banner_scale = img.Width / Resources.banners_atlas.Width; + + if (isBanners) + { + // The banner atlas has extra space on it that has to be truncated for the editor + img = img.GetArea(new Rectangle(0, 0, img.Width - (4 * banner_scale), img.Height - (1 * banner_scale))); + + // banners are 42x41 because of course they are + tile_size = new Size(42 * banner_scale, 41 * banner_scale); + } + + // most atlases have 4 columns + var columnCount = isBanners ? 6 : 4; - // all of the other atlases so far use 4 - var columnCount = 4; - if (isTerrain || isItems || isParticles || isPaintings) columnCount = 16; - var resolution = img.Width / columnCount; - var size = new Size(resolution, resolution); - var viewer = new TextureAtlasEditor(currentPCK, file.Filename, img, size); + if (!isBanners) + { + var resolution = img.Width / columnCount; + tile_size = new Size(resolution, resolution); + } + + var viewer = new TextureAtlasEditor(currentPCK, file.Filename, img, tile_size); if (viewer.ShowDialog() == DialogResult.OK) { - file.SetData(viewer.FinalTexture, ImageFormat.Png); + var texture = viewer.FinalTexture; + if(isBanners) + { + var graphicsConfig = new GraphicsConfig() + { + InterpolationMode = InterpolationMode.NearestNeighbor, + PixelOffsetMode = PixelOffsetMode.HighQuality + }; + + var _img = new Bitmap((Resources.banners_atlas.Width + 4) * banner_scale, + (Resources.banners_atlas.Height + 1) * banner_scale); + + using (var g = Graphics.FromImage(_img)) + { + g.ApplyConfig(graphicsConfig); + g.DrawImage(texture, 0, 0, texture.Width, texture.Height); + } + + texture = _img; + } + + file.SetData(texture, ImageFormat.Png); wasModified = true; BuildMainTreeView(); } diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 9c952d7e..249ed5f4 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -628,6 +628,7 @@ + @@ -686,6 +687,7 @@ + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index 30cb940d..f5d3c9f8 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -100,6 +100,53 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "JSON by MattNL", + /// "banners": [ + /// { + /// "internalName": "base", + /// "displayName": "Base" + /// }, + /// { + /// "internalName": "border", + /// "displayName": "Bordure" + /// }, + /// { + /// "internalName": "bricks", + /// "displayName": "Field Masoned" + /// }, + /// { + /// "internalName": "circle", + /// "displayName": "Roundel" + /// }, + /// { + /// "internalName": "creeper", + /// "displayName": "Creeper Charge" + /// }, + /// { + /// "internalName": "cross", + /// "displayName": "Saltire" + /// }, + /// { + /// "internalName": "curly_bo [rest of string was truncated]";. + /// + public static string bannerData { + get { + return ResourceManager.GetString("bannerData", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap banners_atlas { + get { + object obj = ResourceManager.GetObject("banners_atlas", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index 19110ffd..52fb4d8c 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -364,6 +364,12 @@ ..\Resources\atlases\particles.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\bannerData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\atlases\banners.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\atlases\paintingData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 diff --git a/PCK-Studio/Resources/atlases/bannerData.json b/PCK-Studio/Resources/atlases/bannerData.json new file mode 100644 index 00000000..f5f347a8 --- /dev/null +++ b/PCK-Studio/Resources/atlases/bannerData.json @@ -0,0 +1,1031 @@ +{ + "COMMENT_1": "JSON by MattNL", + "entries": [ + { + "internalName": "base", + "displayName": "Base", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "border", + "displayName": "Bordure", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "bricks", + "displayName": "Field Masoned", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "circle", + "displayName": "Roundel", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "creeper", + "displayName": "Creeper Charge", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "cross", + "displayName": "Saltire", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "curly_border", + "displayName": "Bordure Indented", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "diagonal_left", + "displayName": "Per Bend Sinister", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "diagonal_right", + "displayName": "Per Bend", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "diagonal_up_left", + "displayName": "Per Bend Inverted", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "diagonal_up_right", + "displayName": "Per Bend Sinister Inverted", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "flower", + "displayName": "Flower Charge", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "gradient", + "displayName": "Gradient", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "gradient_up", + "displayName": "Base Gradient", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "half_horizontal", + "displayName": "Per Fess", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "half_horizontal_bottom", + "displayName": "Per Fess Inverted", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "half_vertical", + "displayName": "Per Pale", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "half_vertical_right", + "displayName": "Per Pale Inverted", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "mojang", + "displayName": "Thing", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "rhombus", + "displayName": "Lozenge", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "skull", + "displayName": "Skull Charge", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "small_stripes", + "displayName": "Paly", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "square_bottom_left", + "displayName": "Base Dexter Canton", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "square_bottom_right", + "displayName": "Base Sinister Canton", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "square_top_left", + "displayName": "Chief Dexter Canton", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "square_top_right", + "displayName": "Chief Sinister Canton", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "straight_cross", + "displayName": "Cross", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "stripe_bottom", + "displayName": "Base Fess", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "stripe_center", + "displayName": "Pale", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "strip_downleft", + "displayName": "Bend Sinister", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "stripe_downright", + "displayName": "Bend", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "stripe_left", + "displayName": "Pale Dexter", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "stripe_middle", + "displayName": "Fess", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "stripe_right", + "displayName": "Pale Sinister", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "stripe_top", + "displayName": "Chief Fess", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "triangle_bottom", + "displayName": "Chevron", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "triangle_top", + "displayName": "Inverted Chevron", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "triangles_bottom", + "displayName": "Base Indented", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "triangles_top", + "displayName": "Chief Indented", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "mask", + "displayName": "Mask" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + } + ] +} diff --git a/PCK-Studio/Resources/atlases/banners.png b/PCK-Studio/Resources/atlases/banners.png new file mode 100644 index 0000000000000000000000000000000000000000..38c8d9aa569e65ec6bcd1241916d28429e732c0c GIT binary patch literal 12404 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Ý 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

_ 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 F{{iV>8C3uP literal 0 HcmV?d00001