4 Commits

Author SHA1 Message Date
zs-yg
8c5d3a8219 解决警告问题 2025-11-23 09:50:39 +08:00
zs-yg
060edfb873 添加日志 2025-11-23 09:44:24 +08:00
zs-yg
397002f2e8 添加管理服务器功能 2025-11-23 09:24:49 +08:00
zs-yg
9e5e290da5 删除镜像站 2025-11-22 20:36:32 +08:00
6 changed files with 379 additions and 7 deletions

View File

@@ -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:

View File

@@ -37,8 +37,6 @@ MCSJ 是一个开源的 Minecraft 服务器管理工具,旨在为用户提供
## 官方镜像仓库 ## 官方镜像仓库
[gitlab镜像仓库](https://gitlab.com/zs-yg/MCSJ)
[gitee镜像仓库](https://gitee.com/chr_super/mcsj) [gitee镜像仓库](https://gitee.com/chr_super/mcsj)
## 关于 ## 关于

View 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格式");
}
}
}
}

View 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}");
}
}
}

View 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;
}
}
}

View 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}");
}
}
}
}