private List <EntryTreeNode> PopulateForge(EntryTreeNode node) { Forge forge = node.Forge; if (forge == null) { return(null); } // read if only the forge has not been read if (!forge.IsFullyRead()) { if (forge.GetEntryCount() > 20000) { string entries = string.Format("{0:n0}", forge.GetEntryCount()); if (MessageBox.Show($"This .forge contains more than 20,000 entries ({entries} exactly). Blacksmith may freeze while loading or it may not load them at all.\nDo this at your own risk.", "Warning", MessageBoxButtons.YesNo) == DialogResult.Yes) { forge.Read(); } else { return(null); } } else { forge.Read(); } node.Forge = forge; // set again for assurance } // populate the forge tree with its entries List <EntryTreeNode> entryNodes = new List <EntryTreeNode>(); foreach (Forge.FileEntry entry in forge.FileEntries) { EntryTreeNode n = new EntryTreeNode { Game = node.Game, Offset = entry.IndexTable.OffsetToRawDataTable, Path = Path.Combine(node.Path, entry.NameTable.Name), Size = entry.IndexTable.RawDataSize, Text = entry.NameTable.Name, Type = EntryTreeNodeType.ENTRY }; n.Nodes.Add(new EntryTreeNode("")); entryNodes.Add(n); } return(entryNodes); }