Skip to content

Commit

Permalink
Develop beta 38 (#877)
Browse files Browse the repository at this point in the history
  • Loading branch information
Su5eD committed Mar 13, 2024
2 parents cf46217 + 27ec8c9 commit 06a665c
Show file tree
Hide file tree
Showing 33 changed files with 454 additions and 223 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ jobs:
java-version: '17'
- uses: gradle/wrapper-validation-action@v1
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
uses: gradle/gradle-build-action@v3
with:
dependency-graph: generate-and-submit
gradle-home-cache-cleanup: true
gradle-home-cache-excludes: |
gradle.properties
Expand Down
51 changes: 46 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,12 @@ permissions:

jobs:
build:
name: Build
runs-on: ubuntu-22.04
outputs:
changelog: ${{ steps.changelog.outputs.changelog }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: FabricMC/fabric-action-scripts@v2
Expand All @@ -35,19 +38,57 @@ jobs:
java-version: '17'
- uses: gradle/wrapper-validation-action@v1
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
uses: gradle/actions/setup-gradle@v3
with:
gradle-home-cache-cleanup: true
gradle-home-cache-excludes: |
gradle.properties
- name: Build with Gradle
run: ./gradlew clean build publish publishMods --stacktrace
run: ./gradlew clean build --stacktrace
publish:
strategy:
matrix:
include:
- name: Maven
environment: maven
task: publish
- name: GitHub
environment: github
task: publishGithub
- name: CurseForge
environment: curseforge
task: publishCurseforge
- name: Modrinth
environment: modrinth
task: publishModrinth
name: Publish ${{ matrix.name }}
needs: build
runs-on: ubuntu-22.04
environment: ${{ inputs.environment }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-java@v3
with:
distribution: 'microsoft'
java-version: '17'
- uses: gradle/wrapper-validation-action@v1
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
with:
cache-read-only: true
gradle-home-cache-cleanup: true
gradle-home-cache-excludes: |
gradle.properties
- name: Publish with Gradle
run: ./gradlew ${{ matrix.task }} --stacktrace
env:
PUBLISH_RELEASE_TYPE: ${{ inputs.release_type }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CURSEFORGE_TOKEN: ${{ secrets.CURSEFORGE_TOKEN }}
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
MAVEN_URL: ${{ secrets.MAVEN_URL }}
MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
CHANGELOG: ${{ steps.changelog.outputs.changelog }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }
CHANGELOG: ${{ needs.build.outputs.changelog }}
4 changes: 2 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -316,9 +316,9 @@ dependencies {
shade(group = "net.minecraftforge", name = "srgutils", version = "0.5.4")
shade(group = "net.fabricmc", name = "access-widener", version = versionAccessWidener)
shade(group = "dev.su5ed.sinytra", name = "ForgeAutoRenamingTool", version = versionForgeAutoRenamingTool)
shade(group = "dev.su5ed.sinytra.adapter", name = "definition", version = versionAdapterDefinition) { isTransitive = false }
shade(group = "org.sinytra.adapter", name = "definition", version = versionAdapterDefinition) { isTransitive = false }
shade(group = "io.github.steelwoolmc", name = "mixin-transmogrifier", version = versionMixinTransmog)
adapterData(group = "dev.su5ed.sinytra.adapter", name = "adapter", version = versionAdapter)
adapterData(group = "org.sinytra.adapter", name = "adapter", version = versionAdapter)

annotationProcessor(group = "net.fabricmc", name = "sponge-mixin", version = versionMixin)
compileOnly(group = "net.fabricmc", name = "sponge-mixin", version = versionMixin)
Expand Down
6 changes: 3 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=true

# Versions
versionConnector=1.0.0-beta.37
versionAdapter=1.11.19-1.20.1-20240126.215012
versionAdapterDefinition=1.11.24
versionConnector=1.0.0-beta.38
versionAdapter=1.11.30-1.20.1-20240308.152751
versionAdapterDefinition=1.11.30

versionMc=1.20.1
versionForge=47.1.3
Expand Down
9 changes: 5 additions & 4 deletions src/main/java/dev/su5ed/sinytra/connector/ConnectorUtil.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package dev.su5ed.sinytra.connector;

import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
import com.google.common.hash.Hashing;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
Expand All @@ -18,7 +20,6 @@
import java.nio.file.Path;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;

Expand Down Expand Up @@ -113,9 +114,9 @@ public final class ConnectorUtil {
);
// Common aliased mod dependencies that don't work with forge ports, which use a different modid.
// They're too annoying to override individually in each mod, so we provide this small QoL feature for the user's comfort
public static final Map<String, List<String>> DEFAULT_GLOBAL_MOD_ALIASES = Map.of(
"cloth_config", List.of("cloth-config2"),
"playeranimator", List.of("player-animator")
public static final Multimap<String, String> DEFAULT_GLOBAL_MOD_ALIASES = ImmutableMultimap.of(
"cloth_config", "cloth-config2",
"playeranimator", "player-animator"
);

private static final boolean CACHE_ENABLED;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package dev.su5ed.sinytra.connector.locator;

import com.google.common.base.Suppliers;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
Expand All @@ -18,13 +21,14 @@
import java.io.Reader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.Supplier;

public record ConnectorConfig(int version, List<String> hiddenMods, Map<String, List<String>> globalModAliases) {
public record ConnectorConfig(int version, List<String> hiddenMods, Multimap<String, String> globalModAliases) {
public static final Codec<ConnectorConfig> CODEC = RecordCodecBuilder.create(instance -> instance.group(
Codec.INT
.comapFlatMap(i -> i == 1 ? DataResult.success(i) : DataResult.error(() -> "Unsupported \"version\", must be 1"), Function.identity())
Expand All @@ -38,11 +42,20 @@ public record ConnectorConfig(int version, List<String> hiddenMods, Map<String,
Codec.STRING,
Codec.either(Codec.STRING.listOf(), Codec.STRING).xmap(either -> either.map(list -> list, List::of), list -> list.size() == 1 ? Either.right(list.get(0)) : Either.left(list))
)
.optionalFieldOf("globalModAliases", Map.of())
.xmap(map -> {
Multimap<String, String> aliases = HashMultimap.create();
map.forEach(aliases::putAll);
return aliases;
}, multimap -> {
Map<String, List<String>> map = new HashMap<>();
multimap.asMap().forEach((key, val) -> map.put(key, List.copyOf(val)));
return map;
})
.optionalFieldOf("globalModAliases", ImmutableMultimap.of())
.forGetter(ConnectorConfig::globalModAliases)
).apply(instance, ConnectorConfig::new));

ConnectorConfig(Optional<Integer> version, Optional<List<String>> hiddenMods, Map<String, List<String>> globalModAliases) {
ConnectorConfig(Optional<Integer> version, Optional<List<String>> hiddenMods, Multimap<String, String> globalModAliases) {
this(version.orElse(1), hiddenMods.orElseGet(List::of), globalModAliases);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ private List<IModFile> locateFabricMods(Iterable<IModFile> loadedMods) {
.toList();
Collection<String> loadedModIds = loadedModInfos.stream().filter(mod -> !mod.library()).map(SimpleModInfo::modid).collect(Collectors.toUnmodifiableSet());
// Discover fabric mod jars
final var excluded = ModDirTransformerDiscoverer.allExcluded();
List<Path> excluded = ModDirTransformerDiscoverer.allExcluded();
List<JarTransformer.TransformableJar> discoveredJars = Stream.of(scanModsDir(excluded), scanClasspath(), scanFromArguments(excluded)).flatMap(s -> s)
.map(rethrowFunction(p -> cacheTransformableJar(p.toFile())))
.filter(jar -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
import com.google.common.base.Suppliers;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import com.mojang.logging.LogUtils;
import dev.su5ed.sinytra.connector.loader.ConnectorEarlyLoader;
import dev.su5ed.sinytra.connector.transformer.jar.JarTransformer;
import net.fabricmc.api.EnvType;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.VersionParsingException;
import net.fabricmc.loader.api.metadata.ModDependency;
import net.fabricmc.loader.api.metadata.ModMetadata;
import net.fabricmc.loader.impl.FMLModMetadata;
import net.fabricmc.loader.impl.FabricLoaderImpl;
Expand All @@ -21,6 +21,8 @@
import net.fabricmc.loader.impl.game.GameProvider;
import net.fabricmc.loader.impl.metadata.BuiltinModMetadata;
import net.fabricmc.loader.impl.metadata.DependencyOverrides;
import net.fabricmc.loader.impl.metadata.LoaderModMetadata;
import net.fabricmc.loader.impl.metadata.ModDependencyImpl;
import net.fabricmc.loader.impl.metadata.VersionOverrides;
import net.fabricmc.loader.impl.util.version.VersionParser;
import net.minecraftforge.fml.loading.FMLPaths;
Expand Down Expand Up @@ -49,9 +51,7 @@ public final class DependencyResolver {

public static List<JarTransformer.TransformableJar> resolveDependencies(Collection<JarTransformer.TransformableJar> keys, Multimap<JarTransformer.TransformableJar, JarTransformer.TransformableJar> jars, Iterable<IModFile> loadedMods) {
// Add global mod aliases
Multimap<String, String> aliases = HashMultimap.create();
ConnectorConfig.INSTANCE.get().globalModAliases().forEach(aliases::putAll);
FabricLoaderImpl.INSTANCE.aliasMods(aliases);
FabricLoaderImpl.INSTANCE.aliasMods(ConnectorConfig.INSTANCE.get().globalModAliases());
BiMap<JarTransformer.TransformableJar, ModCandidate> jarToCandidate = HashBiMap.create();
// Fabric candidates
List<ModCandidate> candidates = createCandidatesRecursive(keys, keys, jars, jarToCandidate);
Expand All @@ -77,6 +77,22 @@ public static List<JarTransformer.TransformableJar> resolveDependencies(Collecti
}
}

public static void removeAliasedModDependencyConstraints(LoaderModMetadata metadata) {
Multimap<String, String> aliases = ConnectorConfig.INSTANCE.get().globalModAliases();
Collection<ModDependency> mapped = metadata.getDependencies().stream()
.map(dep -> {
// Aliased mods typically don't follow the same version convention as the original,
// therefore we must widen all dependency constraints to wildcards
if (aliases.values().contains(dep.getModId())) {
return dep.getKind() == ModDependency.Kind.BREAKS ? null : uncheck(() -> new ModDependencyImpl(dep.getKind(), dep.getModId(), List.of("*")));
}
return dep;
})
.filter(Objects::nonNull)
.toList();
metadata.setDependencies(mapped);
}

private static List<ModCandidate> createCandidatesRecursive(Collection<JarTransformer.TransformableJar> candidateJars, Collection<JarTransformer.TransformableJar> jarsToLoad, Multimap<JarTransformer.TransformableJar, JarTransformer.TransformableJar> parentsToChildren, Map<JarTransformer.TransformableJar, ModCandidate> jarToCandidate) {
List<ModCandidate> candidates = new ArrayList<>();
for (JarTransformer.TransformableJar candidateJar : candidateJars) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public static void init() {
if (Files.exists(modFile.getFile().findResource(config))) {
ModFileInfo prev = configToModMap.putIfAbsent(config, modFile);
if (prev != null)
LOGGER.error("Non-unique Mixin config name {} used by the mods {} and {}", config, prev.moduleName(), modFile.moduleName());
LOGGER.debug("Non-unique Mixin config name {} used by the mods {} and {}", config, prev.moduleName(), modFile.moduleName());
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package dev.su5ed.sinytra.connector.transformer;

import dev.su5ed.sinytra.adapter.patch.api.MethodContext;
import dev.su5ed.sinytra.adapter.patch.api.Patch;
import dev.su5ed.sinytra.adapter.patch.api.PatchContext;
import dev.su5ed.sinytra.adapter.patch.api.PatchEnvironment;
import org.sinytra.adapter.patch.api.MethodContext;
import org.sinytra.adapter.patch.api.Patch;
import org.sinytra.adapter.patch.api.PatchContext;
import org.sinytra.adapter.patch.api.PatchEnvironment;
import dev.su5ed.sinytra.connector.transformer.patch.ClassNodeTransformer;
import dev.su5ed.sinytra.connector.transformer.patch.RedirectAccessorToMethod;
import net.minecraftforge.coremod.api.ASMAPI;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.google.common.collect.ImmutableMap;
import com.mojang.logging.LogUtils;
import dev.su5ed.sinytra.adapter.patch.api.Patch;
import org.sinytra.adapter.patch.api.Patch;
import dev.su5ed.sinytra.connector.transformer.patch.ClassNodeTransformer;
import net.fabricmc.accesswidener.AccessWidenerReader;
import net.fabricmc.accesswidener.AccessWidenerVisitor;
Expand Down
Loading

0 comments on commit 06a665c

Please sign in to comment.