Skip to content

Commit

Permalink
Develop beta 7 (Sinytra#1689)
Browse files Browse the repository at this point in the history
  • Loading branch information
Su5eD authored Feb 25, 2025
2 parents 75b3692 + 754fca3 commit 9ed7a54
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 32 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
- name: Build
run: ./gradlew clean build publishToMavenLocal --stacktrace
- name: Upload Artifacts
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: Maven Local
path: ~/.m2/repository
13 changes: 6 additions & 7 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import java.time.LocalDateTime
plugins {
java
`maven-publish`
id("net.neoforged.moddev") version "2.0.52-beta"
id("net.neoforged.moddev") version "2.0.78"
id("io.github.goooler.shadow") version "8.1.8" apply false
id("me.modmuss50.mod-publish-plugin") version "0.5.+"
id("net.neoforged.gradleutils") version "3.0.0"
Expand Down Expand Up @@ -65,10 +65,6 @@ configurations {
"modCompileOnly" {
extendsFrom(shade)
}

additionalRuntimeClasspath {
extendsFrom(shade)
}
}

println("Java: ${System.getProperty("java.version")}, JVM: ${System.getProperty("java.vm.version")} (${System.getProperty("java.vendor")}), Arch: ${System.getProperty("os.arch")}")
Expand All @@ -86,6 +82,11 @@ neoForge {
}

runs {
configureEach {
additionalRuntimeClasspathConfiguration.extendsFrom(shade)
additionalRuntimeClasspathConfiguration.dependencies.add(dependencies.create(files(tasks.jar)))
}

val config = Action<RunModel> {
systemProperty("forge.logging.console.level", "debug")
systemProperty("forge.logging.markers", "REGISTRIES,SCAN,FMLHANDSHAKE,COREMOD")
Expand Down Expand Up @@ -144,8 +145,6 @@ dependencies {

"modCompileOnly"(sourceSets.main.get().output)

additionalRuntimeClasspath(files(tasks.jar))

implementation("curse.maven:connector-extras-913445:5618470")
}

Expand Down
8 changes: 4 additions & 4 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,19 @@ org.gradle.caching=true
#org.gradle.configuration-cache=true

# Versions
versionConnector=2.0.0-beta.6
versionConnector=2.0.0-beta.7
versionAdapter=1.13.20+1.21.1-20240811.191740
versionAdapterDefinition=1.13.23+1.21.1
versionAdapterDefinition=1.13.25+1.21.1
versionAdapterRuntime=1.0.0+1.21.1

versionMc=1.21.1
versionNeoForge=21.1.97
versionNeoForge=21.1.122
versionParchmentMc=1.21
versionParchment=2024.07.28
versionForgeAutoRenamingTool=1.0.12
versionForgifiedFabricLoader=2.5.34+0.16.0+1.21.1
versionAccessWidener=2.1.0
versionForgifiedFabricApi=0.104.0+2.0.13+1.21.1
versionForgifiedFabricApi=0.107.0+2.0.23+1.21.1

# Publishing
curseForgeId=890127
Expand Down
33 changes: 17 additions & 16 deletions src/main/java/org/sinytra/connector/locator/ConnectorLocator.java
Original file line number Diff line number Diff line change
Expand Up @@ -101,22 +101,20 @@ private List<IModFile> locateFabricMods(List<IModFile> discoveredMods) {
Collection<SimpleModInfo> loadedModInfos = getPreviouslyDiscoveredMods(discoveredMods);
Collection<IModFile> loadedModFiles = loadedModInfos.stream().map(SimpleModInfo::origin).toList();
Collection<String> loadedModIds = loadedModInfos.stream().filter(mod -> !mod.library()).map(SimpleModInfo::modid).collect(Collectors.toUnmodifiableSet());
Collection<String> loadedModuleNames = loadedModInfos.stream().filter(SimpleModInfo::library).map(SimpleModInfo::moduleName).filter(Objects::nonNull).collect(Collectors.toUnmodifiableSet());

// Discover fabric mod jars
List<JarTransformer.TransformableJar> discoveredJars = FabricModsDiscoverer.scanFabricMods()
.map(rethrowFunction(p -> cacheTransformableJar(p.toFile())))
.filter(jar -> {
ConnectorFabricModMetadata metadata = jar.modPath().metadata().modMetadata();
return !shouldIgnoreMod(metadata, loadedModIds);
})
.filter(jar -> !shouldIgnoreMod(jar, loadedModIds, loadedModuleNames))
.toList();

// Discover fabric nested mod jars
Multimap<JarTransformer.TransformableJar, JarTransformer.TransformableJar> parentToChildren = HashMultimap.create();
List<JarTransformer.TransformableJar> discoveredNestedJars = discoveredJars.stream()
.flatMap(jar -> {
ConnectorFabricModMetadata metadata = jar.modPath().metadata().modMetadata();
return shouldIgnoreMod(metadata, loadedModIds) ? Stream.empty() : discoverNestedJarsRecursive(tempDir, jar, metadata.getJars(), parentToChildren, loadedModIds);
return shouldIgnoreMod(jar, loadedModIds, loadedModuleNames) ? Stream.empty() : discoverNestedJarsRecursive(tempDir, jar, metadata.getJars(), parentToChildren, loadedModIds, loadedModuleNames);
})
.toList();

Expand Down Expand Up @@ -156,7 +154,7 @@ private List<IModFile> locateFabricMods(List<IModFile> discoveredMods) {
private static IModFile createConnectorModFile(SplitPackageMerger.FilteredModPath modPath) {
JarContents jarContents = new JarContentsBuilder().paths(modPath.paths()).pathFilter(modPath.filter()).build();
if (modPath.metadata().generated()) {
return IModFile.create(SecureJar.from(jarContents), JarModsDotTomlModFileReader::manifestParser, IModFile.Type.LIBRARY, ModFileDiscoveryAttributes.DEFAULT);
return IModFile.create(SecureJar.from(jarContents), JarModsDotTomlModFileReader::manifestParser, IModFile.Type.GAMELIBRARY, ModFileDiscoveryAttributes.DEFAULT);
}
ModJarMetadata modJarMetadata = new ModJarMetadata(jarContents);
SecureJar secureJar = SecureJar.from(jarContents, modJarMetadata);
Expand All @@ -165,19 +163,19 @@ private static IModFile createConnectorModFile(SplitPackageMerger.FilteredModPat
return modFile;
}

private static Stream<JarTransformer.TransformableJar> discoverNestedJarsRecursive(Path tempDir, JarTransformer.TransformableJar parent, Collection<NestedJarEntry> jars, Multimap<JarTransformer.TransformableJar, JarTransformer.TransformableJar> parentToChildren, Collection<String> loadedModIds) {
private static Stream<JarTransformer.TransformableJar> discoverNestedJarsRecursive(Path tempDir, JarTransformer.TransformableJar parent, Collection<NestedJarEntry> jars, Multimap<JarTransformer.TransformableJar, JarTransformer.TransformableJar> parentToChildren, Collection<String> loadedModIds, Collection<String> loadedModuleNames) {
SecureJar secureJar = SecureJar.from(parent.input().toPath());
return jars.stream()
.map(entry -> secureJar.getPath(entry.getFile()))
.filter(Files::exists)
.flatMap(path -> {
JarTransformer.TransformableJar jar = uncheck(() -> prepareNestedJar(tempDir, secureJar.getPrimaryPath().getFileName().toString(), path));
ConnectorFabricModMetadata metadata = jar.modPath().metadata().modMetadata();
if (shouldIgnoreMod(metadata, loadedModIds)) {
if (shouldIgnoreMod(jar, loadedModIds, loadedModuleNames)) {
return Stream.empty();
}
parentToChildren.put(parent, jar);
return Stream.concat(Stream.of(jar), discoverNestedJarsRecursive(tempDir, jar, metadata.getJars(), parentToChildren, loadedModIds));
ConnectorFabricModMetadata metadata = jar.modPath().metadata().modMetadata();
return Stream.concat(Stream.of(jar), discoverNestedJarsRecursive(tempDir, jar, metadata.getJars(), parentToChildren, loadedModIds, loadedModuleNames));
});
}

Expand All @@ -203,7 +201,7 @@ private static List<JarTransformer.TransformableJar> handleDuplicateMods(List<Ja
// Add mods that are going to be excluded by FML's UniqueModListBuilder to the ignore list
if (forgeMods.stream().anyMatch(SimpleModInfo::library)) {
ArtifactVersion artifactVersion = new DefaultArtifactVersion(jar.modPath().metadata().modMetadata().getVersion().getFriendlyString());
SimpleModInfo fabricModInfo = new SimpleModInfo(id, artifactVersion, false, null);
SimpleModInfo fabricModInfo = new SimpleModInfo(id, artifactVersion, false, null, null);
// Sort mods by version, descending
List<SimpleModInfo> modsByVersion = Stream.concat(Stream.of(fabricModInfo), forgeMods.stream())
.sorted(Comparator.comparing(SimpleModInfo::version).reversed())
Expand All @@ -226,9 +224,11 @@ private static List<JarTransformer.TransformableJar> handleDuplicateMods(List<Ja
.toList();
}

private static boolean shouldIgnoreMod(ConnectorFabricModMetadata metadata, Collection<String> loadedModIds) {
private static boolean shouldIgnoreMod(JarTransformer.TransformableJar jar, Collection<String> loadedModIds, Collection<String> loadedModuleNames) {
ConnectorFabricModMetadata metadata = jar.modPath().metadata().modMetadata();
String id = metadata.getId();
return ConnectorUtil.DISABLED_MODS.contains(id) || loadedModIds.contains(id);
return ConnectorUtil.DISABLED_MODS.contains(id) || loadedModIds.contains(id)
|| jar.modPath().metadata().generated() && loadedModuleNames.contains(jar.moduleName());
}

private static Collection<SimpleModInfo> getPreviouslyDiscoveredMods(List<IModFile> discoveredMods) {
Expand All @@ -244,10 +244,10 @@ private static Collection<SimpleModInfo> getPreviouslyDiscoveredMods(List<IModFi
return Stream.empty();
}
if (!modInfos.isEmpty()) {
return modInfos.stream().map(modInfo -> new SimpleModInfo(modInfo.getModId(), modInfo.getVersion(), false, modFile));
return modInfos.stream().map(modInfo -> new SimpleModInfo(modInfo.getModId(), modInfo.getVersion(), false, modFile, modFileInfo.moduleName()));
}
String version = modFileInfo.getFile().getSecureJar().moduleDataProvider().descriptor().version().map(ModuleDescriptor.Version::toString).orElse("0.0");
return Stream.of(new SimpleModInfo(modFileInfo.moduleName(), new DefaultArtifactVersion(version), true, modFile));
return Stream.of(new SimpleModInfo(modFileInfo.moduleName(), new DefaultArtifactVersion(version), true, modFile, modFileInfo.moduleName()));
})
.toList();
}
Expand All @@ -258,5 +258,6 @@ private static void loadEmbeddedJars(IDiscoveryPipeline pipeline) throws Excepti
new JarInJarDependencyLocator().scanMods(List.of(modFile), pipeline);
}

private record SimpleModInfo(String modid, ArtifactVersion version, boolean library, @Nullable IModFile origin) {}
private record SimpleModInfo(String modid, ArtifactVersion version, boolean library, @Nullable IModFile origin, @Nullable String moduleName) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import org.sinytra.adapter.patch.transformer.dynamic.DynamicInjectorOrdinalPatch;
import org.sinytra.adapter.patch.transformer.dynamic.DynamicLVTPatch;
import org.sinytra.adapter.patch.transformer.dynamic.DynamicModifyVarAtReturnPatch;
import org.sinytra.adapter.patch.transformer.dynamic.DynamicSyntheticInstanceofPatch;
import org.sinytra.adapter.patch.transformer.dynfix.DynamicInjectionPointPatch;
import org.sinytra.connector.transformer.patch.EnvironmentStripperTransformer;
import org.sinytra.connector.util.ConnectorUtil;
Expand Down Expand Up @@ -81,7 +80,6 @@ public MixinPatchTransformer(LVTOffsets lvtOffsets, PatchEnvironment environment
.transform(new DynamicAnonymousShadowFieldTypePatch())
.transform(new DynamicModifyVarAtReturnPatch())
.transform(new DynamicInheritedInjectionPointPatch())
.transform(new DynamicSyntheticInstanceofPatch())
.transform(new DynamicInjectionPointPatch())
.build(),
Patch.interfaceBuilder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
import com.google.gson.JsonParser;
import com.mojang.datafixers.util.Pair;
import com.mojang.logging.LogUtils;
import cpw.mods.jarhandling.JarContents;
import cpw.mods.jarhandling.JarContentsBuilder;
import cpw.mods.jarhandling.JarMetadata;
import cpw.mods.modlauncher.serviceapi.ILaunchPluginService;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.metadata.CustomValue;
Expand Down Expand Up @@ -116,7 +119,8 @@ public static TransformableJar cacheTransformableJar(File input) throws IOExcept
FabricModFileMetadata metadata = readModMetadata(input);
FabricModPath path = new FabricModPath(output, metadata);
ConnectorUtil.CacheFile cacheFile = ConnectorUtil.getCached(input.toPath(), output);
return new TransformableJar(input, path, cacheFile);
String moduleName = getModuleName(input.toPath());
return new TransformableJar(input, path, cacheFile, moduleName);
}

private static List<TransformedFabricModPath> transformJars(List<TransformableJar> paths, List<Path> libs, Collection<IModFile> loadedMods) {
Expand Down Expand Up @@ -259,6 +263,17 @@ private static void cleanupEnvironment() {
}
}

@Nullable
private static String getModuleName(Path path) {
try(JarContents contents = new JarContentsBuilder().paths(path).build()) {
JarMetadata metadata = JarMetadata.from(contents);
return metadata.descriptor().name();
} catch (IOException e) {
LOGGER.error("Error reading jar contents from {}", path, e);
return null;
}
}

private JarTransformer() {}

public record FabricModPath(Path path, FabricModFileMetadata metadata) {}
Expand All @@ -267,7 +282,7 @@ public record TransformedFabricModPath(Path input, FabricModPath output, @Nullab

public record FabricModFileMetadata(ConnectorFabricModMetadata modMetadata, Collection<String> visibleMixinConfigs, Collection<String> mixinConfigs, Set<String> refmaps, Set<String> mixinPackages, Attributes manifestAttributes, boolean containsAT, boolean generated) {}

public record TransformableJar(File input, FabricModPath modPath, ConnectorUtil.CacheFile cacheFile) {
public record TransformableJar(File input, FabricModPath modPath, ConnectorUtil.CacheFile cacheFile, String moduleName) {
public Pair<FabricModPath, PatchAuditTrail> transform(JarTransformInstance transformInstance) throws IOException {
Files.deleteIfExists(this.modPath.path);
PatchAuditTrail audit = transformInstance.transformJar(this.input, this.modPath.path, this.modPath.metadata());
Expand Down

0 comments on commit 9ed7a54

Please sign in to comment.