Skip to content

Commit

Permalink
update jar processors, add exceptions jar processor
Browse files Browse the repository at this point in the history
  • Loading branch information
SpaceWalkerRS committed Jul 14, 2024
1 parent 65ce0b0 commit 0d9e112
Show file tree
Hide file tree
Showing 14 changed files with 650 additions and 412 deletions.
4 changes: 3 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,10 @@ dependencies {
implementation("org.ow2.asm:asm-tree:9.6")
implementation("org.ow2.asm:asm-util:9.6")
implementation("net.fabricmc:mapping-io:0.5.1")
implementation("net.ornithemc:exceptor:1.0.0")
implementation("net.ornithemc:mapping-utils:0.14.0")
implementation("net.ornithemc:nester:1.3.1")
implementation("io.github.gaming32:signature-changer:1.0.0-beta.1")
implementation("io.github.gaming32:signature-changer:1.0.0-beta.2")
implementation("com.vdurmont:semver4j:3.1.0")
}

Expand Down
23 changes: 16 additions & 7 deletions src/main/java/net/ornithemc/ploceus/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,15 @@ public class Constants {
public static final String FORGE_MAVEN_URL = "https://maven.minecraftforge.net/";

public static final String MINECRAFT_CONFIGURATION = "minecraft";
public static final String NESTS_CONFIGURATION = "nests";
public static final String CLIENT_NESTS_CONFIGURATION = "clientNests";
public static final String SERVER_NESTS_CONFIGURATION = "serverNests";
public static final String EXCEPTIONS_CONFIGURATION = "exceptions";
public static final String CLIENT_EXCEPTIONS_CONFIGURATION = "clientExceptions";
public static final String SERVER_EXCEPTIONS_CONFIGURATION = "serverExceptions";
public static final String SIGNATURES_CONFIGURATION = "signatures";
public static final String CLIENT_SIGNATURES_CONFIGURATION = "clientSignatures";
public static final String SERVER_SIGNATURES_CONFIGURATION = "serverSignatures";
public static final String NESTS_CONFIGURATION = "nests";
public static final String CLIENT_NESTS_CONFIGURATION = "clientNests";
public static final String SERVER_NESTS_CONFIGURATION = "serverNests";

public static final String VERSION_MANIFEST_PROPERTY = "loom_version_manifests";
public static final String VERSIONS_MANIFEST_URL = "https://skyrising.github.io/mc-versions/version_manifest.json";
Expand Down Expand Up @@ -55,10 +58,10 @@ public static String featherGen2Mappings(int generation, String mc, String build
return String.format(FEATHER_GEN2_MAPPINGS, generation, mc, build);
}

public static final String NESTS_MAVEN_GROUP = "net.ornithemc";
public static final String NESTS = NESTS_MAVEN_GROUP + ":nests:%s%s+build.%s";
public static String nests(String mc, GameSide side, String build) {
return String.format(NESTS, mc, side.suffix(), build);
public static final String RAVEN_MAVEN_GROUP = "net.ornithemc";
public static final String RAVEN = RAVEN_MAVEN_GROUP + ":raven:%s%s+build.%s";
public static String raven(String mc, GameSide side, String build) {
return String.format(RAVEN, mc, side.suffix(), build);
}

public static final String SPARROW_MAVEN_GROUP = "net.ornithemc";
Expand All @@ -67,6 +70,12 @@ public static String sparrow(String mc, GameSide side, String build) {
return String.format(SPARROW, mc, side.suffix(), build);
}

public static final String NESTS_MAVEN_GROUP = "net.ornithemc";
public static final String NESTS = NESTS_MAVEN_GROUP + ":nests:%s%s+build.%s";
public static String nests(String mc, GameSide side, String build) {
return String.format(NESTS, mc, side.suffix(), build);
}

public static final String MANIFEST_PATH = "META-INF/MANIFEST.MF";
public static final String CALAMUS_GENERATION_ATTRIBUTE = "Calamus-Generation";

Expand Down
94 changes: 66 additions & 28 deletions src/main/java/net/ornithemc/ploceus/PloceusGradleExtension.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@

import net.ornithemc.ploceus.api.GameSide;
import net.ornithemc.ploceus.api.PloceusGradleExtensionApi;
import net.ornithemc.ploceus.exceptions.ExceptionPatcherProcessor;
import net.ornithemc.ploceus.exceptions.ExceptionsProvider;
import net.ornithemc.ploceus.manifest.VersionDetails;
import net.ornithemc.ploceus.manifest.VersionsManifest;
import net.ornithemc.ploceus.mappings.CalamusGen1Provider;
Expand All @@ -39,7 +41,7 @@
import net.ornithemc.ploceus.nester.NestsMappingSpec;
import net.ornithemc.ploceus.nester.NestsProvider;
import net.ornithemc.ploceus.signatures.SignaturePatcherProcessor;
import net.ornithemc.ploceus.signatures.SigsProvider;
import net.ornithemc.ploceus.signatures.SignaturesProvider;

public class PloceusGradleExtension implements PloceusGradleExtensionApi {

Expand All @@ -53,8 +55,9 @@ public static PloceusGradleExtension get(Project project) {
private final LoomGradleExtension loom;
private final OslVersionCache oslVersions;
private final CommonLibraries commonLibraries;
private final Property<ExceptionsProvider> exceptionsProvider;
private final Property<SignaturesProvider> signaturesProvider;
private final Property<NestsProvider> nestsProvider;
private final Property<SigsProvider> sigsProvider;
private final Property<GameSide> side; // gen 1
private final Property<Integer> generation; // gen 2+

Expand All @@ -63,6 +66,30 @@ public PloceusGradleExtension(Project project) {
this.loom = LoomGradleExtension.get(this.project);
this.oslVersions = new OslVersionCache(this.project, this);
this.commonLibraries = new CommonLibraries(this.project, this);
this.exceptionsProvider = project.getObjects().property(ExceptionsProvider.class);
this.exceptionsProvider.convention(project.provider(() -> {
ExceptionsProvider provider;
if (loom.getMinecraftProvider().isLegacyVersion()) {
provider = new ExceptionsProvider.Split(project, loom, this);
} else {
provider = new ExceptionsProvider.Simple(project, loom, this);
}
provider.provide();

return provider;
}));
this.signaturesProvider = project.getObjects().property(SignaturesProvider.class);
this.signaturesProvider.convention(project.provider(() -> {
SignaturesProvider provider;
if (loom.getMinecraftProvider().isLegacyVersion()) {
provider = new SignaturesProvider.Split(project, loom, this);
} else {
provider = new SignaturesProvider.Simple(project, loom, this);
}
provider.provide();

return provider;
}));
this.nestsProvider = project.getObjects().property(NestsProvider.class);
this.nestsProvider.convention(project.provider(() -> {
NestsProvider provider;
Expand All @@ -79,18 +106,6 @@ public PloceusGradleExtension(Project project) {

return provider;
}));
this.sigsProvider = project.getObjects().property(SigsProvider.class);
this.sigsProvider.convention(project.provider(() -> {
SigsProvider provider;
if (loom.getMinecraftProvider().isLegacyVersion()) {
provider = new SigsProvider.Split(project, loom, this);
} else {
provider = new SigsProvider.Simple(project, loom, this);
}
provider.provide();

return provider;
}));
this.nestsProvider.finalizeValueOnRead();
this.side = project.getObjects().property(GameSide.class);
this.side.convention(GameSide.MERGED);
Expand All @@ -101,16 +116,20 @@ public PloceusGradleExtension(Project project) {
}

private void apply() {
project.getConfigurations().register(Constants.NESTS_CONFIGURATION);
project.getConfigurations().register(Constants.CLIENT_NESTS_CONFIGURATION);
project.getConfigurations().register(Constants.SERVER_NESTS_CONFIGURATION);
project.getConfigurations().register(Constants.EXCEPTIONS_CONFIGURATION);
project.getConfigurations().register(Constants.CLIENT_EXCEPTIONS_CONFIGURATION);
project.getConfigurations().register(Constants.SERVER_EXCEPTIONS_CONFIGURATION);
project.getConfigurations().register(Constants.SIGNATURES_CONFIGURATION);
project.getConfigurations().register(Constants.CLIENT_SIGNATURES_CONFIGURATION);
project.getConfigurations().register(Constants.SERVER_SIGNATURES_CONFIGURATION);
project.getConfigurations().register(Constants.NESTS_CONFIGURATION);
project.getConfigurations().register(Constants.CLIENT_NESTS_CONFIGURATION);
project.getConfigurations().register(Constants.SERVER_NESTS_CONFIGURATION);

loom.getVersionsManifests().add(Constants.VERSIONS_MANIFEST_URL, -10);
loom.addMinecraftJarProcessor(NesterProcessor.class, this);
loom.addMinecraftJarProcessor(ExceptionPatcherProcessor.class, this);
loom.addMinecraftJarProcessor(SignaturePatcherProcessor.class, this);
loom.addMinecraftJarProcessor(NesterProcessor.class, this);

project.getTasks().configureEach(task -> {
if (task instanceof AbstractRemapJarTask remapJarTask) {
Expand All @@ -137,12 +156,16 @@ private void apply() {
calamusGen1Provider();
}

public NestsProvider getNestsProvider() {
return nestsProvider.get();
public ExceptionsProvider getExceptionsProvider() {
return exceptionsProvider.get();
}

public SigsProvider getSigsProvider() {
return sigsProvider.get();
public SignaturesProvider getSignaturesProvider() {
return signaturesProvider.get();
}

public NestsProvider getNestsProvider() {
return nestsProvider.get();
}

@Override
Expand Down Expand Up @@ -199,18 +222,18 @@ private Dependency layeredMappings(Action<LayeredMappingSpecBuilder> action) {
}

@Override
public Dependency nests(String build) {
return nests(build, generation.get() == 1 ? side.get() : GameSide.MERGED);
public Dependency raven(String build) {
return raven(build, generation.get() == 1 ? side.get() : GameSide.MERGED);
}

@Override
public Dependency nests(String build, String side) {
return nests(build, GameSide.of(side));
public Dependency raven(String build, String side) {
return raven(build, GameSide.of(side));
}

@Override
public Dependency nests(String build, GameSide side) {
return project.getDependencies().create(Constants.nests(minecraftVersion(), side, build));
public Dependency raven(String build, GameSide side) {
return project.getDependencies().create(Constants.raven(minecraftVersion(), side, build));
}

@Override
Expand All @@ -228,6 +251,21 @@ public Dependency sparrow(String build, GameSide side) {
return project.getDependencies().create(Constants.sparrow(minecraftVersion(), side, build));
}

@Override
public Dependency nests(String build) {
return nests(build, generation.get() == 1 ? side.get() : GameSide.MERGED);
}

@Override
public Dependency nests(String build, String side) {
return nests(build, GameSide.of(side));
}

@Override
public Dependency nests(String build, GameSide side) {
return project.getDependencies().create(Constants.nests(minecraftVersion(), side, build));
}

@Override
public void dependOsl(String version) throws Exception {
dependOsl(version, GameSide.MERGED);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@

import org.gradle.api.artifacts.Dependency;

import net.ornithemc.ploceus.mcp.McpForgeMappingsSpec;
import net.ornithemc.ploceus.mcp.McpModernMappingsSpec;

public interface PloceusGradleExtensionApi {

Dependency featherMappings(String build);
Expand All @@ -17,18 +14,24 @@ public interface PloceusGradleExtensionApi {

Dependency mcpForgeMappings(String mc, String version);

Dependency nests(String build);
Dependency raven(String build);

Dependency nests(String build, String side);
Dependency raven(String build, String side);

Dependency nests(String build, GameSide side);
Dependency raven(String build, GameSide side);

Dependency sparrow(String build);

Dependency sparrow(String build, String side);

Dependency sparrow(String build, GameSide side);

Dependency nests(String build);

Dependency nests(String build, String side);

Dependency nests(String build, GameSide side);

void dependOsl(String version) throws Exception;

void dependOsl(String version, String side) throws Exception;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package net.ornithemc.ploceus.exceptions;

import java.io.IOException;
import java.nio.file.Path;

import javax.inject.Inject;

import net.fabricmc.loom.api.mappings.layered.MappingsNamespace;
import net.fabricmc.loom.api.processor.MinecraftJarProcessor;
import net.fabricmc.loom.api.processor.ProcessorContext;
import net.fabricmc.loom.api.processor.SpecContext;
import net.fabricmc.mappingio.tree.MappingTree;

import net.ornithemc.exceptor.Exceptor;
import net.ornithemc.exceptor.io.ExceptionsFile;
import net.ornithemc.ploceus.PloceusGradleExtension;

public class ExceptionPatcherProcessor implements MinecraftJarProcessor<ExceptionPatcherProcessor.Spec> {

private final PloceusGradleExtension ploceus;

@Inject
public ExceptionPatcherProcessor(PloceusGradleExtension ploceus) {
this.ploceus = ploceus;
}

@Override
public String getName() {
return "ploceus:exception_patcher";
}

@Override
public Spec buildSpec(SpecContext context) {
ExceptionsProvider excs = ploceus.getExceptionsProvider();
return excs.isPresent() ? new Spec(excs) : null;
}

@Override
public void processJar(Path jar, Spec spec, ProcessorContext ctx) throws IOException {
try {
MappingTree mappings = ctx.getMappings();
ExceptionsFile excs = ploceus.getExceptionsProvider().get(mappings, MappingsNamespace.NAMED);

Exceptor.apply(jar, excs);
} catch (IOException e) {
throw new IOException("failed to patch exceptions!", e);
}
}

public static class Spec implements MinecraftJarProcessor.Spec {

private final ExceptionsProvider excs;

private Integer hashCode;

public Spec(ExceptionsProvider excs) {
this.excs = excs;
}

@Override
public int hashCode() {
if (hashCode == null) {
hashCode = excs.hashCode();
}

return hashCode;
}
}
}
Loading

0 comments on commit 0d9e112

Please sign in to comment.