mirror of
https://github.com/zs-yg/MCSJ.git
synced 2025-12-06 19:00:43 +08:00
Compare commits
7 Commits
ff0cf01100
...
v0.0.6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
59b7c84310 | ||
|
|
306a7bb309 | ||
|
|
62713817e1 | ||
|
|
1870b066fc | ||
|
|
7d74c603b8 | ||
|
|
aea0742092 | ||
|
|
295791b4f2 |
17
Program.cs
17
Program.cs
@@ -3,6 +3,7 @@ using System.Threading.Tasks;
|
|||||||
using MCSJ.Tools;
|
using MCSJ.Tools;
|
||||||
using MCSJ.Tools.LogSystem;
|
using MCSJ.Tools.LogSystem;
|
||||||
using MCSJ.Tools.JreDownload;
|
using MCSJ.Tools.JreDownload;
|
||||||
|
using MCSJ.Tools.ViewJre;
|
||||||
|
|
||||||
namespace MCSJ
|
namespace MCSJ
|
||||||
{
|
{
|
||||||
@@ -15,22 +16,24 @@ namespace MCSJ
|
|||||||
Console.WriteLine($"日志目录: {logDir}");
|
Console.WriteLine($"日志目录: {logDir}");
|
||||||
LogMain.Debug($"日志文件: {LogCreator.GetLogFilePath()}");
|
LogMain.Debug($"日志文件: {LogCreator.GetLogFilePath()}");
|
||||||
|
|
||||||
LogMain.Info("MC服务器下载工具启动");
|
LogMain.Info("MC服务器启动工具启动");
|
||||||
var httpClient = new HttpClient {
|
var httpClient = new HttpClient {
|
||||||
Timeout = TimeSpan.FromMinutes(5),
|
Timeout = TimeSpan.FromMinutes(5),
|
||||||
DefaultRequestHeaders = { { "User-Agent", "MCSJ-JRE-Downloader" } }
|
DefaultRequestHeaders = { { "User-Agent", "MCSJ-JRE-Downloader" } }
|
||||||
};
|
};
|
||||||
var versionManager = new VersionManager();
|
var versionManager = new VersionManager();
|
||||||
var downloadService = new DownloadService(versionManager);
|
var downloadService = new DownloadService(versionManager);
|
||||||
|
var jreViewer = new JreViewer();
|
||||||
LogMain.Debug("服务初始化完成");
|
LogMain.Debug("服务初始化完成");
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
Console.WriteLine("MC服务器下载工具");
|
Console.WriteLine("MC服务器启动工具");
|
||||||
Console.WriteLine("1. 显示所有版本");
|
Console.WriteLine("1. 显示所有服务器版本");
|
||||||
Console.WriteLine("2. 下载指定版本");
|
Console.WriteLine("2. 下载指定服务器版本");
|
||||||
Console.WriteLine("3. 下载JRE");
|
Console.WriteLine("3. 下载JRE");
|
||||||
Console.WriteLine("4. 退出");
|
Console.WriteLine("4. 查看已安装的JRE");
|
||||||
|
Console.WriteLine("5. 退出");
|
||||||
Console.Write("请选择操作: ");
|
Console.Write("请选择操作: ");
|
||||||
|
|
||||||
var input = Console.ReadLine();
|
var input = Console.ReadLine();
|
||||||
@@ -63,6 +66,10 @@ namespace MCSJ
|
|||||||
LogMain.Info($"JRE下载完成: {jreVersion}");
|
LogMain.Info($"JRE下载完成: {jreVersion}");
|
||||||
break;
|
break;
|
||||||
case "4":
|
case "4":
|
||||||
|
jreViewer.DisplayInstalledJres();
|
||||||
|
LogMain.Info("显示已安装的JRE列表");
|
||||||
|
break;
|
||||||
|
case "5":
|
||||||
LogMain.Info("程序正常退出");
|
LogMain.Info("程序正常退出");
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -35,7 +35,13 @@ MCSJ 是一个开源的 Minecraft 服务器管理工具,旨在为用户提供
|
|||||||
2. 双击运行 MCSJ.exe 启动程序。
|
2. 双击运行 MCSJ.exe 启动程序。
|
||||||
3. 或者命令行输入MCSJ.exe 启动程序。可以查看是否需要安装运行时
|
3. 或者命令行输入MCSJ.exe 启动程序。可以查看是否需要安装运行时
|
||||||
|
|
||||||
## 关于作者
|
## 官方镜像仓库
|
||||||
|
|
||||||
|
[gitlab镜像仓库](https://gitlab.com/zs-yg/MCSJ)
|
||||||
|
|
||||||
|
[gitee镜像仓库](https://gitee.com/chr_super/mcsj)
|
||||||
|
|
||||||
|
## 关于
|
||||||
|
|
||||||
MCSJ 项目由 [zs-yg](https://github.com/zs-yg) 开发,欢迎提交 issue 和 PR。
|
MCSJ 项目由 [zs-yg](https://github.com/zs-yg) 开发,欢迎提交 issue 和 PR。
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ using System;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using MCSJ.Tools.LogSystem;
|
||||||
|
|
||||||
namespace MCSJ.Tools
|
namespace MCSJ.Tools
|
||||||
{
|
{
|
||||||
@@ -21,6 +22,7 @@ namespace MCSJ.Tools
|
|||||||
if (string.IsNullOrWhiteSpace(version))
|
if (string.IsNullOrWhiteSpace(version))
|
||||||
{
|
{
|
||||||
Console.WriteLine("版本名称不能为空");
|
Console.WriteLine("版本名称不能为空");
|
||||||
|
LogMain.Error("版本名称不能为空");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,6 +30,7 @@ namespace MCSJ.Tools
|
|||||||
if (string.IsNullOrEmpty(url))
|
if (string.IsNullOrEmpty(url))
|
||||||
{
|
{
|
||||||
Console.WriteLine($"版本 {version} 不存在");
|
Console.WriteLine($"版本 {version} 不存在");
|
||||||
|
LogMain.Error($"版本 {version} 不存在");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,10 +50,12 @@ namespace MCSJ.Tools
|
|||||||
if (!Directory.Exists(profilePath))
|
if (!Directory.Exists(profilePath))
|
||||||
break;
|
break;
|
||||||
Console.WriteLine($"文件夹 '{targetFolder}' 已存在,请重新输入(直接回车则取消下载):");
|
Console.WriteLine($"文件夹 '{targetFolder}' 已存在,请重新输入(直接回车则取消下载):");
|
||||||
|
LogMain.Warn($"文件夹 '{targetFolder}' 已存在,请重新输入(直接回车则取消下载):");
|
||||||
}
|
}
|
||||||
if (Directory.Exists(profilePath))
|
if (Directory.Exists(profilePath))
|
||||||
{
|
{
|
||||||
Console.WriteLine("下载已取消。");
|
Console.WriteLine("下载已取消。");
|
||||||
|
LogMain.Info("下载已取消。");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Directory.CreateDirectory(profilePath);
|
Directory.CreateDirectory(profilePath);
|
||||||
@@ -59,6 +64,7 @@ namespace MCSJ.Tools
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
Console.WriteLine($"开始下载 {version} 到 {profilePath} ...");
|
Console.WriteLine($"开始下载 {version} 到 {profilePath} ...");
|
||||||
|
LogMain.Info($"开始下载 {version} 到 {profilePath} ...");
|
||||||
var response = await _httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
|
var response = await _httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
|
||||||
response.EnsureSuccessStatusCode();
|
response.EnsureSuccessStatusCode();
|
||||||
|
|
||||||
@@ -90,10 +96,12 @@ namespace MCSJ.Tools
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Console.WriteLine($"\n{version} 下载完成! 文件已保存到 {jarPath}");
|
Console.WriteLine($"\n{version} 下载完成! 文件已保存到 {jarPath}");
|
||||||
|
LogMain.Info($"{version} 下载完成! 文件已保存到 {jarPath}");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"下载失败: {ex.Message}");
|
Console.WriteLine($"下载失败: {ex.Message}");
|
||||||
|
LogMain.Error($"下载失败: {ex.Message}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using MCSJ.Tools.LogSystem;
|
||||||
|
|
||||||
namespace MCSJ.Tools
|
namespace MCSJ.Tools
|
||||||
{
|
{
|
||||||
@@ -19,6 +20,7 @@ namespace MCSJ.Tools
|
|||||||
{
|
{
|
||||||
var filePath = Path.Combine("resources", "serverlist.txt");
|
var filePath = Path.Combine("resources", "serverlist.txt");
|
||||||
Console.WriteLine($"尝试从路径加载版本列表: {Path.GetFullPath(filePath)}");
|
Console.WriteLine($"尝试从路径加载版本列表: {Path.GetFullPath(filePath)}");
|
||||||
|
LogMain.Info($"尝试从路径加载版本列表: {Path.GetFullPath(filePath)}");
|
||||||
|
|
||||||
if (!File.Exists(filePath))
|
if (!File.Exists(filePath))
|
||||||
{
|
{
|
||||||
@@ -42,7 +44,8 @@ namespace MCSJ.Tools
|
|||||||
|
|
||||||
if (string.IsNullOrEmpty(version) || string.IsNullOrEmpty(url))
|
if (string.IsNullOrEmpty(version) || string.IsNullOrEmpty(url))
|
||||||
{
|
{
|
||||||
Console.WriteLine($"忽略无效条目: {rawLine} (版本或URL为空)");
|
Console.WriteLine($"忽略无效条目: {rawLine} (版本或URL为空)");
|
||||||
|
LogMain.Warn($"忽略无效条目: {rawLine} (版本或URL为空)");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,6 +54,7 @@ namespace MCSJ.Tools
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine($"忽略无效条目: {rawLine} (缺少冒号分隔或格式不正确)");
|
Console.WriteLine($"忽略无效条目: {rawLine} (缺少冒号分隔或格式不正确)");
|
||||||
|
LogMain.Warn($"忽略无效条目: {rawLine} (缺少冒号分隔或格式不正确)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,12 +64,15 @@ namespace MCSJ.Tools
|
|||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine($"成功加载 {_versions.Count} 个版本");
|
Console.WriteLine($"成功加载 {_versions.Count} 个版本");
|
||||||
|
LogMain.Info($"成功加载 {_versions.Count} 个版本");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"加载版本列表失败: {ex.Message}");
|
Console.WriteLine($"加载版本列表失败: {ex.Message}");
|
||||||
Console.WriteLine($"当前工作目录: {Directory.GetCurrentDirectory()}");
|
Console.WriteLine($"当前工作目录: {Directory.GetCurrentDirectory()}");
|
||||||
Console.WriteLine("请确保serverlist.txt每行格式为: 版本名:下载URL (版本名可以包含空格),支持以#开头的注释");
|
Console.WriteLine("请确保serverlist.txt每行格式为: 版本名:下载URL (版本名可以包含空格),支持以#开头的注释");
|
||||||
|
LogMain.Error($"加载版本列表失败: {ex.Message}");
|
||||||
|
LogMain.Error($"当前工作目录: {Directory.GetCurrentDirectory()}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,10 +82,12 @@ namespace MCSJ.Tools
|
|||||||
if (!File.Exists(filePath))
|
if (!File.Exists(filePath))
|
||||||
{
|
{
|
||||||
Console.WriteLine("版本列表文件不存在");
|
Console.WriteLine("版本列表文件不存在");
|
||||||
|
LogMain.Error("版本列表文件不存在");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("可用版本列表:");
|
Console.WriteLine("可用版本列表:");
|
||||||
|
LogMain.Info("可用版本列表:");
|
||||||
foreach (var version in _versions.Keys)
|
foreach (var version in _versions.Keys)
|
||||||
{
|
{
|
||||||
Console.WriteLine(version);
|
Console.WriteLine(version);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using MCSJ.Tools.LogSystem;
|
||||||
|
|
||||||
namespace MCSJ.Tools.JreDownload
|
namespace MCSJ.Tools.JreDownload
|
||||||
{
|
{
|
||||||
@@ -33,6 +34,7 @@ namespace MCSJ.Tools.JreDownload
|
|||||||
if (percentage == 100)
|
if (percentage == 100)
|
||||||
{
|
{
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
|
LogMain.Info("JRE下载完成");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using System.Linq;
|
|||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.IO.Compression;
|
using System.IO.Compression;
|
||||||
|
using MCSJ.Tools.LogSystem;
|
||||||
|
|
||||||
namespace MCSJ.Tools.JreDownload
|
namespace MCSJ.Tools.JreDownload
|
||||||
{
|
{
|
||||||
@@ -25,6 +26,7 @@ namespace MCSJ.Tools.JreDownload
|
|||||||
if (CheckJreExists(version))
|
if (CheckJreExists(version))
|
||||||
{
|
{
|
||||||
Console.WriteLine($"JRE {version} 已存在,无需重复下载");
|
Console.WriteLine($"JRE {version} 已存在,无需重复下载");
|
||||||
|
LogMain.Info($"JRE {version} 已存在,无需重复下载");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,6 +35,7 @@ namespace MCSJ.Tools.JreDownload
|
|||||||
if (string.IsNullOrEmpty(downloadUrl))
|
if (string.IsNullOrEmpty(downloadUrl))
|
||||||
{
|
{
|
||||||
Console.WriteLine($"找不到版本 {version} 的下载链接");
|
Console.WriteLine($"找不到版本 {version} 的下载链接");
|
||||||
|
LogMain.Error($"找不到版本 {version} 的下载链接");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,6 +45,7 @@ namespace MCSJ.Tools.JreDownload
|
|||||||
if (string.IsNullOrEmpty(tempZipPath))
|
if (string.IsNullOrEmpty(tempZipPath))
|
||||||
{
|
{
|
||||||
Console.WriteLine("下载失败");
|
Console.WriteLine("下载失败");
|
||||||
|
LogMain.Error("下载失败");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,6 +54,7 @@ namespace MCSJ.Tools.JreDownload
|
|||||||
if (!ExtractJre(tempZipPath, jreFolder))
|
if (!ExtractJre(tempZipPath, jreFolder))
|
||||||
{
|
{
|
||||||
Console.WriteLine("解压失败");
|
Console.WriteLine("解压失败");
|
||||||
|
LogMain.Error("解压失败");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,6 +65,7 @@ namespace MCSJ.Tools.JreDownload
|
|||||||
if (javaExePath == null || javawExePath == null)
|
if (javaExePath == null || javawExePath == null)
|
||||||
{
|
{
|
||||||
Console.WriteLine("找不到java.exe或javaw.exe");
|
Console.WriteLine("找不到java.exe或javaw.exe");
|
||||||
|
LogMain.Error("找不到java.exe或javaw.exe");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,7 +75,8 @@ namespace MCSJ.Tools.JreDownload
|
|||||||
// 6. 清理临时文件
|
// 6. 清理临时文件
|
||||||
File.Delete(tempZipPath);
|
File.Delete(tempZipPath);
|
||||||
|
|
||||||
Console.WriteLine($"JRE {version} 安装完成");
|
Console.WriteLine($"JRE {version} 安装完成");
|
||||||
|
LogMain.Info($"JRE {version} 安装完成");
|
||||||
}
|
}
|
||||||
|
|
||||||
private string? GetDownloadUrl(string version)
|
private string? GetDownloadUrl(string version)
|
||||||
@@ -99,18 +106,22 @@ namespace MCSJ.Tools.JreDownload
|
|||||||
if (!Uri.IsWellFormedUriString(url, UriKind.Absolute))
|
if (!Uri.IsWellFormedUriString(url, UriKind.Absolute))
|
||||||
{
|
{
|
||||||
Console.WriteLine($"无效的下载URL: {url}");
|
Console.WriteLine($"无效的下载URL: {url}");
|
||||||
|
LogMain.Error($"无效的下载URL: {url}");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine($"正在准备下载 {url}...");
|
Console.WriteLine($"正在准备下载 {url}...");
|
||||||
|
LogMain.Info($"正在准备下载 {url}...");
|
||||||
var response = await _httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
|
var response = await _httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
|
||||||
response.EnsureSuccessStatusCode();
|
response.EnsureSuccessStatusCode();
|
||||||
|
|
||||||
var totalBytes = response.Content.Headers.ContentLength ?? 0;
|
var totalBytes = response.Content.Headers.ContentLength ?? 0;
|
||||||
Console.WriteLine($"文件总大小: {totalBytes} 字节");
|
Console.WriteLine($"文件总大小: {totalBytes} 字节");
|
||||||
|
LogMain.Info($"文件总大小: {totalBytes} 字节");
|
||||||
long bytesRead = 0;
|
long bytesRead = 0;
|
||||||
var lastReportTime = DateTime.MinValue;
|
var lastReportTime = DateTime.MinValue;
|
||||||
Console.WriteLine("开始下载...");
|
Console.WriteLine("开始下载...");
|
||||||
|
LogMain.Info("开始下载...");
|
||||||
|
|
||||||
using (var stream = await response.Content.ReadAsStreamAsync())
|
using (var stream = await response.Content.ReadAsStreamAsync())
|
||||||
using (var fileStream = new FileStream(tempPath, FileMode.Create))
|
using (var fileStream = new FileStream(tempPath, FileMode.Create))
|
||||||
@@ -139,6 +150,7 @@ namespace MCSJ.Tools.JreDownload
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"下载失败: {ex.Message}");
|
Console.WriteLine($"下载失败: {ex.Message}");
|
||||||
|
LogMain.Error($"下载失败: {ex.Message}");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -157,6 +169,7 @@ namespace MCSJ.Tools.JreDownload
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"解压失败: {ex.Message}");
|
Console.WriteLine($"解压失败: {ex.Message}");
|
||||||
|
LogMain.Error($"解压失败: {ex.Message}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
53
Tools/viewjre/JreViewer.cs
Normal file
53
Tools/viewjre/JreViewer.cs
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using MCSJ.Tools.LogSystem;
|
||||||
|
|
||||||
|
namespace MCSJ.Tools.ViewJre
|
||||||
|
{
|
||||||
|
public class JreViewer
|
||||||
|
{
|
||||||
|
private const string SetupFolder = "setup";
|
||||||
|
private const string JreTomlFile = "jre.toml";
|
||||||
|
|
||||||
|
public void DisplayInstalledJres()
|
||||||
|
{
|
||||||
|
var tomlPath = Path.Combine(SetupFolder, JreTomlFile);
|
||||||
|
|
||||||
|
if (!File.Exists(tomlPath))
|
||||||
|
{
|
||||||
|
Console.WriteLine("没有安装任何JRE");
|
||||||
|
LogMain.Info("没有安装任何JRE");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var content = File.ReadAllText(tomlPath);
|
||||||
|
var versions = content.Split('\n')
|
||||||
|
.Where(line => line.StartsWith("[jre."))
|
||||||
|
.Select(line => line.Split('.')[1].Split(']')[0].Trim()) // 精确提取版本号
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
if (versions.Count == 0)
|
||||||
|
{
|
||||||
|
Console.WriteLine("没有安装任何JRE");
|
||||||
|
LogMain.Info("没有安装任何JRE");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine("已安装的JRE版本:");
|
||||||
|
LogMain.Info("已安装的JRE版本:");
|
||||||
|
foreach (var version in versions)
|
||||||
|
{
|
||||||
|
Console.WriteLine(version); // 直接输出版本号,不带前缀
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"读取JRE列表失败: {ex.Message}");
|
||||||
|
LogMain.Error($"读取JRE列表失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
1.21.11-pre2:https://piston-data.mojang.com/v1/objects/7f997b55094aa7754f25173aafef657449f02bec/server.jar
|
||||||
|
1.21.11-pre1:https://piston-data.mojang.com/v1/objects/1087f90b4d73209318d87aa8deecfaae24861004/server.jar
|
||||||
25w46a:https://piston-data.mojang.com/v1/objects/e61a72ec98fae895ef3e80b05269ae343c42fc0b/server.jar
|
25w46a:https://piston-data.mojang.com/v1/objects/e61a72ec98fae895ef3e80b05269ae343c42fc0b/server.jar
|
||||||
25w45a:https://piston-data.mojang.com/v1/objects/4c0fe96ca002d7049226a740194c8d7114bd5059/server.jar
|
25w45a:https://piston-data.mojang.com/v1/objects/4c0fe96ca002d7049226a740194c8d7114bd5059/server.jar
|
||||||
25w44a:https://piston-data.mojang.com/v1/objects/1ade1ebd6affbfed6dbfb2ce8864cf19efed07ba/server.jar
|
25w44a:https://piston-data.mojang.com/v1/objects/1ade1ebd6affbfed6dbfb2ce8864cf19efed07ba/server.jar
|
||||||
|
|||||||
Reference in New Issue
Block a user