Skip to content

Commit d27d405

Browse files
committed
Server download updater. Manifest v2 gen
1 parent 8e1df14 commit d27d405

3 files changed

Lines changed: 132 additions & 98 deletions

File tree

src/main/java/lbq/jsongen/Generator.java

Lines changed: 110 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
import java.time.Instant;
1313
import java.util.ArrayList;
1414
import java.util.Arrays;
15+
import java.util.HashMap;
1516
import java.util.List;
17+
import java.util.Map;
1618
import java.util.stream.Collectors;
1719

1820
import org.json.JSONArray;
@@ -58,22 +60,33 @@ public void generate() throws IOException {
5860
}
5961
if(generateManifest) {
6062
generateManifest(false);
63+
generateManifest(true);
6164
}
6265
}
6366

6467
public void update() throws IOException {
68+
Map<String, String> versionServers = new HashMap<>();
69+
JSONArray versionsIndex = parseJSONArray(ClassLoader.getSystemResourceAsStream("versions.json"));
70+
for(int i = 0; i < versionsIndex.length(); i++) {
71+
JSONObject ver = versionsIndex.getJSONObject(i);
72+
if(ver.has("urlServer")) {
73+
versionServers.put(ver.getString("id"), ver.getString("urlServer"));
74+
}
75+
}
76+
JSONObject preset = getPresetJSON();
77+
JSONArray libraries = getPresetLibraries(preset);
78+
JSONArray librariesNoSoundLib = removePaulscode(libraries);
6579
for(Path p : collectJSONs(basePath)) {
6680
try {
6781
JSONObject json = parseJSON(p);
68-
JSONObject preset = getPresetJSON();
69-
JSONArray libraries = getPresetLibraries(preset);
70-
JSONArray librariesNoSoundLib = removePaulscode(libraries);
7182
boolean updated = false;
72-
if(json.getString("assets").equals("empty")) {
83+
Instant time = getTime(json.getString("releaseTime"));
84+
String id = json.getString("id");
85+
if(!hasAssetIndex(time, id)) {
7386
json.put("assetIndex", preset.getJSONObject("assetIndex"));
87+
json.put("assets", preset.getString("assets"));
7488
}
7589
JSONArray verLibs = json.getJSONArray("libraries");
76-
Instant time = getTime(json.getString("releaseTime"));
7790
if(time.compareTo(PAULSCODE_TIME) > 0) {
7891
for(int i2 = 0; i2 < libraries.length(); i2++) {
7992
updated |= replaceLibrary(verLibs, libraries.getJSONObject(i2));
@@ -85,7 +98,7 @@ public void update() throws IOException {
8598
}
8699
String args = json.getString("minecraftArguments");
87100
Instant releaseTimeInstant = getTime(json.getString("releaseTime"));
88-
int port = getPort(releaseTimeInstant);
101+
int port = getPort(releaseTimeInstant, id);
89102
if(port != -1) {
90103
if(args.contains("--resourcesProxyPort")) {
91104
String old = args;
@@ -96,7 +109,6 @@ public void update() throws IOException {
96109
updated = true;
97110
}
98111
}
99-
String id = json.getString("id");
100112
String skin = getSkin(releaseTimeInstant, id);
101113
if(skin != null) {
102114
if(args.contains("--skinProxy")) {
@@ -108,6 +120,11 @@ public void update() throws IOException {
108120
updated = true;
109121
}
110122
}
123+
JSONObject dls = json.getJSONObject("downloads");
124+
if(!dls.has("server") && versionServers.containsKey(id)) {
125+
updated = true;
126+
dls.put("server", getLibraryArtifact(versionServers.get(id)));
127+
}
111128
json.put("minecraftArguments", args);
112129
if(updated) {
113130
System.out.println("Modified version: " + id);
@@ -165,92 +182,97 @@ public void generateJSONs() throws IOException {
165182
Files.createDirectories(basePath);
166183
List<String> savedJSONs = new ArrayList<>();
167184
if(!skipManifest) {
168-
JSONArray versions = manifest.getJSONArray("versions");
169-
for(int i = 0; i < versions.length(); i++) {
170-
JSONObject ver = versions.getJSONObject(i);
171-
URL versionUrl = new URL(ver.getString("url"));
172-
String id = ver.getString("id");
173-
if(savedJSONs.contains(id)) {
174-
continue;
175-
}
176-
System.out.println(id);
177-
JSONObject version = parseJSON(versionUrl.openStream());
178-
if(!version.has("minecraftArguments")) {
179-
continue;
180-
}
181-
JSONArray verLibs = version.getJSONArray("libraries");
182-
boolean hasWrapper = false;
183-
for(int i2 = 0; i2 < verLibs.length(); i2++) {
184-
String[] lib = verLibs.getJSONObject(i2).getString("name").split(":");
185-
if(lib[0].equals("net.minecraft") && lib[1].equals("launchwrapper")) {
186-
hasWrapper = true;
185+
try {
186+
JSONArray versions = manifest.getJSONArray("versions");
187+
for(int i = 0; i < versions.length(); i++) {
188+
JSONObject ver = versions.getJSONObject(i);
189+
URL versionUrl = new URL(ver.getString("url"));
190+
String id = ver.getString("id");
191+
if(savedJSONs.contains(id)) {
192+
continue;
187193
}
188-
}
189-
if(hasWrapper) {
190-
removeLibrary(verLibs, "org.ow2.asm", "asm-all");
191-
removeLibrary(verLibs, "net.sf.jopt-simple", "jopt-simple");
192-
removeLibrary(verLibs, "net.minecraft", "launchwrapper");
193-
}
194-
Instant time = getTime(version.getString("releaseTime"));
195-
if(time.compareTo(PAULSCODE_TIME) > 0) {
196-
for(int i2 = 0; i2 < libraries.length(); i2++) {
197-
replaceLibrary(verLibs, libraries.getJSONObject(i2));
194+
System.out.println(id);
195+
JSONObject version = parseJSON(versionUrl.openStream());
196+
if(!version.has("minecraftArguments")) {
197+
continue;
198198
}
199-
} else {
200-
for(int i2 = 0; i2 < librariesNoSoundLib.length(); i2++) {
201-
replaceLibrary(verLibs, librariesNoSoundLib.getJSONObject(i2));
199+
JSONArray verLibs = version.getJSONArray("libraries");
200+
boolean hasWrapper = false;
201+
for(int i2 = 0; i2 < verLibs.length(); i2++) {
202+
String[] lib = verLibs.getJSONObject(i2).getString("name").split(":");
203+
if(lib[0].equals("net.minecraft") && lib[1].equals("launchwrapper")) {
204+
hasWrapper = true;
205+
}
202206
}
203-
}
204-
if(id.equals("1.7.6-pre1") || id.equals("1.7.6-pre2") || id.equals("1.7.7")) {
205-
replaceLibrary(verLibs, authLib156);
206-
}
207-
boolean keepAssetsIndex = time.compareTo(ASSETINDEX_TIME) > 0;
208-
if(keepAssetsIndex) {
209-
if(version.getString("assets").equals("pre-1.6")) {
210-
version.put("assets", "legacy");
211-
version.put("assetIndex", legacyAssetIndex);
207+
if(hasWrapper) {
208+
removeLibrary(verLibs, "org.ow2.asm", "asm-all");
209+
removeLibrary(verLibs, "net.sf.jopt-simple", "jopt-simple");
210+
removeLibrary(verLibs, "net.minecraft", "launchwrapper");
212211
}
213-
}
214-
for(String key : preset.keySet()) {
212+
Instant time = getTime(version.getString("releaseTime"));
213+
if(time.compareTo(PAULSCODE_TIME) > 0) {
214+
for(int i2 = 0; i2 < libraries.length(); i2++) {
215+
replaceLibrary(verLibs, libraries.getJSONObject(i2));
216+
}
217+
} else {
218+
for(int i2 = 0; i2 < librariesNoSoundLib.length(); i2++) {
219+
replaceLibrary(verLibs, librariesNoSoundLib.getJSONObject(i2));
220+
}
221+
}
222+
if(id.equals("1.7.6-pre1") || id.equals("1.7.6-pre2") || id.equals("1.7.7")) {
223+
replaceLibrary(verLibs, authLib156);
224+
}
225+
boolean keepAssetsIndex = hasAssetIndex(time, id);
215226
if(keepAssetsIndex) {
216-
if(key.equals("assets") || key.equals("assetIndex")) {
227+
if(version.getString("assets").equals("pre-1.6")) {
228+
version.put("assets", "legacy");
229+
version.put("assetIndex", legacyAssetIndex);
230+
}
231+
}
232+
for(String key : preset.keySet()) {
233+
if(keepAssetsIndex) {
234+
if(key.equals("assets") || key.equals("assetIndex")) {
235+
continue;
236+
}
237+
}
238+
if(key.equals("libraries")) {
217239
continue;
218240
}
241+
version.put(key, preset.get(key));
219242
}
220-
if(key.equals("libraries")) {
221-
continue;
243+
String args = version.getString("minecraftArguments");
244+
args = args.replace("${auth_player_name} ${auth_session}", "--username ${auth_player_name} --session ${auth_session}");
245+
List<String> argsList = Arrays.asList(version.getString("minecraftArguments").split(" "));
246+
if(!argsList.contains("--gameDir")) {
247+
args += " --gameDir ${game_directory}";
248+
}
249+
if(!argsList.contains("--assetsDir")) {
250+
args += " --assetsDir ${game_assets}";
251+
}
252+
int port = getPort(time, id);
253+
if(port != -1) {
254+
args += " --resourcesProxyPort " + port;
255+
}
256+
String skin = getSkin(time, id);
257+
if(skin != null) {
258+
args += " --skinProxy " + skin;
259+
}
260+
version.put("time", getTimeString(startTime));
261+
version.put("minecraftArguments", args);
262+
Path jsonOut = basePath.resolve(id + ".json");
263+
try(BufferedWriter writer = Files.newBufferedWriter(jsonOut)) {
264+
version.write(writer);
265+
}
266+
if(packToFolders) {
267+
Path outPath = Files.createDirectory(basePath.resolve(id)).resolve(id + ".json");
268+
Files.deleteIfExists(outPath);
269+
Files.copy(jsonOut, outPath);
222270
}
223-
version.put(key, preset.get(key));
224-
}
225-
String args = version.getString("minecraftArguments");
226-
args = args.replace("${auth_player_name} ${auth_session}", "--username ${auth_player_name} --session ${auth_session}");
227-
List<String> argsList = Arrays.asList(version.getString("minecraftArguments").split(" "));
228-
if(!argsList.contains("--gameDir")) {
229-
args += " --gameDir ${game_directory}";
230-
}
231-
if(!argsList.contains("--assetsDir")) {
232-
args += " --assetsDir ${game_assets}";
233-
}
234-
int port = getPort(time);
235-
if(port != -1) {
236-
args += " --resourcesProxyPort " + port;
237-
}
238-
String skin = getSkin(time, id);
239-
if(skin != null) {
240-
args += " --skinProxy " + skin;
241-
}
242-
version.put("time", getTimeString(startTime));
243-
version.put("minecraftArguments", args);
244-
Path jsonOut = basePath.resolve(id + ".json");
245-
try(BufferedWriter writer = Files.newBufferedWriter(jsonOut)) {
246-
version.write(writer);
247-
}
248-
if(packToFolders) {
249-
Path outPath = Files.createDirectory(basePath.resolve(id)).resolve(id + ".json");
250-
Files.deleteIfExists(outPath);
251-
Files.copy(jsonOut, outPath);
252271
}
253272
}
273+
catch (IOException e) {
274+
e.printStackTrace();
275+
}
254276
}
255277
}
256278

@@ -291,6 +313,10 @@ public void generateManifest(boolean v2) throws IOException {
291313
version.put("time", json.getString("time"));
292314
version.put("type", type);
293315
version.put("url", "https://mcphackers.github.io/BetterJSONs/jsons/" + id + ".json");
316+
if(v2) {
317+
version.put("sha1", Util.getSHA1(Files.newInputStream(p)));
318+
version.put("complianceLevel", 0);
319+
}
294320
versionsList.add(version);
295321
if(type.equals("release")) {
296322
Instant time = getTime(releaseTime);
@@ -315,7 +341,7 @@ public void generateManifest(boolean v2) throws IOException {
315341
versions.putAll(versionsList);
316342
latest.put("release", latestRelease);
317343
latest.put("snapshot", latestSnapshot);
318-
try(BufferedWriter writer = Files.newBufferedWriter(basePath.getParent().resolve("version_manifest.json"))) {
344+
try(BufferedWriter writer = Files.newBufferedWriter(basePath.getParent().resolve(v2 ? "version_manifest_v2.json" : "version_manifest.json"))) {
319345
manifest.write(writer);
320346
}
321347
}
@@ -378,7 +404,7 @@ else if(id.charAt(2) == 'w' || id.equals("1.2")) {
378404
version.put(key, preset.get(key));
379405
}
380406
String args = "--username ${auth_player_name} --sessionid ${auth_session} --gameDir ${game_directory} --assetsDir ${game_assets}";
381-
int port = getPort(releaseTimeInstant);
407+
int port = getPort(releaseTimeInstant, id);
382408
if(port != -1) {
383409
args += " --resourcesProxyPort " + port;
384410
}

src/main/java/lbq/jsongen/JSONConstants.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,28 @@ public class JSONConstants {
88
public static final Instant PAULSCODE_TIME = Instant.from(DateTimeFormatter.ISO_DATE_TIME.parse("2009-12-21T22:00:00+00:00"));
99
public static final Instant ASSETINDEX_TIME = Instant.from(DateTimeFormatter.ISO_DATE_TIME.parse("2013-04-21T12:49:20+00:00"));
1010

11-
static Instant skin1Start = Instant.from(DateTimeFormatter.ISO_DATE_TIME.parse("2009-06-12T19:14:44+00:00"));
12-
static Instant skin2Start = Instant.from(DateTimeFormatter.ISO_DATE_TIME.parse("2009-07-11T13:36:02+00:00"));
13-
static Instant skin3Start = Instant.from(DateTimeFormatter.ISO_DATE_TIME.parse("2011-10-06T01:00:00+00:00"));
14-
static Instant skin4Start = Instant.from(DateTimeFormatter.ISO_DATE_TIME.parse("2014-01-16T14:45:12+00:00"));
11+
static Instant skin1Start = Instant.from(DateTimeFormatter.ISO_DATE_TIME.parse("2009-06-14T07:53:24+00:00"));
12+
static Instant skin2Start = Instant.from(DateTimeFormatter.ISO_DATE_TIME.parse("2009-06-19T22:53:16+00:00"));
13+
static Instant skin3Start = Instant.from(DateTimeFormatter.ISO_DATE_TIME.parse("2009-07-11T13:36:02+00:00"));
14+
static Instant skin4Start = Instant.from(DateTimeFormatter.ISO_DATE_TIME.parse("2011-10-06T01:00:00+00:00"));
15+
static Instant skin5Start = Instant.from(DateTimeFormatter.ISO_DATE_TIME.parse("2014-01-16T14:45:12+00:00"));
1516

1617
public static String getSkin(Instant time, String ver) {
17-
if(time.compareTo(skin4Start) >= 0 && !ver.startsWith("1.7.")) {
18+
if(time.compareTo(skin5Start) >= 0 && !ver.startsWith("1.7.")) {
1819
return null;
1920
}
20-
if(time.compareTo(skin3Start) >= 0) {
21+
if(time.compareTo(skin4Start) >= 0) {
2122
return "pre-1.8";
2223
}
23-
if(time.compareTo(skin2Start) >= 0) {
24+
if(time.compareTo(skin3Start) >= 0) {
2425
return "pre-b1.9-pre4";
2526
}
26-
if(time.compareTo(skin1Start) >= 0) {
27+
if(time.compareTo(skin2Start) >= 0) {
2728
return "classic";
2829
}
30+
if(time.compareTo(skin1Start) >= 0) {
31+
return "pre-c0.0.19a";
32+
}
2933
return null;
3034
}
3135

@@ -34,8 +38,12 @@ public static String getSkin(Instant time, String ver) {
3438
static Instant time3Start = Instant.from(DateTimeFormatter.ISO_DATE_TIME.parse("2010-10-29T21:00:00+00:00"));
3539
static Instant time4Start = Instant.from(DateTimeFormatter.ISO_DATE_TIME.parse("2011-11-11T01:00:00+00:00"));
3640

37-
public static int getPort(Instant time) {
38-
if(time.compareTo(ASSETINDEX_TIME) >= 0) {
41+
public static boolean hasAssetIndex(Instant time, String ver) {
42+
return time.compareTo(ASSETINDEX_TIME) >= 0 && !ver.startsWith("1.5.");
43+
}
44+
45+
public static int getPort(Instant time, String ver) {
46+
if(time.compareTo(ASSETINDEX_TIME) >= 0 && !ver.startsWith("1.5.")) {
3947
return -1;
4048
}
4149
if(time.compareTo(time4Start) >= 0) {

src/main/resources/preset.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@
3636
"downloads": {
3737
"artifact": {
3838
"path": "org/mcphackers/rdi/rdi/1.0/rdi-1.0.jar",
39-
"sha1": "6fcff0b8d6173ac275f3728a9e5a987cfca88762",
40-
"size": 79599,
39+
"sha1": "855b05d238b72b03197e6702a765f344a32b8291",
40+
"size": 79606,
4141
"url": "https://mcphackers.github.io/libraries/org/mcphackers/rdi/rdi/1.0/rdi-1.0.jar"
4242
},
4343
"classifiers": {
4444
"sources": {
4545
"path": "org/mcphackers/rdi/rdi/1.0/rdi-1.0-sources.jar",
46-
"sha1": "f38fbbad7ef3752c75274951d46b63d1d5515a8b",
47-
"size": 43261,
46+
"sha1": "def0c8e36a96338a9866141088a45fe4bfaab29a",
47+
"size": 43258,
4848
"url": "https://mcphackers.github.io/libraries/org/mcphackers/rdi/rdi/1.0/rdi-1.0-sources.jar"
4949
}
5050
}

0 commit comments

Comments
 (0)