Class: MojangInput

Inherits:
Object
  • Object
show all
Defined in:
lib/wonko_the_sane/input/mojang_input.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(artifact) ⇒ MojangInput

Returns a new instance of MojangInput.



92
93
94
# File 'lib/wonko_the_sane/input/mojang_input.rb', line 92

def initialize(artifact)
  @artifact = artifact
end

Class Method Details

.sanetize_mojang_library(object) ⇒ Object

reads a general mojang-style library



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/wonko_the_sane/input/mojang_input.rb', line 44

def self.sanetize_mojang_library(object)
  lib = if object.key? :natives then VersionLibraryNative.new else VersionLibrary.new end
  lib.name = object[:name]
  lib.mavenBaseUrl = object.key?(:url) ? object[:url] : 'https://libraries.minecraft.net/'

  lib.rules = object[:rules].map do |obj| Rule.from_json obj end if object[:rules]

  libs = []
  if not lib.is_a? VersionLibraryNative
    libs << lib
  else
    nativeIds = {}
    if object.key? :natives
      natives = object[:natives]
      if natives.key? :windows
        nativeIds['win32'] = natives[:windows].gsub "${arch}", '32'
        nativeIds['win64'] = natives[:windows].gsub "${arch}", '64'
      end
      if natives.key? :linux
        nativeIds['lin32'] = natives[:linux].gsub "${arch}", '32'
        nativeIds['lin64'] = natives[:linux].gsub "${arch}", '64'
      end
      if natives.key? :osx
        nativeIds['osx64'] = natives[:osx].gsub "${arch}", '64'
      end
    end

    allowedPlatformsForRules(lib.rules).uniq.each do |platform|
      if not nativeIds.key? platform
        next
      end

      native = lib.clone
      native.rules = [
        ImplicitRule.new(:disallow),
        OsRule.new(:allow,
        {'win32': :windows, 'win64': :windows, 'lin32': :linux, 'lin64': :linux, 'osx64': :osx}[platform.to_sym],
        nil,
        {'win32': '32', 'win64': '64', 'lin32': '32', 'lin64': '64', 'osx64': '64'}[platform.to_sym])
      ]
      native.url = native.url.sub '.jar', ('-' + nativeIds[platform] + '.jar')
      libs << native
    end
  end

  return libs
end

Instance Method Details

#parse(data) ⇒ Object



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/wonko_the_sane/input/mojang_input.rb', line 96

def parse(data)
  object = data.class == Hash ? data : JSON.parse(data, symbolize_names: true)

  if object[:minimumLauncherVersion] and object[:minimumLauncherVersion] > 14
    # TODO log error
    return []
  end

  file = WonkoVersion.new

  file.uid = @artifact
  file.version = object[:id]
  file.time = object[:releaseTime]
  file.type = object[:type]
  file.client.mainClass = object[:mainClass]
  file.client.assets = object[:assets]
  file.client.minecraftArguments = object[:minecraftArguments]
  file.client.jarModTarget = "net.minecraft:minecraft:#{file.version}"
  file.client.downloads = object[:libraries].map do |obj|
    MojangInput.sanetize_mojang_library obj
  end.flatten 1
  main_lib = VersionLibrary.new
  main_lib.name = "net.minecraft:minecraft:#{file.version}"
  main_lib.url = 'http://s3.amazonaws.com/Minecraft.Download/versions/' + file.version + '/' + file.version + '.jar'
  file.client.downloads << main_lib
  file.client.launchMethod = 'minecraft'

  server_lib = VersionLibrary.new
  server_lib.name = "net.minecraft:minecraft_server:#{file.version}"
  server_lib.url = 'http://s3.amazonaws.com/Minecraft.Download/versions/' + file.version + '/minecraft_server.' + file.version + '.jar'
  file.server.downloads << server_lib
  file.server.jarModTarget = "net.minecraft:minecraft_server:#{file.version}"
  file.server.launchMethod = 'java.jar'

  file.client.folders['minecraft/screenshots'] = ['general.screenshots']
  file.client.folders['minecraft/resourcepackks'] = ['mc.resourcepacks'] if file.time >= 1372430921
  file.client.folders['minecraft/texturepacks'] = ['mc.texturepacks'] if file.time < 1372430921
  file.client.folders['minecraft/saves'] = ['mc.saves.anvil'] if file.time >= 1330552800
  file.client.folders['minecraft/saves'] = ['mc.saves.region'] if file.time >= 1298325600 and file.time < 1330552800
  file.client.folders['minecraft/saves'] = ['mc.saves.infdev'] if file.time >= 1291327200 and file.time < 1298325600

  return BaseSanitizer.sanitize file, MojangSplitLWJGLSanitizer
end