Strip signatures from jar manifests at startup to save memory

This commit is contained in:
embeddedt 2026-03-01 17:52:13 -05:00
parent 925c7526ee
commit 21cbcb0e04
No known key found for this signature in database
GPG Key ID: A69433EC199B5613
2 changed files with 34 additions and 0 deletions

View File

@ -2,6 +2,7 @@ package org.embeddedt.modernfix.common.mixin.core;
import net.minecraft.server.Bootstrap;
import net.minecraftforge.network.NetworkConstants;
import org.embeddedt.modernfix.forge.classloading.ManifestCompactor;
import org.slf4j.Logger;
import org.embeddedt.modernfix.forge.load.ModWorkManagerQueue;
import org.embeddedt.modernfix.util.TimeFormatter;
@ -25,6 +26,7 @@ public class BootstrapMixin {
if(!isBootstrapped) {
LOGGER.info("ModernFix reached bootstrap stage ({} after launch)", TimeFormatter.formatNanos(ManagementFactory.getRuntimeMXBean().getUptime() * 1000L * 1000L));
ModWorkManagerQueue.replace();
ManifestCompactor.compactManifests();
}
}

View File

@ -0,0 +1,32 @@
package org.embeddedt.modernfix.forge.classloading;
import cpw.mods.jarhandling.impl.Jar;
import net.minecraftforge.fml.loading.LoadingModList;
import java.util.HashSet;
import java.util.Set;
import java.util.jar.Attributes;
public class ManifestCompactor {
public static void compactManifests() {
for (var mfi : LoadingModList.get().getModFiles()) {
if (!(mfi.getFile().getSecureJar() instanceof Jar jar)) {
continue;
}
var manifest = jar.getManifest();
if (manifest == null) {
continue;
}
var entries = jar.getManifest().getEntries();
var entryKeys = new HashSet<>(entries.keySet());
var digests = Set.of(new Attributes.Name("SHA-256-Digest"), new Attributes.Name("SHA-384-Digest"));
entryKeys.forEach(key -> entries.compute(key, (k, attrs) -> {
if (attrs != null && attrs.keySet().stream().anyMatch(n -> n != null && !digests.contains(n))) {
return attrs;
} else {
return null;
}
}));
}
}
}