Example #1
0
        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();
            }
        }
Example #2
0
        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
            }
        }
Example #3
0
 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;
 }
Example #4
0
        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;
        }
Example #5
0
 public void Dispose()
 {
     log.Info("Disposing textures...");
     foreach (var texture in Textures)
     {
         texture.Dispose();
     }
     Textures.Clear();
 }
Example #6
0
        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();
        }
Example #7
0
        //public Thread LoadingThread { get; protected set; }

        public override void OnEnable()
        {
            Log.Info($"Starting loader thread");
            //LoadingThread = new Thread(() =>
            //{
            //
            //}) { Name = "LoadingThread" };
            //LoadingThread.Start();
        }
Example #8
0
 public static void Init()
 {
     GameRoot = ".";
     Log.Info($"Game root: {Path.GetFullPath(GameRoot)}");
 }
Example #9
0
        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);
                }
            }
        }