WikiEntry.vb 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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 i As Integer = 0
  41. Dim DataLines As List(Of String) = DirectCast(My.Resources.ResourceManager.GetObject("ModData"), String).SplitLines().ToList()
  42. Dim Ranks = DataLines.Last.Split("|")
  43. DataLines.RemoveAt(DataLines.Count - 1)
  44. For Each Line In DataLines
  45. i += 1
  46. If Line = "" Then Continue For
  47. For Each EntryData As String In Line.Split("¨")
  48. Dim Entry = New WikiEntry
  49. Dim Splited = EntryData.Split("|")
  50. If Splited(0).StartsWithF("@") Then
  51. Entry.CurseForgeSlug = Nothing
  52. Entry.ModrinthSlug = Splited(0).Replace("@", "")
  53. ElseIf Splited(0).EndsWithF("@") Then
  54. Entry.CurseForgeSlug = Splited(0).TrimEnd("@")
  55. Entry.ModrinthSlug = Entry.CurseForgeSlug
  56. ElseIf Splited(0).Contains("@") Then
  57. Entry.CurseForgeSlug = Splited(0).Split("@")(0)
  58. Entry.ModrinthSlug = Splited(0).Split("@")(1)
  59. Else
  60. Entry.CurseForgeSlug = Splited(0)
  61. Entry.ModrinthSlug = Nothing
  62. End If
  63. Entry.Id = i
  64. Entry.Popularity = Val(Ranks(i - 1))
  65. If Splited.Count >= 2 Then
  66. Entry.ChineseName = Splited.Last
  67. If Entry.ChineseName.Contains("*") Then '处理 *
  68. Entry.ChineseName = Entry.ChineseName.Replace("*",
  69. $" ({If(Entry.CurseForgeSlug, Entry.ModrinthSlug).Replace("-", " ").Capitalize})")
  70. End If
  71. End If
  72. Cache.Add(Entry)
  73. Next
  74. Next
  75. Return Cache
  76. End Get
  77. End Property
  78. End Class