diff --git a/build.gradle b/build.gradle index 5a9873f..ea0753c 100644 --- a/build.gradle +++ b/build.gradle @@ -2,6 +2,7 @@ plugins { id "java" id "java-library" id "maven-publish" + id "eclipse" id "net.minecrell.licenser" version "0.4.1" } @@ -25,6 +26,7 @@ repositories { url = "https://maven.fabricmc.net/" content { includeGroup("net.fabricmc") // I'd like to deprecate procyon, so we don't need to maintain it + includeGroup("cuchaz") } } } diff --git a/src/main/java/net/fabricmc/stitch/merge/ClassMerger.java b/src/main/java/net/fabricmc/stitch/merge/ClassMerger.java index 738a195..a92aa63 100644 --- a/src/main/java/net/fabricmc/stitch/merge/ClassMerger.java +++ b/src/main/java/net/fabricmc/stitch/merge/ClassMerger.java @@ -23,10 +23,14 @@ import java.util.*; public class ClassMerger { + // Fabric private static final String SIDE_DESCRIPTOR = "Lnet/fabricmc/api/EnvType;"; private static final String ITF_DESCRIPTOR = "Lnet/fabricmc/api/EnvironmentInterface;"; private static final String ITF_LIST_DESCRIPTOR = "Lnet/fabricmc/api/EnvironmentInterfaces;"; private static final String SIDED_DESCRIPTOR = "Lnet/fabricmc/api/Environment;"; + // Quilt + private static final String QUILT_CLIENT_DESC = "Lorg/quiltmc/loader/api/minecraft/ClientOnly;"; + private static final String QUILT_SERVER_DESC = "Lorg/quiltmc/loader/api/minecraft/DedicatedServerOnly;"; private abstract class Merger { private final Map entriesClient, entriesServer; @@ -89,24 +93,41 @@ private static void visitItfAnnotation(AnnotationVisitor av, String side, List entriesClient, entriesServer; private final Set entriesAll; private boolean removeSnowmen = false; private boolean offsetSyntheticsParams = false; + private boolean useQuiltAnnotations = true; public JarMerger(File inputClient, File inputServer, File output) throws IOException { if (output.exists()) { @@ -79,6 +82,10 @@ public void enableSyntheticParamsOffset() { offsetSyntheticsParams = true; } + public void setUseQuiltAnnotations(boolean use) { + useQuiltAnnotations = use; + } + @Override public void close() throws IOException { inputClientFs.close(); @@ -170,7 +177,8 @@ public void merge() throws IOException { result = entry1; } else { if (isClass) { - result = new Entry(entry1.path, entry1.metadata, CLASS_MERGER.merge(entry1.data, entry2.data)); + ClassMerger classMerger = useQuiltAnnotations ? CLASS_MERGER_QUILT : CLASS_MERGER_FABRIC; + result = new Entry(entry1.path, entry1.metadata, classMerger.merge(entry1.data, entry2.data)); } else { // FIXME: More heuristics? result = entry1; @@ -195,7 +203,8 @@ public void merge() throws IOException { ClassVisitor visitor = writer; if (side != null) { - visitor = new ClassMerger.SidedClassVisitor(StitchUtil.ASM_VERSION, visitor, side); + visitor = new ClassMerger.SidedClassVisitor(StitchUtil.ASM_VERSION, visitor, side) + .setUseQuiltAnnotations(useQuiltAnnotations); } if (removeSnowmen) {