public static BlockDefinition FromXml(XElement e) { int id = int.Parse(e.Attribute("id").Value.Substring(2), NumberStyles.HexNumber); string fname = e.Attribute("name")?.Value ?? $"Unknown block id={id}"; string dname = e.Attribute("uname")?.Value ?? $"minecraft:unknown_block_{id}"; string[] dataNames = dname.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); string color = e.Attribute("color")?.Value ?? "0xff00ff"; var parsedColor = ColorRgb.From0x(color); var variants = e.Elements("blockvariant").Select(el => BlockVariantDefinition.FromXml(el, dname, parsedColor)).ToList(); return(new BlockDefinition(id, fname, dataNames, parsedColor, variants)); }
public static BlockVariantDefinition FromXml(XElement e, string parentBlockDataName, ColorRgb parentBlockColor) { int data = int.Parse(e.Attribute("blockdata").Value.Substring(2), NumberStyles.HexNumber); string customColor = e.Attribute("color")?.Value; ColorRgb resultColor; if (customColor != null) { resultColor = ColorRgb.From0x(customColor); } else { resultColor = parentBlockColor.Add(data); } string fname = e.Attribute("name")?.Value ?? $"Unknown variant ({parentBlockDataName} variant {data})"; return(new BlockVariantDefinition(data, fname, resultColor, customColor == null)); }