diff --git a/PCK-Studio/MainForm.Designer.cs b/PCK-Studio/MainForm.Designer.cs
index e7ae73a6..7334b025 100644
--- a/PCK-Studio/MainForm.Designer.cs
+++ b/PCK-Studio/MainForm.Designer.cs
@@ -117,6 +117,9 @@
this.settingsToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.contextMenuMetaTree = new System.Windows.Forms.ContextMenuStrip(this.components);
this.addEntryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.addEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+ this.addBOXEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+ this.addANIMEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.addMultipleEntriesToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.deleteEntryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.editAllEntriesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -143,9 +146,6 @@
this.treeViewMain = new System.Windows.Forms.TreeView();
this.imageList = new System.Windows.Forms.ImageList(this.components);
this.LittleEndianCheckBox = new MetroFramework.Controls.MetroCheckBox();
- this.addEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
- this.addBOXEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
- this.addANIMEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.pictureBoxImagePreview = new PckStudio.PictureBoxWithInterpolationMode();
this.contextMenuPCKEntries.SuspendLayout();
this.menuStrip.SuspendLayout();
@@ -559,8 +559,8 @@
//
// addCustomPackImageToolStripMenuItem
//
- resources.ApplyResources(this.addCustomPackImageToolStripMenuItem, "addCustomPackImageToolStripMenuItem");
this.addCustomPackImageToolStripMenuItem.Name = "addCustomPackImageToolStripMenuItem";
+ resources.ApplyResources(this.addCustomPackImageToolStripMenuItem, "addCustomPackImageToolStripMenuItem");
this.addCustomPackImageToolStripMenuItem.Click += new System.EventHandler(this.addCustomPackIconToolStripMenuItem_Click);
//
// openPckManagerToolStripMenuItem
@@ -780,6 +780,24 @@
resources.ApplyResources(this.addEntryToolStripMenuItem, "addEntryToolStripMenuItem");
this.addEntryToolStripMenuItem.Name = "addEntryToolStripMenuItem";
//
+ // addEntryToolStripMenuItem1
+ //
+ this.addEntryToolStripMenuItem1.Name = "addEntryToolStripMenuItem1";
+ resources.ApplyResources(this.addEntryToolStripMenuItem1, "addEntryToolStripMenuItem1");
+ this.addEntryToolStripMenuItem1.Click += new System.EventHandler(this.addEntryToolStripMenuItem_Click_1);
+ //
+ // addBOXEntryToolStripMenuItem1
+ //
+ this.addBOXEntryToolStripMenuItem1.Name = "addBOXEntryToolStripMenuItem1";
+ resources.ApplyResources(this.addBOXEntryToolStripMenuItem1, "addBOXEntryToolStripMenuItem1");
+ this.addBOXEntryToolStripMenuItem1.Click += new System.EventHandler(this.addBOXEntryToolStripMenuItem1_Click);
+ //
+ // addANIMEntryToolStripMenuItem1
+ //
+ this.addANIMEntryToolStripMenuItem1.Name = "addANIMEntryToolStripMenuItem1";
+ resources.ApplyResources(this.addANIMEntryToolStripMenuItem1, "addANIMEntryToolStripMenuItem1");
+ this.addANIMEntryToolStripMenuItem1.Click += new System.EventHandler(this.addANIMEntryToolStripMenuItem1_Click);
+ //
// addMultipleEntriesToolStripMenuItem1
//
resources.ApplyResources(this.addMultipleEntriesToolStripMenuItem1, "addMultipleEntriesToolStripMenuItem1");
@@ -1074,24 +1092,6 @@
this.LittleEndianCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark;
this.LittleEndianCheckBox.UseSelectable = true;
//
- // addEntryToolStripMenuItem1
- //
- this.addEntryToolStripMenuItem1.Name = "addEntryToolStripMenuItem1";
- resources.ApplyResources(this.addEntryToolStripMenuItem1, "addEntryToolStripMenuItem1");
- this.addEntryToolStripMenuItem1.Click += new System.EventHandler(this.addEntryToolStripMenuItem_Click_1);
- //
- // addBOXEntryToolStripMenuItem1
- //
- this.addBOXEntryToolStripMenuItem1.Name = "addBOXEntryToolStripMenuItem1";
- resources.ApplyResources(this.addBOXEntryToolStripMenuItem1, "addBOXEntryToolStripMenuItem1");
- this.addBOXEntryToolStripMenuItem1.Click += new System.EventHandler(this.addBOXEntryToolStripMenuItem1_Click);
- //
- // addANIMEntryToolStripMenuItem1
- //
- this.addANIMEntryToolStripMenuItem1.Name = "addANIMEntryToolStripMenuItem1";
- resources.ApplyResources(this.addANIMEntryToolStripMenuItem1, "addANIMEntryToolStripMenuItem1");
- this.addANIMEntryToolStripMenuItem1.Click += new System.EventHandler(this.addANIMEntryToolStripMenuItem1_Click);
- //
// pictureBoxImagePreview
//
resources.ApplyResources(this.pictureBoxImagePreview, "pictureBoxImagePreview");
diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs
index f2adfa59..f0dd7eb7 100644
--- a/PCK-Studio/MainForm.cs
+++ b/PCK-Studio/MainForm.cs
@@ -8,9 +8,11 @@ using System.Drawing.Drawing2D;
using System.Diagnostics;
using System.Drawing.Imaging;
+using OMI.Formats.Archive;
using OMI.Formats.Pck;
using OMI.Formats.GameRule;
using OMI.Formats.Languages;
+using OMI.Workers.Archive;
using OMI.Workers.Pck;
using OMI.Workers.GameRule;
using OMI.Workers.Language;
@@ -2065,29 +2067,88 @@ namespace PckStudio
private void addCustomPackIconToolStripMenuItem_Click(object sender, EventArgs e)
{
- if (!currentPCK.TryGetFile("0", PckFile.FileData.FileType.InfoFile, out PckFile.FileData file) ||
- string.IsNullOrEmpty(file.Properties.GetPropertyValue("PACKID"))
- )
+ string packID = "0";
+
+ using NumericPrompt numericPrompt = new NumericPrompt(0);
+ numericPrompt.ValueUpDown.Minimum = 0; // TODO: put min pack ID value (keeping this 0 just to be safe)
+ numericPrompt.ValueUpDown.Maximum = 999999999; // TODO: put max pack ID value
+ numericPrompt.ContextLabel.Text = "Please insert the desired Pack ID";
+ numericPrompt.TextLabel.Text = "Pack ID";
+
+ if (currentPCK is not null)
{
- MessageBox.Show("No PackID is present in this pack. To avoid this error, please open a PCK with a PackID before trying again.", "Operation Aborted", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ DialogResult prompt = MessageBox.Show(this,
+ "Would you like to use the current PackID? You can enter any PackID if not.",
+ "",
+ MessageBoxButtons.YesNoCancel);
+
+ switch (prompt)
+ {
+ case DialogResult.Yes:
+ if (!currentPCK.TryGetFile("0", PckFile.FileData.FileType.InfoFile, out PckFile.FileData file) ||
+ string.IsNullOrEmpty(file.Properties.GetPropertyValue("PACKID")))
+ {
+ MessageBox.Show(this,
+ "No PackID is present in this PCK. " +
+ "To avoid this error, ensure that the PCK has a proper PackID property on the \"0\" Info file before trying again.",
+ "Operation Aborted", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ packID = file.Properties.GetPropertyValue("PACKID");
+ break;
+ case DialogResult.No:
+ break;
+ case DialogResult.Cancel:
+ default:
+ MessageBox.Show(this, "Operation cancelled");
+ return;
+ }
+ }
+ else if (numericPrompt.ShowDialog(this) == DialogResult.OK) packID = numericPrompt.NewValue.ToString();
+ else
+ {
+ MessageBox.Show(this, "Operation cancelled");
return;
}
- OpenFileDialog dialog = new OpenFileDialog();
- dialog.Filter = "Minecraft Archive|*.arc";
- if (dialog.ShowDialog(this) == DialogResult.OK)
+ OpenFileDialog arcDialog = new OpenFileDialog();
+ OpenFileDialog iconDialog = new OpenFileDialog();
+ arcDialog.Filter = "Minecraft Archive|*.arc";
+ iconDialog.Filter = "Pack Icon|*.png";
+ if (arcDialog.ShowDialog(this) == DialogResult.OK)
{
- string filepath = dialog.FileName;
- dialog.Filter = "Pack Icon|*.png";
- if (dialog.ShowDialog(this) == DialogResult.OK)
+ using (var fs = File.OpenRead(arcDialog.FileName))
{
- using (var fs = File.OpenRead(filepath))
+ var reader = new ARCFileReader();
+ ConsoleArchive archive = reader.FromStream(fs);
+
+ if (iconDialog.ShowDialog(this) == DialogResult.OK)
{
- ARCUtil.Inject(fs, (
- string.Format("Graphics\\PackGraphics\\{0}.png", file.Properties.GetPropertyValue("PACKID")),
- File.ReadAllBytes(dialog.FileName))
- );
- MessageBox.Show("Successfully added Pack Icon to Archive!", "Successfully Added", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ string key = string.Format("Graphics\\PackGraphics\\{0}.png", packID);
+
+ if (archive.Keys.Contains(key))
+ {
+ DialogResult prompt = MessageBox.Show(this,
+ "This pack already has a pack icon present in the chosen file. Would you like to replace the pack icon?",
+ "Icon already exists",
+ MessageBoxButtons.YesNoCancel);
+ switch (prompt)
+ {
+ case DialogResult.Yes:
+ archive.Remove(key); // remove file so it can be injected
+ break;
+ case DialogResult.No:
+ case DialogResult.Cancel:
+ default:
+ MessageBox.Show(this, "Operation cancelled");
+ return;
+ }
+ }
+ archive.Add(key, File.ReadAllBytes(iconDialog.FileName));
+ var writer = new ARCFileWriter(archive);
+ writer.WriteToFile(arcDialog.FileName);
+ MessageBox.Show($"Successfully added {key} to Archive!", "Successfully Added", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
diff --git a/PCK-Studio/MainForm.resx b/PCK-Studio/MainForm.resx
index ded14920..b5c4e4b6 100644
--- a/PCK-Studio/MainForm.resx
+++ b/PCK-Studio/MainForm.resx
@@ -673,9 +673,6 @@
Edit
-
- False
-
195, 22
@@ -24172,19 +24169,19 @@
298, 17
- 180, 22
+ 160, 22
Add Entry
- 180, 22
+ 160, 22
Add BOX Entry
- 180, 22
+ 160, 22
Add ANIM Entry
@@ -24239,7 +24236,7 @@
Edit All Entries
- 182, 114
+ 182, 92
contextMenuMetaTree
@@ -29617,6 +29614,24 @@
System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ addEntryToolStripMenuItem1
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ addBOXEntryToolStripMenuItem1
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ addANIMEntryToolStripMenuItem1
+
+
+ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
addMultipleEntriesToolStripMenuItem1
@@ -29641,24 +29656,6 @@
System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- addEntryToolStripMenuItem1
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- addBOXEntryToolStripMenuItem1
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- addANIMEntryToolStripMenuItem1
-
-
- System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
MainForm