MCPcopy Create free account
hub / github.com/MultiMC/Launcher / GetMinecraftJarVersion

Function GetMinecraftJarVersion

libraries/classparser/src/classparser.cpp:27–82  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

25{
26
27QString GetMinecraftJarVersion(QString jarName)
28{
29 QString version;
30
31 // check if minecraft.jar exists
32 QFile jar(jarName);
33 if (!jar.exists())
34 return version;
35
36 // open minecraft.jar
37 QuaZip zip(&jar);
38 if (!zip.open(QuaZip::mdUnzip))
39 return version;
40
41 // open Minecraft.class
42 zip.setCurrentFile("net/minecraft/client/Minecraft.class", QuaZip::csSensitive);
43 QuaZipFile Minecraft(&zip);
44 if (!Minecraft.open(QuaZipFile::ReadOnly))
45 return version;
46
47 // read Minecraft.class
48 qint64 size = Minecraft.size();
49 char *classfile = new char[size];
50 Minecraft.read(classfile, size);
51
52 // parse Minecraft.class
53 try
54 {
55 char *temp = classfile;
56 java::classfile MinecraftClass(temp, size);
57 java::constant_pool constants = MinecraftClass.constants;
58 for (java::constant_pool::container_type::const_iterator iter = constants.begin();
59 iter != constants.end(); iter++)
60 {
61 const java::constant &constant = *iter;
62 if (constant.type != java::constant_type_t::j_string_data)
63 continue;
64 const std::string &str = constant.str_data;
65 qDebug() << QString::fromStdString(str);
66 if (str.compare(0, 20, "Minecraft Minecraft ") == 0)
67 {
68 version = str.substr(20).data();
69 break;
70 }
71 }
72 }
73 catch (const java::classfile_exception &) { }
74
75 // clean up
76 delete[] classfile;
77 Minecraft.close();
78 zip.close();
79 jar.close();
80
81 return version;
82}
83}

Callers 1

copyFinishedMethod · 0.85

Calls 8

existsMethod · 0.80
openMethod · 0.80
compareMethod · 0.80
sizeMethod · 0.45
readMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected