public static void LoadResources(List <string> packFilenames) { Log.Info("Resource load requested"); UnloadResources(); foreach (var packFilename in packFilenames) { try { var pack = new ResourcePack(Path.Combine("resourcepacks", packFilename)); Log.Info($"Adding resource pack {packFilename}"); Log.Info($" {pack.Description.RawText}"); LoadedPacks.Add(pack); foreach (var lang in pack.AdditionalLanguages) { Language.AddLanguage(lang, overwrite: false); } } catch (Exception e) { Log.Error($"Couldn't parse resource pack {packFilename}: {e.Message}"); throw; } } foreach (var manager in Managers) { manager.LoadResources(); } }
public void LoadTexture(NamespacedId id) { if (LoadedTextures.ContainsKey(id)) { Log.Info($"Texture {id} is already loaded. Reloading..."); LoadedTextures[id].Dispose(); } Log.Info($"Loading texture {id}..."); try { var data = ImageLoader.Load(ResolveTexturePath(id)); if (data == null) { throw new Exception("Not found"); } LoadedTextures[id] = Engine.Renderer.CreateTexture( data.Value.Data, data.Value.Width, data.Value.Height); } catch (Exception e) { Log.Error($"Couldn't load texture {id}"); Log.Error($"{e.GetType().Name}: {e.Message}"); Log.Error($"{e.StackTrace}"); LoadedTextures[id] = ErrorTexture; #if DEBUG throw; #endif } }
public static void ReportInfo() { Log.Info($"Renderer info:"); Log.Info($" {GL.GetString(StringName.Vendor)}"); Log.Info($" {GL.GetString(StringName.Renderer)}"); Log.Info($" Max texture units: {GL.GetInteger(GetPName.MaxTextureImageUnits)}"); ReportedInfo = true; }
public void LoadStrings() { UnloadStrings(); Log.Info($"Loading translation strings for {FormattedName}"); var languageFilePath = $"assets/minecraft/lang/{Code}.json"; foreach (var pack in ResourceManager.LoadedPacks) { var reader = pack.PackReader; if (!reader.FileExists(languageFilePath)) { continue; } var languageData = JObject.Parse(reader.ReadTextFile(languageFilePath)); if (languageData.Type != JTokenType.Object) { throw new FormatException($"Invalid language file for code {Code} for resource pack {pack.Id}"); } foreach (var kv in languageData.Value <JObject>()) { if (Strings.ContainsKey(kv.Key)) { continue; } Strings[kv.Key] = kv.Value.Value <string>(); } } LoadedStrings = true; }
public void Dispose() { log.Info("Disposing textures..."); foreach (var texture in Textures) { texture.Dispose(); } Textures.Clear(); }
public static void Start() { Thread.CurrentThread.Name = "MainThread"; Logger.Init(); Logger.AddLogOutput <ConsoleLogOutput>(); Log.Info($"Starting Natmc {Version}"); Log.Info($"Target Minecraft version {McVersion}"); Filesystem.Init(); SettingsManager.Init(); InputManager.Init(); Log.Info($"Creating main window"); MainWindow = new StatedWindow("Natmc", new Vector2i(800, 600), new LoaderState()); MainWindow.Run(); }
//public Thread LoadingThread { get; protected set; } public override void OnEnable() { Log.Info($"Starting loader thread"); //LoadingThread = new Thread(() => //{ // //}) { Name = "LoadingThread" }; //LoadingThread.Start(); }
public static void Init() { GameRoot = "."; Log.Info($"Game root: {Path.GetFullPath(GameRoot)}"); }
public ResourcePack(string path) { Id = path; PackReader = CreatePackReader(path); Log.Info($"Opening resource pack `{path}`, pack reader type {PackReader.GetType().Name}"); if (!PackReader.FileExists("pack.mcmeta")) { throw new FormatException("pack.mcmeta doesn't exist"); } var packMetaRoot = JObject.Parse(PackReader.ReadTextFile("pack.mcmeta")); var packMetaScheme = new ObjectSchema { ["pack"] = new ObjectSchema { ["description"] = "string|object", ["pack_format"] = "number", }, ["language"] = new ObjectSchema() }; JsonValidator.ValidateWithException(packMetaRoot, packMetaScheme, "Invalid pack.mcmeta"); var packMeta = packMetaRoot.Value <JObject>("pack"); PackFormat = packMeta.Value <int>("pack_format"); var descriptionToken = packMeta["description"]; if (descriptionToken.Type == JTokenType.String) { Description = new StringComponent(descriptionToken.Value <string>()); } else { Description = TextComponent.FromJsonObject( packMeta["description"].Value <JObject>(), out string parseError); if (Description == null) { throw new FormatException($"Invalid pack.mcmeta - invalid description - {parseError}"); } } AdditionalLanguages = new List <Language>(); if (packMetaRoot.ContainsKey("language")) { var languagesTag = packMetaRoot["language"]; if (languagesTag.Type != JTokenType.Object) { throw new FormatException("Invalid pack.mcmeta - invalid type of language"); } foreach (var kv in languagesTag.Value <JObject>()) { var value = kv.Value.Value <JObject>(); var languageSchema = new ObjectSchema { ["name"] = "string", ["region"] = "string" }; JsonValidator.ValidateWithException(value, languageSchema, $"Invalid language {kv.Key}"); var language = new Language { Code = kv.Key, Name = value["name"].ToString(), Region = value["region"].ToString(), IsBidirectional = value.ContainsKey("bidirectional") && value.Value <bool>("bidirectional"), }; AdditionalLanguages.Add(language); } } }