WikiEntry.vb 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. '获取所有条目:WikiEntry.All
  2. ''' <summary>
  3. ''' MC 百科条目。
  4. ''' </summary>
  5. Public Class WikiEntry
  6. '属性
  7. ''' <summary>
  8. ''' 在 MC 百科中的对应 ID。
  9. ''' </summary>
  10. Public Id As Integer
  11. ''' <summary>
  12. ''' 中文译名。空字符串代表没有翻译。
  13. ''' </summary>
  14. Public ChineseName As String = ""
  15. ''' <summary>
  16. ''' CurseForge Slug(例如 advanced-solar-panels)。
  17. ''' </summary>
  18. Public CurseForgeSlug As String = Nothing
  19. ''' <summary>
  20. ''' Modrinth Slug(例如 advanced-solar-panels)。
  21. ''' </summary>
  22. Public ModrinthSlug As String = Nothing
  23. ''' <summary>
  24. ''' MC 百科的浏览量逆序排行,1 代表浏览量最低。
  25. ''' </summary>
  26. Public Popularity As Integer
  27. Public Overrides Function ToString() As String
  28. Return If(CurseForgeSlug, "") & "&" & If(ModrinthSlug, "") & "|" & Id & "|" & ChineseName & ", Rank " & Popularity
  29. End Function
  30. '读取
  31. ''' <summary>
  32. ''' 内置数据库中的所有 MC 百科条目。
  33. ''' </summary>
  34. Public Shared ReadOnly Property All As List(Of WikiEntry)
  35. Get
  36. Static Cache As List(Of WikiEntry) = Nothing
  37. If Cache IsNot Nothing Then Return Cache
  38. '实际加载
  39. Cache = New List(Of WikiEntry)
  40. Dim Data As String
  41. Using Archive As New ZipArchive(New MemoryStream(GetResources("ModData")), ZipArchiveMode.Read)
  42. Data = ReadFile(Archive.GetEntry("moddata.txt").Open(), Encoding.UTF8)
  43. End Using
  44. Dim i As Integer = 0
  45. For Each Line In Data.ReplaceLineEndings(vbLf).Split(vbLf)
  46. i += 1
  47. If Line = "" Then Continue For
  48. For Each EntryData As String In Line.Split("¨")
  49. Dim Entry = New WikiEntry
  50. Dim Splited = EntryData.Split("|")
  51. Entry.Popularity = Val(Splited(0))
  52. If Splited(1).StartsWithF("@") Then
  53. Entry.CurseForgeSlug = Nothing
  54. Entry.ModrinthSlug = Splited(1).Replace("@", "")
  55. ElseIf Splited(1).EndsWithF("@") Then
  56. Entry.CurseForgeSlug = Splited(1).TrimEnd("@")
  57. Entry.ModrinthSlug = Entry.CurseForgeSlug
  58. ElseIf Splited(1).Contains("@") Then
  59. Entry.CurseForgeSlug = Splited(1).Split("@")(0)
  60. Entry.ModrinthSlug = Splited(1).Split("@")(1)
  61. Else
  62. Entry.CurseForgeSlug = Splited(1)
  63. Entry.ModrinthSlug = Nothing
  64. End If
  65. Entry.Id = i
  66. If Splited.Count >= 3 Then
  67. Entry.ChineseName = Splited.Last
  68. If Entry.ChineseName.Contains("*") Then '处理 *
  69. Entry.ChineseName = Entry.ChineseName.Replace("*",
  70. $" ({If(Entry.CurseForgeSlug, Entry.ModrinthSlug).Replace("-", " ").Capitalize})")
  71. End If
  72. End If
  73. Cache.Add(Entry)
  74. Next
  75. Next
  76. Return Cache
  77. End Get
  78. End Property
  79. End Class