mirror of
https://github.com/zs-yg/MCSJ.git
synced 2025-12-06 10:50:42 +08:00
Compare commits
4 Commits
9e5e290da5
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94b2e7a196 | ||
|
|
8c5d3a8219 | ||
|
|
060edfb873 | ||
|
|
397002f2e8 |
16
Program.cs
16
Program.cs
@@ -4,6 +4,7 @@ using MCSJ.Tools;
|
|||||||
using MCSJ.Tools.LogSystem;
|
using MCSJ.Tools.LogSystem;
|
||||||
using MCSJ.Tools.JreDownload;
|
using MCSJ.Tools.JreDownload;
|
||||||
using MCSJ.Tools.ViewJre;
|
using MCSJ.Tools.ViewJre;
|
||||||
|
using MCSJ.Tools.ServerManagement;
|
||||||
|
|
||||||
namespace MCSJ
|
namespace MCSJ
|
||||||
{
|
{
|
||||||
@@ -31,9 +32,10 @@ namespace MCSJ
|
|||||||
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. 服务器管理");
|
||||||
Console.WriteLine("4. 查看已安装的JRE");
|
Console.WriteLine("4. 下载JRE");
|
||||||
Console.WriteLine("5. 退出");
|
Console.WriteLine("5. 查看已安装的JRE");
|
||||||
|
Console.WriteLine("6. 退出");
|
||||||
Console.Write("请选择操作: ");
|
Console.Write("请选择操作: ");
|
||||||
|
|
||||||
var input = Console.ReadLine();
|
var input = Console.ReadLine();
|
||||||
@@ -53,6 +55,10 @@ namespace MCSJ
|
|||||||
LogMain.Info($"版本下载完成: {version}");
|
LogMain.Info($"版本下载完成: {version}");
|
||||||
break;
|
break;
|
||||||
case "3":
|
case "3":
|
||||||
|
ServerManager.ShowMenu();
|
||||||
|
LogMain.Info("进入服务器管理");
|
||||||
|
break;
|
||||||
|
case "4":
|
||||||
Console.Write("请输入要下载的JRE版本(jre8,jre11,jre17/21/25): ");
|
Console.Write("请输入要下载的JRE版本(jre8,jre11,jre17/21/25): ");
|
||||||
var jreVersion = Console.ReadLine();
|
var jreVersion = Console.ReadLine();
|
||||||
if (string.IsNullOrWhiteSpace(jreVersion))
|
if (string.IsNullOrWhiteSpace(jreVersion))
|
||||||
@@ -65,11 +71,11 @@ namespace MCSJ
|
|||||||
await jreDownloadService.DownloadAndSetupJre(jreVersion);
|
await jreDownloadService.DownloadAndSetupJre(jreVersion);
|
||||||
LogMain.Info($"JRE下载完成: {jreVersion}");
|
LogMain.Info($"JRE下载完成: {jreVersion}");
|
||||||
break;
|
break;
|
||||||
case "4":
|
case "5":
|
||||||
jreViewer.DisplayInstalledJres();
|
jreViewer.DisplayInstalledJres();
|
||||||
LogMain.Info("显示已安装的JRE列表");
|
LogMain.Info("显示已安装的JRE列表");
|
||||||
break;
|
break;
|
||||||
case "5":
|
case "6":
|
||||||
LogMain.Info("程序正常退出");
|
LogMain.Info("程序正常退出");
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
|
|||||||
74
Tools/server_management/EulaAgreer.cs
Normal file
74
Tools/server_management/EulaAgreer.cs
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using MCSJ.Tools.LogSystem;
|
||||||
|
|
||||||
|
namespace MCSJ.Tools.ServerManagement
|
||||||
|
{
|
||||||
|
public static class EulaAgreer
|
||||||
|
{
|
||||||
|
public static void AgreeEula()
|
||||||
|
{
|
||||||
|
LogMain.Info("开始处理EULA同意流程");
|
||||||
|
|
||||||
|
// 获取服务器列表
|
||||||
|
var servers = ServerManager.GetServerProfiles();
|
||||||
|
if (servers.Count == 0)
|
||||||
|
{
|
||||||
|
LogMain.Error("没有可用的服务器存档");
|
||||||
|
Console.WriteLine("没有可用的服务器存档");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 显示服务器列表供选择
|
||||||
|
LogMain.Info($"找到 {servers.Count} 个服务器存档");
|
||||||
|
Console.WriteLine("可用的服务器存档:");
|
||||||
|
for (int i = 0; i < servers.Count; i++)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"{i + 1}. {servers[i]}");
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.Write("请选择服务器(输入编号): ");
|
||||||
|
if (!int.TryParse(Console.ReadLine(), out int serverIndex) || serverIndex < 1 || serverIndex > servers.Count)
|
||||||
|
{
|
||||||
|
LogMain.Warn($"无效的服务器选择: {serverIndex}");
|
||||||
|
Console.WriteLine("无效选择");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string selectedServer = servers[serverIndex - 1];
|
||||||
|
LogMain.Info($"用户选择了服务器: {selectedServer}");
|
||||||
|
string eulaPath = Path.Combine("profiles", selectedServer, "eula.txt");
|
||||||
|
|
||||||
|
// 检查eula文件是否存在
|
||||||
|
if (!File.Exists(eulaPath))
|
||||||
|
{
|
||||||
|
LogMain.Warn($"没有找到eula.txt文件: {eulaPath}");
|
||||||
|
Console.WriteLine("没有找到eula.txt文件");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读取并修改eula文件
|
||||||
|
string eulaContent = File.ReadAllText(eulaPath);
|
||||||
|
if (eulaContent.Contains("eula=true"))
|
||||||
|
{
|
||||||
|
LogMain.Info("EULA已经同意,无需修改");
|
||||||
|
Console.WriteLine("EULA已经同意,无需修改");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eulaContent.Contains("eula=false"))
|
||||||
|
{
|
||||||
|
eulaContent = eulaContent.Replace("eula=false", "eula=true");
|
||||||
|
File.WriteAllText(eulaPath, eulaContent);
|
||||||
|
LogMain.Info("已成功同意EULA");
|
||||||
|
Console.WriteLine("已同意EULA");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LogMain.Error($"无效的eula.txt格式: {eulaPath}");
|
||||||
|
Console.WriteLine("无效的eula.txt格式");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
133
Tools/server_management/ScriptGenerator.cs
Normal file
133
Tools/server_management/ScriptGenerator.cs
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using MCSJ.Tools.LogSystem;
|
||||||
|
|
||||||
|
namespace MCSJ.Tools.ServerManagement
|
||||||
|
{
|
||||||
|
public static class ScriptGenerator
|
||||||
|
{
|
||||||
|
public static void GenerateScript()
|
||||||
|
{
|
||||||
|
LogMain.Info("开始生成服务器启动脚本");
|
||||||
|
|
||||||
|
// 获取服务器列表
|
||||||
|
var servers = ServerManager.GetServerProfiles();
|
||||||
|
if (servers.Count == 0)
|
||||||
|
{
|
||||||
|
LogMain.Error("没有可用的服务器存档");
|
||||||
|
Console.WriteLine("没有可用的服务器存档");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 显示服务器列表供选择
|
||||||
|
LogMain.Info($"找到 {servers.Count} 个服务器存档");
|
||||||
|
Console.WriteLine("可用的服务器存档:");
|
||||||
|
for (int i = 0; i < servers.Count; i++)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"{i + 1}. {servers[i]}");
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.Write("请选择服务器(输入编号): ");
|
||||||
|
if (!int.TryParse(Console.ReadLine(), out int serverIndex) || serverIndex < 1 || serverIndex > servers.Count)
|
||||||
|
{
|
||||||
|
LogMain.Error($"无效的服务器选择: {serverIndex}");
|
||||||
|
Console.WriteLine("无效选择");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string selectedServer = servers[serverIndex - 1];
|
||||||
|
LogMain.Info($"用户选择了服务器: {selectedServer}");
|
||||||
|
string serverPath = Path.Combine("profiles", selectedServer);
|
||||||
|
|
||||||
|
// 检查JRE配置
|
||||||
|
string jreConfigPath = "setup/jre.toml";
|
||||||
|
if (!File.Exists(jreConfigPath) || new FileInfo(jreConfigPath).Length == 0)
|
||||||
|
{
|
||||||
|
LogMain.Error("没有找到有效的JRE配置");
|
||||||
|
Console.WriteLine("没有下载的JRE,请先下载JRE");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解析JRE配置
|
||||||
|
var jreVersions = new Dictionary<string, Dictionary<string, string>>();
|
||||||
|
string currentVersion = string.Empty;
|
||||||
|
|
||||||
|
foreach (var line in File.ReadAllLines(jreConfigPath))
|
||||||
|
{
|
||||||
|
if (line.StartsWith("[") && line.EndsWith("]"))
|
||||||
|
{
|
||||||
|
var version = line.Trim('[', ']');
|
||||||
|
currentVersion = version ?? string.Empty;
|
||||||
|
if (currentVersion != null!)
|
||||||
|
{
|
||||||
|
jreVersions[currentVersion] = new Dictionary<string, string>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (line.Contains("=") && currentVersion != null)
|
||||||
|
{
|
||||||
|
var parts = line.Split('=');
|
||||||
|
string key = parts[0].Trim();
|
||||||
|
string value = parts[1].Trim().Trim('\'');
|
||||||
|
jreVersions[currentVersion][key] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jreVersions.Count == 0)
|
||||||
|
{
|
||||||
|
LogMain.Error("JRE配置文件为空");
|
||||||
|
Console.WriteLine("没有可用的JRE配置");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 选择JRE版本
|
||||||
|
Console.WriteLine("可用的JRE版本:");
|
||||||
|
int versionIndex = 1;
|
||||||
|
var versionList = new List<string>(jreVersions.Keys);
|
||||||
|
foreach (var version in versionList)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"{versionIndex}. {version}");
|
||||||
|
versionIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.Write("请选择JRE版本(输入编号): ");
|
||||||
|
if (!int.TryParse(Console.ReadLine(), out int selectedVersionIndex) ||
|
||||||
|
selectedVersionIndex < 1 || selectedVersionIndex > versionList.Count)
|
||||||
|
{
|
||||||
|
Console.WriteLine("无效选择");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string selectedVersion = versionList[selectedVersionIndex - 1];
|
||||||
|
LogMain.Info($"用户选择了JRE版本: {selectedVersion}");
|
||||||
|
var versionConfig = jreVersions[selectedVersion];
|
||||||
|
|
||||||
|
if (!versionConfig.ContainsKey("java_path") || !versionConfig.ContainsKey("javaw_path"))
|
||||||
|
{
|
||||||
|
LogMain.Error($"JRE配置不完整: {selectedVersion}");
|
||||||
|
Console.WriteLine("JRE配置不完整");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 选择java执行方式
|
||||||
|
Console.WriteLine("选择Java执行方式:");
|
||||||
|
Console.WriteLine("1. java.exe (控制台模式)");
|
||||||
|
Console.WriteLine("2. javaw.exe (无控制台模式)");
|
||||||
|
Console.Write("请选择: ");
|
||||||
|
string javaPath = Console.ReadLine() == "1"
|
||||||
|
? Path.GetFullPath(versionConfig["java_path"])
|
||||||
|
: Path.GetFullPath(versionConfig["javaw_path"]);
|
||||||
|
|
||||||
|
// 生成启动脚本(统一使用反斜杠)
|
||||||
|
string scriptContent = $"@echo off\r\n" +
|
||||||
|
$"cd /D \"{Path.GetFullPath(serverPath).Replace('/', '\\')}\"\r\n" +
|
||||||
|
$"\"{javaPath.Replace('/', '\\')}\" -jar server.jar\r\n" +
|
||||||
|
"pause";
|
||||||
|
|
||||||
|
string scriptPath = Path.Combine(serverPath, "start.bat");
|
||||||
|
File.WriteAllText(scriptPath, scriptContent);
|
||||||
|
LogMain.Info($"成功生成启动脚本: {scriptPath}");
|
||||||
|
Console.WriteLine($"已生成启动脚本: {scriptPath}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
71
Tools/server_management/ServerManager.cs
Normal file
71
Tools/server_management/ServerManager.cs
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using MCSJ.Tools.LogSystem;
|
||||||
|
|
||||||
|
namespace MCSJ.Tools.ServerManagement
|
||||||
|
{
|
||||||
|
public class ServerManager
|
||||||
|
{
|
||||||
|
private const int SERVER_MANAGEMENT_OPTION = 3;
|
||||||
|
|
||||||
|
public static void ShowMenu()
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
LogMain.Info("显示服务器管理菜单");
|
||||||
|
Console.WriteLine("\n=== 服务器管理 ===");
|
||||||
|
Console.WriteLine("1. 生成启动脚本");
|
||||||
|
Console.WriteLine("2. 启动服务器");
|
||||||
|
Console.WriteLine("3. 同意eula.txt");
|
||||||
|
Console.WriteLine("4. 返回主菜单");
|
||||||
|
Console.Write("请选择: ");
|
||||||
|
|
||||||
|
var choice = Console.ReadLine();
|
||||||
|
switch (choice)
|
||||||
|
{
|
||||||
|
case "1":
|
||||||
|
LogMain.Info("用户选择: 生成启动脚本");
|
||||||
|
ScriptGenerator.GenerateScript();
|
||||||
|
break;
|
||||||
|
case "2":
|
||||||
|
LogMain.Info("用户选择: 启动服务器");
|
||||||
|
ServerStarter.StartServer();
|
||||||
|
break;
|
||||||
|
case "3":
|
||||||
|
LogMain.Info("用户选择: 同意eula.txt");
|
||||||
|
EulaAgreer.AgreeEula();
|
||||||
|
break;
|
||||||
|
case "4":
|
||||||
|
LogMain.Info("用户选择: 返回主菜单");
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
LogMain.Warn($"无效菜单选项: {choice}");
|
||||||
|
Console.WriteLine("无效选项");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine("\n按任意键继续...");
|
||||||
|
Console.ReadKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<string> GetServerProfiles()
|
||||||
|
{
|
||||||
|
var profiles = new List<string>();
|
||||||
|
if (Directory.Exists("profiles"))
|
||||||
|
{
|
||||||
|
LogMain.Info("获取服务器存档列表");
|
||||||
|
foreach (var dir in Directory.GetDirectories("profiles"))
|
||||||
|
{
|
||||||
|
profiles.Add(Path.GetFileName(dir));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LogMain.Warn("服务器存档目录不存在");
|
||||||
|
}
|
||||||
|
return profiles;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
90
Tools/server_management/ServerStarter.cs
Normal file
90
Tools/server_management/ServerStarter.cs
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using MCSJ.Tools.LogSystem;
|
||||||
|
|
||||||
|
namespace MCSJ.Tools.ServerManagement
|
||||||
|
{
|
||||||
|
public static class ServerStarter
|
||||||
|
{
|
||||||
|
public static void StartServer()
|
||||||
|
{
|
||||||
|
LogMain.Info("开始启动服务器流程");
|
||||||
|
|
||||||
|
// 获取服务器列表
|
||||||
|
var servers = ServerManager.GetServerProfiles();
|
||||||
|
if (servers.Count == 0)
|
||||||
|
{
|
||||||
|
LogMain.Error("没有可用的服务器存档");
|
||||||
|
Console.WriteLine("没有可用的服务器存档");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 显示服务器列表供选择
|
||||||
|
LogMain.Info($"找到 {servers.Count} 个服务器存档");
|
||||||
|
Console.WriteLine("可用的服务器存档:");
|
||||||
|
for (int i = 0; i < servers.Count; i++)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"{i + 1}. {servers[i]}");
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.Write("请选择服务器(输入编号): ");
|
||||||
|
if (!int.TryParse(Console.ReadLine(), out int serverIndex) || serverIndex < 1 || serverIndex > servers.Count)
|
||||||
|
{
|
||||||
|
LogMain.Warn($"无效的服务器选择: {serverIndex}");
|
||||||
|
Console.WriteLine("无效选择");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string selectedServer = servers[serverIndex - 1];
|
||||||
|
LogMain.Info($"用户选择了服务器: {selectedServer}");
|
||||||
|
string serverPath = Path.Combine("profiles", selectedServer);
|
||||||
|
string batPath = Path.Combine(serverPath, "start.bat");
|
||||||
|
|
||||||
|
// 检查启动脚本是否存在
|
||||||
|
if (!File.Exists(batPath))
|
||||||
|
{
|
||||||
|
LogMain.Warn($"没有找到启动脚本: {batPath}");
|
||||||
|
Console.WriteLine("没有找到启动脚本,请先生成脚本");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 启动服务器
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string fullBatPath = Path.GetFullPath(batPath);
|
||||||
|
string fullServerPath = Path.GetFullPath(serverPath);
|
||||||
|
|
||||||
|
if (!File.Exists(fullBatPath))
|
||||||
|
{
|
||||||
|
LogMain.Error($"启动脚本不存在: {fullBatPath}");
|
||||||
|
Console.WriteLine($"启动脚本不存在: {fullBatPath}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessStartInfo startInfo = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = fullBatPath,
|
||||||
|
WorkingDirectory = fullServerPath,
|
||||||
|
UseShellExecute = true,
|
||||||
|
CreateNoWindow = false
|
||||||
|
};
|
||||||
|
|
||||||
|
LogMain.Info($"启动路径: {fullBatPath}");
|
||||||
|
LogMain.Info($"工作目录: {fullServerPath}");
|
||||||
|
Console.WriteLine($"启动路径: {fullBatPath}");
|
||||||
|
Console.WriteLine($"工作目录: {fullServerPath}");
|
||||||
|
|
||||||
|
Process.Start(startInfo);
|
||||||
|
LogMain.Info($"成功启动服务器: {selectedServer}");
|
||||||
|
Console.WriteLine($"已启动服务器: {selectedServer}");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogMain.Error($"启动服务器失败: {ex.Message}");
|
||||||
|
Console.WriteLine($"启动服务器失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -782,3 +782,57 @@
|
|||||||
1.3.1:https://launcher.mojang.com/v1/objects/82563ce498bfc1fc8a2cb5bf236f7da86a390646/server.jar
|
1.3.1:https://launcher.mojang.com/v1/objects/82563ce498bfc1fc8a2cb5bf236f7da86a390646/server.jar
|
||||||
1.3:https://launcher.mojang.com/v1/objects/cb21a9aaaf599c94dd7fa1b777b2f0cc37a776c7/server.jar
|
1.3:https://launcher.mojang.com/v1/objects/cb21a9aaaf599c94dd7fa1b777b2f0cc37a776c7/server.jar
|
||||||
1.2.5:https://launcher.mojang.com/v1/objects/d8321edc9470e56b8ad5c67bbd16beba25843336/server.jar
|
1.2.5:https://launcher.mojang.com/v1/objects/d8321edc9470e56b8ad5c67bbd16beba25843336/server.jar
|
||||||
|
paper-1.21.9-pre4:https://api.papermc.io/v2/projects/paper/versions/1.21.9-pre4/builds/22/downloads/paper-1.21.9-pre4-22.jar
|
||||||
|
paper-1.21.9-pre3:https://api.papermc.io/v2/projects/paper/versions/1.21.9-pre3/builds/12/downloads/paper-1.21.9-pre3-12.jar
|
||||||
|
paper-1.21.9-pre2:https://api.papermc.io/v2/projects/paper/versions/1.21.9-pre2/builds/7/downloads/paper-1.21.9-pre2-7.jar
|
||||||
|
paper-1.21.9:https://api.papermc.io/v2/projects/paper/versions/1.21.9/builds/59/downloads/paper-1.21.9-59.jar
|
||||||
|
paper-1.21.8:https://api.papermc.io/v2/projects/paper/versions/1.21.8/builds/60/downloads/paper-1.21.8-60.jar
|
||||||
|
paper-1.21.7:https://api.papermc.io/v2/projects/paper/versions/1.21.7/builds/32/downloads/paper-1.21.7-32.jar
|
||||||
|
paper-1.21.6:https://api.papermc.io/v2/projects/paper/versions/1.21.6/builds/48/downloads/paper-1.21.6-48.jar
|
||||||
|
paper-1.21.5:https://api.papermc.io/v2/projects/paper/versions/1.21.5/builds/114/downloads/paper-1.21.5-114.jar
|
||||||
|
paper-1.21.4:https://api.papermc.io/v2/projects/paper/versions/1.21.4/builds/232/downloads/paper-1.21.4-232.jar
|
||||||
|
paper-1.21.3:https://api.papermc.io/v2/projects/paper/versions/1.21.3/builds/83/downloads/paper-1.21.3-83.jar
|
||||||
|
paper-1.21.10:https://api.papermc.io/v2/projects/paper/versions/1.21.10/builds/115/downloads/paper-1.21.10-115.jar
|
||||||
|
paper-1.21.1:https://api.papermc.io/v2/projects/paper/versions/1.21.1/builds/133/downloads/paper-1.21.1-133.jar
|
||||||
|
paper-1.21:https://api.papermc.io/v2/projects/paper/versions/1.21/builds/130/downloads/paper-1.21-130.jar
|
||||||
|
paper-1.20.6:https://api.papermc.io/v2/projects/paper/versions/1.20.6/builds/151/downloads/paper-1.20.6-151.jar
|
||||||
|
paper-1.20.5:https://api.papermc.io/v2/projects/paper/versions/1.20.5/builds/22/downloads/paper-1.20.5-22.jar
|
||||||
|
paper-1.20.4:https://api.papermc.io/v2/projects/paper/versions/1.20.4/builds/499/downloads/paper-1.20.4-499.jar
|
||||||
|
paper-1.20.2:https://api.papermc.io/v2/projects/paper/versions/1.20.2/builds/318/downloads/paper-1.20.2-318.jar
|
||||||
|
paper-1.20.1:https://api.papermc.io/v2/projects/paper/versions/1.20.1/builds/196/downloads/paper-1.20.1-196.jar
|
||||||
|
paper-1.20:https://api.papermc.io/v2/projects/paper/versions/1.20/builds/17/downloads/paper-1.20-17.jar
|
||||||
|
paper-1.19.4:https://api.papermc.io/v2/projects/paper/versions/1.19.4/builds/550/downloads/paper-1.19.4-550.jar
|
||||||
|
paper-1.19.3:https://api.papermc.io/v2/projects/paper/versions/1.19.3/builds/448/downloads/paper-1.19.3-448.jar
|
||||||
|
paper-1.19.2:https://api.papermc.io/v2/projects/paper/versions/1.19.2/builds/307/downloads/paper-1.19.2-307.jar
|
||||||
|
paper-1.19.1:https://api.papermc.io/v2/projects/paper/versions/1.19.1/builds/111/downloads/paper-1.19.1-111.jar
|
||||||
|
paper-1.19:https://api.papermc.io/v2/projects/paper/versions/1.19/builds/81/downloads/paper-1.19-81.jar
|
||||||
|
paper-1.18.2:https://api.papermc.io/v2/projects/paper/versions/1.18.2/builds/388/downloads/paper-1.18.2-388.jar
|
||||||
|
paper-1.18.1:https://api.papermc.io/v2/projects/paper/versions/1.18.1/builds/216/downloads/paper-1.18.1-216.jar
|
||||||
|
paper-1.18:https://api.papermc.io/v2/projects/paper/versions/1.18/builds/66/downloads/paper-1.18-66.jar
|
||||||
|
paper-1.17.1:https://api.papermc.io/v2/projects/paper/versions/1.17.1/builds/411/downloads/paper-1.17.1-411.jar
|
||||||
|
paper-1.17:https://api.papermc.io/v2/projects/paper/versions/1.17/builds/79/downloads/paper-1.17-79.jar
|
||||||
|
paper-1.16.5:https://api.papermc.io/v2/projects/paper/versions/1.16.5/builds/794/downloads/paper-1.16.5-794.jar
|
||||||
|
paper-1.16.4:https://api.papermc.io/v2/projects/paper/versions/1.16.4/builds/416/downloads/paper-1.16.4-416.jar
|
||||||
|
paper-1.16.3:https://api.papermc.io/v2/projects/paper/versions/1.16.3/builds/253/downloads/paper-1.16.3-253.jar
|
||||||
|
paper-1.16.2:https://api.papermc.io/v2/projects/paper/versions/1.16.2/builds/189/downloads/paper-1.16.2-189.jar
|
||||||
|
paper-1.16.1:https://api.papermc.io/v2/projects/paper/versions/1.16.1/builds/138/downloads/paper-1.16.1-138.jar
|
||||||
|
paper-1.15.2:https://api.papermc.io/v2/projects/paper/versions/1.15.2/builds/393/downloads/paper-1.15.2-393.jar
|
||||||
|
paper-1.15.1:https://api.papermc.io/v2/projects/paper/versions/1.15.1/builds/62/downloads/paper-1.15.1-62.jar
|
||||||
|
paper-1.15:https://api.papermc.io/v2/projects/paper/versions/1.15/builds/21/downloads/paper-1.15-21.jar
|
||||||
|
paper-1.14.4:https://api.papermc.io/v2/projects/paper/versions/1.14.4/builds/245/downloads/paper-1.14.4-245.jar
|
||||||
|
paper-1.14.3:https://api.papermc.io/v2/projects/paper/versions/1.14.3/builds/134/downloads/paper-1.14.3-134.jar
|
||||||
|
paper-1.14.2:https://api.papermc.io/v2/projects/paper/versions/1.14.2/builds/107/downloads/paper-1.14.2-107.jar
|
||||||
|
paper-1.14.1:https://api.papermc.io/v2/projects/paper/versions/1.14.1/builds/50/downloads/paper-1.14.1-50.jar
|
||||||
|
paper-1.14:https://api.papermc.io/v2/projects/paper/versions/1.14/builds/17/downloads/paper-1.14-17.jar
|
||||||
|
paper-1.13.2:https://api.papermc.io/v2/projects/paper/versions/1.13.2/builds/657/downloads/paper-1.13.2-657.jar
|
||||||
|
paper-1.13.1:https://api.papermc.io/v2/projects/paper/versions/1.13.1/builds/386/downloads/paper-1.13.1-386.jar
|
||||||
|
paper-1.13-pre7:https://api.papermc.io/v2/projects/paper/versions/1.13-pre7/builds/12/downloads/paper-1.13-pre7-12.jar
|
||||||
|
paper-1.13:https://api.papermc.io/v2/projects/paper/versions/1.13/builds/173/downloads/paper-1.13-173.jar
|
||||||
|
paper-1.12.2:https://api.papermc.io/v2/projects/paper/versions/1.12.2/builds/1620/downloads/paper-1.12.2-1620.jar
|
||||||
|
paper-1.12.1:https://api.papermc.io/v2/projects/paper/versions/1.12.1/builds/1204/downloads/paper-1.12.1-1204.jar
|
||||||
|
paper-1.12:https://api.papermc.io/v2/projects/paper/versions/1.12/builds/1169/downloads/paper-1.12-1169.jar
|
||||||
|
paper-1.11.2:https://api.papermc.io/v2/projects/paper/versions/1.11.2/builds/1106/downloads/paper-1.11.2-1106.jar
|
||||||
|
paper-1.10.2:https://api.papermc.io/v2/projects/paper/versions/1.10.2/builds/918/downloads/paper-1.10.2-918.jar
|
||||||
|
paper-1.9.4:https://api.papermc.io/v2/projects/paper/versions/1.9.4/builds/775/downloads/paper-1.9.4-775.jar
|
||||||
|
paper-1.8.8:https://api.papermc.io/v2/projects/paper/versions/1.8.8/builds/445/downloads/paper-1.8.8-445.jar
|
||||||
|
paper-1.7.10:https://api.papermc.io/v2/projects/paper/versions/1.7.10/builds/2025/downloads/paper-1.7.10-2025.jar
|
||||||
Reference in New Issue
Block a user