Strip signatures from jar manifests at startup to save memory
This commit is contained in:
parent
925c7526ee
commit
21cbcb0e04
|
|
@ -2,6 +2,7 @@ package org.embeddedt.modernfix.common.mixin.core;
|
||||||
|
|
||||||
import net.minecraft.server.Bootstrap;
|
import net.minecraft.server.Bootstrap;
|
||||||
import net.minecraftforge.network.NetworkConstants;
|
import net.minecraftforge.network.NetworkConstants;
|
||||||
|
import org.embeddedt.modernfix.forge.classloading.ManifestCompactor;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.embeddedt.modernfix.forge.load.ModWorkManagerQueue;
|
import org.embeddedt.modernfix.forge.load.ModWorkManagerQueue;
|
||||||
import org.embeddedt.modernfix.util.TimeFormatter;
|
import org.embeddedt.modernfix.util.TimeFormatter;
|
||||||
|
|
@ -25,6 +26,7 @@ public class BootstrapMixin {
|
||||||
if(!isBootstrapped) {
|
if(!isBootstrapped) {
|
||||||
LOGGER.info("ModernFix reached bootstrap stage ({} after launch)", TimeFormatter.formatNanos(ManagementFactory.getRuntimeMXBean().getUptime() * 1000L * 1000L));
|
LOGGER.info("ModernFix reached bootstrap stage ({} after launch)", TimeFormatter.formatNanos(ManagementFactory.getRuntimeMXBean().getUptime() * 1000L * 1000L));
|
||||||
ModWorkManagerQueue.replace();
|
ModWorkManagerQueue.replace();
|
||||||
|
ManifestCompactor.compactManifests();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user