Skip to content

Commit 7c10423

Browse files
committed
Preserve W3I flags in synthesized headers
1 parent 659e909 commit 7c10423

2 files changed

Lines changed: 15 additions & 8 deletions

File tree

de.peeeq.wurstscript/src/main/java/de/peeeq/wurstio/languageserver/ProjectConfigBuilder.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public static MapRequest.CompilationResult apply(WurstProjectConfigData projectC
107107
w3I.write(result.w3i);
108108

109109
// Apply map header (this is cheap, so we always do it)
110-
applyMapHeader(projectConfig, targetMap, w3I.getPlayers().size(), w3I.getMapName());
110+
applyMapHeader(projectConfig, targetMap, w3I.getPlayers().size(), w3I.getMapName(), w3I.getFlags().toInt());
111111

112112
// Update the manifest with new config hash (must open writable to insert)
113113
try (MpqEditor mpq = MpqEditorFactory.getEditor(Optional.of(targetMap), false)) {
@@ -357,7 +357,8 @@ private static void setVolatilePlayerConfig(WurstProjectBuildPlayer wplayer, W3I
357357
}
358358

359359
private static void applyMapHeader(WurstProjectConfigData projectConfig, File targetMap,
360-
int existingPlayerCount, String existingMapName) throws IOException {
360+
int existingPlayerCount, String existingMapName,
361+
int existingMapFlags) throws IOException {
361362
boolean shouldWrite = false;
362363
WurstProjectBuildMapData buildMapData = projectConfig.buildMapData();
363364
if (buildMapData.players().isEmpty() && StringUtils.isBlank(buildMapData.name())) {
@@ -381,6 +382,9 @@ private static void applyMapHeader(WurstProjectConfigData projectConfig, File ta
381382
if (hasNoMapHeader && StringUtils.isBlank(buildMapData.name())) {
382383
mapHeader.setMapName(existingMapName);
383384
}
385+
if (hasNoMapHeader) {
386+
mapHeader.setFlags(existingMapFlags);
387+
}
384388
if (StringUtils.isNotBlank(buildMapData.name())) {
385389
mapHeader.setMapName(buildMapData.name());
386390
shouldWrite = true;

de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstBuildConfigTests.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ public void mapHeaderConfigAcceptsAnArchiveWithoutAnHm3wPrefix() throws Exceptio
238238
Files.write(mapWithoutHeader, original);
239239

240240
Method applyMapHeader = ProjectConfigBuilder.class.getDeclaredMethod(
241-
"applyMapHeader", WurstProjectConfigData.class, File.class, int.class, String.class
241+
"applyMapHeader", WurstProjectConfigData.class, File.class, int.class, String.class, int.class
242242
);
243243
applyMapHeader.setAccessible(true);
244244

@@ -253,7 +253,8 @@ public void mapHeaderConfigAcceptsAnArchiveWithoutAnHm3wPrefix() throws Exceptio
253253
),
254254
mapWithoutHeader.toFile(),
255255
3,
256-
"Existing map"
256+
"Existing map",
257+
0x1234
257258
);
258259

259260
assertEquals(Files.readAllBytes(mapWithoutHeader)[0], (byte) 'H');
@@ -272,10 +273,10 @@ public void mapHeaderConfigDoesNotReadAnArchiveWhenNothingNeedsChanging() throws
272273
Files.write(mapWithoutHeader, original);
273274

274275
Method applyMapHeader = ProjectConfigBuilder.class.getDeclaredMethod(
275-
"applyMapHeader", WurstProjectConfigData.class, File.class, int.class, String.class
276+
"applyMapHeader", WurstProjectConfigData.class, File.class, int.class, String.class, int.class
276277
);
277278
applyMapHeader.setAccessible(true);
278-
applyMapHeader.invoke(null, WurstProjectConfigData.empty(), mapWithoutHeader.toFile(), 0, null);
279+
applyMapHeader.invoke(null, WurstProjectConfigData.empty(), mapWithoutHeader.toFile(), 0, null, 0);
279280

280281
assertEquals(Files.readAllBytes(mapWithoutHeader), original);
281282
}
@@ -291,7 +292,7 @@ public void mapHeaderConfigPreservesExistingMapNameWhenOnlyPlayersChange() throw
291292
Files.write(mapWithoutHeader, original);
292293

293294
Method applyMapHeader = ProjectConfigBuilder.class.getDeclaredMethod(
294-
"applyMapHeader", WurstProjectConfigData.class, File.class, int.class, String.class
295+
"applyMapHeader", WurstProjectConfigData.class, File.class, int.class, String.class, int.class
295296
);
296297
applyMapHeader.setAccessible(true);
297298

@@ -310,11 +311,13 @@ public void mapHeaderConfigPreservesExistingMapNameWhenOnlyPlayersChange() throw
310311
),
311312
mapWithoutHeader.toFile(),
312313
4,
313-
"Existing map"
314+
"Existing map",
315+
0x1234
314316
);
315317

316318
byte[] result = Files.readAllBytes(mapWithoutHeader);
317319
assertEquals(MapHeader.ofFile(mapWithoutHeader.toFile()).getMaxPlayersCount(), 1);
320+
assertEquals(MapHeader.ofFile(mapWithoutHeader.toFile()).getFlags(), 0x1234);
318321
assertTrue(new String(result, StandardCharsets.UTF_8).contains("Existing map"));
319322
}
320323

0 commit comments

Comments
 (0)