Skip to content

Commit 6ccd579

Browse files
committed
Force unique module name for libraries
1 parent dc5c52e commit 6ccd579

3 files changed

Lines changed: 24 additions & 20 deletions

File tree

transformer/src/main/java/org/sinytra/connector/transformer/jar/JarTransformInstance.java

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.mojang.logging.LogUtils;
55
import net.neoforged.art.api.Renamer;
66
import net.neoforged.art.api.Transformer;
7-
import net.neoforged.art.api.Transformer.ResourceEntry;
87
import org.jetbrains.annotations.Nullable;
98
import org.sinytra.adapter.env.ctx.AuditTrail;
109
import org.sinytra.adapter.env.ctx.PatchEnvironment;
@@ -21,20 +20,18 @@
2120
import org.sinytra.connector.transformer.plugin.PluginManager;
2221
import org.sinytra.connector.transformer.plugin.TransformerContextImpl;
2322
import org.sinytra.connector.transformer.transform.FabricMetadataTransformer;
23+
import org.sinytra.connector.transformer.transform.JarSignatureStripper;
2424
import org.sinytra.connector.transformer.transform.MixinPatchTransformer;
25-
import org.sinytra.connector.transformer.transform.TransformerUtil;
2625
import org.slf4j.Logger;
2726

2827
import java.io.File;
2928
import java.io.IOException;
30-
import java.io.UncheckedIOException;
3129
import java.nio.file.FileSystem;
3230
import java.nio.file.FileSystems;
3331
import java.nio.file.Files;
3432
import java.nio.file.Path;
3533
import java.util.Collection;
3634
import java.util.List;
37-
import java.util.Objects;
3835
import java.util.Set;
3936
import java.util.concurrent.TimeUnit;
4037
import java.util.stream.Collectors;
@@ -116,19 +113,21 @@ public AuditTrail transformJar(File input, Path output, FabricModFileMetadata me
116113
}
117114

118115
private void processGeneratedJar(File input, Path output, Stopwatch stopwatch) throws IOException {
119-
Files.copy(input.toPath(), output);
120-
FabricMetadataTransformer transformer = new FabricMetadataTransformer(this.environment);
121-
122-
try (FileSystem fs = FileSystems.newFileSystem(output)) {
123-
Path path = fs.getPath(TransformerUtil.FABRIC_MOD_JSON);
124-
byte[] data = Files.readAllBytes(path);
125-
ResourceEntry entry = ResourceEntry.create(TransformerUtil.FABRIC_MOD_JSON, 0, data);
126-
ResourceEntry processed = Objects.requireNonNull(transformer.process(entry), "Failed to process FMJ entry");
127-
Files.write(path, processed.getData());
128-
} catch (IOException e) {
129-
throw new UncheckedIOException("Error patching generated jar file", e);
116+
Renamer.Builder builder = Renamer.builder()
117+
.logger(s -> LOGGER.trace(JarTransformer.TRANSFORM_MARKER, s))
118+
.debug(s -> LOGGER.trace(JarTransformer.TRANSFORM_MARKER, s))
119+
.ignoreJarPathPrefix("assets/", "data/");
120+
121+
builder.add(new FabricMetadataTransformer(this.environment));
122+
builder.add(new JarSignatureStripper());
123+
124+
try (Renamer renamer = builder.build()) {
125+
renamer.run(input, output.toFile());
126+
} catch (Throwable t) {
127+
LOGGER.error("Encountered error while transforming jar file {}", input.getAbsolutePath(), t);
128+
throw t;
130129
}
131-
130+
132131
stopwatch.stop();
133132
LOGGER.debug(JarTransformer.TRANSFORM_MARKER, "Skipping transformation of jar {} after {} ms as it contains generated metadata, assuming it's a java library", input.getName(), stopwatch.elapsed(TimeUnit.MILLISECONDS));
134133
}

transformer/src/main/java/org/sinytra/connector/transformer/transform/FabricMetadataTransformer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ public class FabricMetadataTransformer implements Transformer {
3232
"com.llamalad7.mixinextras.MixinExtrasBootstrap",
3333
"com.llamalad7.mixinextras.MixinExtrasBootstrap::init"
3434
);
35-
35+
3636
private final TransformerEnvironment environment;
37-
37+
3838
public FabricMetadataTransformer(TransformerEnvironment environment) {
3939
this.environment = environment;
4040
}

transformer/src/main/java/org/sinytra/connector/transformer/transform/JarSignatureStripper.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
import net.neoforged.art.api.Transformer;
44

55
import java.io.*;
6+
import java.util.jar.Attributes;
67
import java.util.jar.Manifest;
78

89
public class JarSignatureStripper implements Transformer {
9-
1010
@Override
1111
public ResourceEntry process(ResourceEntry entry) {
1212
String name = entry.getName();
@@ -18,12 +18,17 @@ public ManifestEntry process(ManifestEntry entry) {
1818
Manifest manifest = new Manifest();
1919
try (InputStream is = new ByteArrayInputStream(entry.getData())) {
2020
manifest.read(is);
21-
manifest.getEntries().clear();
21+
processManifest(manifest);
2222
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
2323
manifest.write(byteStream);
2424
return ManifestEntry.create(entry.getTime(), byteStream.toByteArray());
2525
} catch (IOException e) {
2626
throw new UncheckedIOException("Error writing manifest", e);
2727
}
2828
}
29+
30+
private static void processManifest(Manifest manifest) {
31+
manifest.getEntries().clear();
32+
manifest.getMainAttributes().remove(new Attributes.Name("Automatic-Module-Name"));
33+
}
2934
}

0 commit comments

Comments
 (0)