1 Commits

Author SHA1 Message Date
IveBeenAlone
25fbe2f22b Rebased the entire system to have a built-in downloader. Also probably fixed some bugs? 2026-01-18 20:03:35 -05:00
4 changed files with 354 additions and 13 deletions

92
Form1.Designer.cs generated
View File

@@ -39,6 +39,13 @@
this.checkUUID = new System.Windows.Forms.CheckBox();
this.btnPlay = new System.Windows.Forms.Button();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.btnInstallVersion = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.installProgressBar1 = new System.Windows.Forms.ProgressBar();
this.label2 = new System.Windows.Forms.Label();
this.comboBox2Play = new System.Windows.Forms.ComboBox();
this.btnUninstallVersion = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// textBoxUsername
@@ -111,7 +118,7 @@
//
// btnPlay
//
this.btnPlay.Location = new System.Drawing.Point(285, 26);
this.btnPlay.Location = new System.Drawing.Point(550, 26);
this.btnPlay.Name = "btnPlay";
this.btnPlay.Size = new System.Drawing.Size(104, 104);
this.btnPlay.TabIndex = 9;
@@ -127,11 +134,83 @@
this.toolTip1.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info;
this.toolTip1.ToolTipTitle = "UUID";
//
// comboBox1
//
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Location = new System.Drawing.Point(270, 25);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(200, 21);
this.comboBox1.TabIndex = 10;
this.comboBox1.Text = "Select A Version";
this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
//
// btnInstallVersion
//
this.btnInstallVersion.Location = new System.Drawing.Point(408, 52);
this.btnInstallVersion.Name = "btnInstallVersion";
this.btnInstallVersion.Size = new System.Drawing.Size(62, 20);
this.btnInstallVersion.TabIndex = 11;
this.btnInstallVersion.Text = "Install";
this.btnInstallVersion.UseVisualStyleBackColor = true;
this.btnInstallVersion.Click += new System.EventHandler(this.btnInstallVersion_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(270, 10);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(271, 13);
this.label1.TabIndex = 12;
this.label1.Text = "Game Updater (May freeze launcher while downloading)";
//
// installProgressBar1
//
this.installProgressBar1.Location = new System.Drawing.Point(270, 52);
this.installProgressBar1.Name = "installProgressBar1";
this.installProgressBar1.Size = new System.Drawing.Size(132, 20);
this.installProgressBar1.TabIndex = 13;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(273, 94);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(73, 13);
this.label2.TabIndex = 16;
this.label2.Text = "Game Version";
//
// comboBox2Play
//
this.comboBox2Play.FormattingEnabled = true;
this.comboBox2Play.Location = new System.Drawing.Point(273, 109);
this.comboBox2Play.Name = "comboBox2Play";
this.comboBox2Play.Size = new System.Drawing.Size(200, 21);
this.comboBox2Play.TabIndex = 14;
this.comboBox2Play.Text = "Select A Version";
this.comboBox2Play.SelectedIndexChanged += new System.EventHandler(this.comboBox2Play_SelectedIndexChanged);
//
// btnUninstallVersion
//
this.btnUninstallVersion.Location = new System.Drawing.Point(408, 136);
this.btnUninstallVersion.Name = "btnUninstallVersion";
this.btnUninstallVersion.Size = new System.Drawing.Size(62, 20);
this.btnUninstallVersion.TabIndex = 17;
this.btnUninstallVersion.Text = "Uninstall";
this.btnUninstallVersion.UseVisualStyleBackColor = true;
this.btnUninstallVersion.Click += new System.EventHandler(this.btnUninstallVersion_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(404, 161);
this.ClientSize = new System.Drawing.Size(684, 161);
this.Controls.Add(this.btnUninstallVersion);
this.Controls.Add(this.label2);
this.Controls.Add(this.comboBox2Play);
this.Controls.Add(this.installProgressBar1);
this.Controls.Add(this.label1);
this.Controls.Add(this.btnInstallVersion);
this.Controls.Add(this.comboBox1);
this.Controls.Add(this.btnPlay);
this.Controls.Add(this.checkUUID);
this.Controls.Add(this.checkUsername);
@@ -140,7 +219,9 @@
this.Controls.Add(this.textBoxUUID);
this.Controls.Add(this.labelUsername);
this.Controls.Add(this.textBoxUsername);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.Name = "Form1";
this.Text = "IveBeenAlone\'s Hytale Launcher";
this.ResumeLayout(false);
@@ -158,6 +239,13 @@
private System.Windows.Forms.CheckBox checkUUID;
private System.Windows.Forms.Button btnPlay;
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.Button btnInstallVersion;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ProgressBar installProgressBar1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.ComboBox comboBox2Play;
private System.Windows.Forms.Button btnUninstallVersion;
}
}

269
Form1.cs
View File

