diff --git a/MinecraftClient/Scripting/DataPath.cs b/MinecraftClient/Scripting/DataPath.cs new file mode 100644 index 00000000..fdefae5a --- /dev/null +++ b/MinecraftClient/Scripting/DataPath.cs @@ -0,0 +1,55 @@ +using System; +using System.IO; + +namespace MinecraftClient.Scripting +{ + public static class DataPath + { + private static string? relativePath; + private static string? absolutePath; + + public enum PathType + { + Relative, + Absolute + } + + /// + /// 初始化数据目录(修正版) + /// Initialize the data directory (Revised version) + /// 需要手动传入脚本文件名(不含.cs扩展名) + /// Requires manually passing the script file name (without the .cs extension) + /// + /// 脚本文件名(不含扩展名)Script file name (without extension) + public static void Init(string scriptName) + { + if (string.IsNullOrEmpty(scriptName)) + throw new ArgumentNullException(nameof(scriptName), "Script name cannot be null or empty(脚本名称不能为空)"); + + // 计算路径 Calculate the path + relativePath = scriptName; + absolutePath = Path.Combine(AppContext.BaseDirectory, scriptName); + + // 创建目录 Create the directory + if (!Directory.Exists(absolutePath)) + Directory.CreateDirectory(absolutePath); + } + + /// + /// 获取路径 + /// Get the path + /// + public static string Get(PathType pathType = PathType.Relative) + { + if (string.IsNullOrEmpty(relativePath) || string.IsNullOrEmpty(absolutePath)) + throw new InvalidOperationException("Please call DataPath.Init() first to initialize(请先调用DataPath.Init()初始化)"); + + return pathType switch + { + PathType.Relative => relativePath, + PathType.Absolute => absolutePath, + _ => throw new ArgumentOutOfRangeException(nameof(pathType)) + }; + } + } +}