@@ -5,12 +5,18 @@ using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net.Http;
using System.Reflection;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace HelloWorld
{
@@ -19,6 +25,10 @@ namespace HelloWorld
public Form1()
{
InitializeComponent();
LoadComboBoxItems();
LoadDownloadedFiles();
string path = ".ibalaunch";
string uuidsave = ".ibalaunch\\uuid";
string usersave = ".ibalaunch\\username";
@@ -159,22 +169,57 @@ namespace HelloWorld
Console.WriteLine("UUID Shit done.");
// All of this shit is Last Played version data.
string DropDownGameVers = comboBox2Play.Text;
string verssave = ".ibalaunch\\lastplayedversion";
File.Create(verssave).Dispose();
Console.WriteLine("LastPlayedVersion File exists, comparing textbox");
string VersFileText = File.ReadAllText(verssave);
if (VersFileText != DropDownGameVers)
{
Console.WriteLine("LastPlayedVersion mismatch, writing!");
try
{
File.WriteAllText(verssave, DropDownGameVers);
Console.WriteLine("LastPlayedVersion file saved.");
}
catch (Exception)
{
Console.WriteLine("An error occurred: idfk probably rw permission error?");
}
}
else
{
Console.WriteLine("LastPlayedVersion already saved.");
}
Console.WriteLine("LastPlayedVersion Shit done.");
// Genuinely FUCK windows and C# and fucking whatever else to make this shit work
// I swear to fucking god I spent a solid 3 hours trying to make this thing
// OPEN A FUCKING EXE AND PASS ARGS CORRECTLY
string relativeExePath = Path.Combine("release\\package\\game\\latest\\Client\\", "HytaleClient.exe");
string relativeExePath = Path.Combine("install\\release\\package\\game\\latest\\Client\\", "HytaleClient.exe");
string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
string workingDirectory = Path.Combine(baseDirectory, "install");
string Hytaleappdir = "\\release\\package\\game\\latest";
string HytaleJava = "\\release\\package\\jre\\latest\\bin\\java.exe";
string workingDirectory = Path.Combine(baseDirectory, "Versions");
string Hytaleappdir = "\\install\\release\\package\\game\\latest";
string HytaleJava = "\\install\\release\\package\\jre\\latest\\bin\\java.exe";
string GamePath = "\"" + workingDirectory + "\\" + relativeExePath + "\""; //hytale.exe
string AppPath = "\"" + workingDirectory + Hytaleappdir + "\""; // game\latest
string UserdataPath = "\"" + baseDirectory + "UserData"+"\""; // game\latest
string JavaPath = "\"" + workingDirectory + HytaleJava + "\""; // java
string LaunchVersion = comboBox2Play.Text;
string GamePath = "\"" + workingDirectory + "\\" + LaunchVersion + "\\" + relativeExePath + "\""; //hytale.exe
string AppPath = "\"" + workingDirectory + "\\" + LaunchVersion + Hytaleappdir + "\""; // game\latest
string UserdataPath = "\"" + baseDirectory + "UserData"+"\"";
string JavaPath = "\"" + workingDirectory + "\\" + LaunchVersion + HytaleJava + "\""; // java
string arguments = " --app-dir " +AppPath+ " --user-dir " + UserdataPath + " --java-exec " + JavaPath + " --auth-mode offline --uuid 13371337-1337-1337-1337-1337" + textBoxUUID.Text + " --name \"" + textBoxUsername.Text + "\""; // Command-line arguments for the VB app
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = GamePath,
@@ -191,7 +236,7 @@ namespace HelloWorld
}
catch (Exception ex)
{
MessageBox.Show($"Error starting the VB.NET application: {ex.Message}");
MessageBox.Show($"Error starting the application: {ex.Message}\n" + GamePath + arguments);
}
}
@@ -204,5 +249,211 @@ namespace HelloWorld
textBoxUUID.Text = GeneratedUUIDVal.ToString();
}
private void checkUUID_CheckedChanged(object sender, EventArgs e){}
private async void LoadComboBoxItems()
{
string url = "https://ibatv.xyz/data/list.txt";
try
{
using (HttpClient client = new HttpClient())
{
string fileContents = await client.GetStringAsync(url);
string[] lines = fileContents
.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
comboBox1.Items.Clear();
comboBox1.Items.AddRange(lines);
}
}
catch (Exception ex)
{
MessageBox.Show("Failed to load items: " + ex.Message);
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){}
private async void btnInstallVersion_Click(object sender, EventArgs e)
{
if (comboBox1.SelectedItem == null)
{
MessageBox.Show("Please select a version first.");
return;
}
string baseUrl = "https://ibatv.xyz/data/files/";
string rawName = comboBox1.SelectedItem.ToString();
string fileName = rawName.EndsWith(".zip", StringComparison.OrdinalIgnoreCase)
? rawName
: rawName + ".zip";
string fileUrl = baseUrl + fileName;
string InstallBaseDirectory = AppDomain.CurrentDomain.BaseDirectory;
string savePath = Path.Combine(InstallBaseDirectory, fileName);
string installDir = Path.Combine(InstallBaseDirectory, "Versions");
string localListPath = Path.Combine(installDir,"versions.txt");
try
{
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(fileUrl, HttpCompletionOption.ResponseHeadersRead))
{
response.EnsureSuccessStatusCode();
long? totalBytes = response.Content.Headers.ContentLength;
using (var contentStream = await response.Content.ReadAsStreamAsync())
using (var fileStream = new FileStream(savePath, FileMode.Create, FileAccess.Write, FileShare.None, 41943040, true))
{
var buffer = new byte[41943040]; //40MiB apparently. :shrug:
long totalRead = 0;
int bytesRead;
installProgressBar1.Value = 0;
while ((bytesRead = await contentStream.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
await fileStream.WriteAsync(buffer, 0, bytesRead);
totalRead += bytesRead;
if (totalBytes.HasValue)
{
int progress = (int)((totalRead * 100L) / totalBytes.Value);
installProgressBar1.Value = Math.Min(progress, 100);
}
}
}
}
string folderName = Path.GetFileNameWithoutExtension(fileName);
string extractPath = Path.Combine(installDir, folderName);
Directory.CreateDirectory(extractPath);
ZipFile.ExtractToDirectory(savePath, extractPath);
File.Delete(savePath);
string baseName = Path.GetFileNameWithoutExtension(fileName);
List<string> downloadedFiles = new List<string>();
if (File.Exists(localListPath))
downloadedFiles = File.ReadAllLines(localListPath).ToList();
// Append only if not already in the list
if (!downloadedFiles.Contains(baseName, StringComparer.OrdinalIgnoreCase))
{
File.AppendAllText(localListPath, baseName + Environment.NewLine);
LoadDownloadedFiles();
}
MessageBox.Show("Download complete:\n" + savePath + "\n" + "Extracted to:\n" + installDir);
}
catch (Exception ex)
{
MessageBox.Show("Download failed:\n" + ex.Message);
}
}
private void comboBox2Play_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void LoadDownloadedFiles()
{
string InstallBaseDirectory = AppDomain.CurrentDomain.BaseDirectory;
string installDir = Path.Combine(InstallBaseDirectory, "Versions");
string localListPath = Path.Combine(installDir, "versions.txt");
comboBox2Play.Items.Clear(); // Clear old items
if (File.Exists(localListPath))
{
var downloadedFiles = File.ReadAllLines(localListPath);
foreach (var file in downloadedFiles)
{
if (!string.IsNullOrWhiteSpace(file))
comboBox2Play.Items.Add(file);
}
}
}
private void btnUninstallVersion_Click(object sender, EventArgs e)
{
//string baseUrl = "https://ibatv.xyz/data/files/";
string rawName = comboBox1.SelectedItem.ToString();
string fileName = rawName.EndsWith(".zip", StringComparison.OrdinalIgnoreCase)
? rawName
: rawName + ".zip";
//string fileUrl = baseUrl + fileName;
string InstallBaseDirectory = AppDomain.CurrentDomain.BaseDirectory;
string savePath = Path.Combine(InstallBaseDirectory, fileName);
string installDir = Path.Combine(InstallBaseDirectory, "Versions");
string localListPath = Path.Combine(installDir, "versions.txt");
if (comboBox2Play.SelectedItem == null)
{
MessageBox.Show("Please select a version to delete.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
string selectedVersion = comboBox2Play.SelectedItem.ToString();
// Confirm deletion
var result = MessageBox.Show(
$"Are you sure you want to delete the version '{selectedVersion}'?",
"Confirm Deletion",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question
);
if (result != DialogResult.Yes)
return;
try
{
// Delete installed folder
//string installDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string versionPath = Path.Combine(installDir, selectedVersion);
if (Directory.Exists(versionPath))
Directory.Delete(versionPath, true); // true = recursive delete
// Update local list
// string localListPath = Path.Combine(installDir, "downloaded_files.txt");
if (File.Exists(localListPath))
{
var downloadedFiles = File.ReadAllLines(localListPath).ToList();
downloadedFiles.RemoveAll(f => string.Equals(f, selectedVersion, StringComparison.OrdinalIgnoreCase));
File.WriteAllLines(localListPath, downloadedFiles);
}
// Remove from ComboBox
comboBox2Play.Items.Remove(selectedVersion);
LoadDownloadedFiles();
MessageBox.Show($"Version '{selectedVersion}' has been deleted.", "Deleted", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show("Error deleting version:\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

View File

@@ -56,6 +56,8 @@
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />

View File

@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("2.9.7.0")]
[assembly: AssemblyFileVersion("2.9.7.0")]
[assembly: AssemblyVersion("3.7.26.0")]
[assembly: AssemblyFileVersion("3.7.26.0")]