Skip to content

Commit

Permalink
Update to Modlauncher 10.1 APIs / Gradleutils 3 (#2)
Browse files Browse the repository at this point in the history
  • Loading branch information
shartte authored Mar 28, 2024
1 parent 6d03ce5 commit 44da517
Show file tree
Hide file tree
Showing 10 changed files with 112 additions and 70 deletions.
31 changes: 12 additions & 19 deletions .github/workflows/build-prs.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# File generated by the GradleUtils `setupGitHubActionsWorkflows` task, avoid modifying it directly
# The template can be found at https://github.com/neoforged/GradleUtils/blob/44d9e09cfa2c6032b84ac40495ea5ab7d64fe521/src/actionsTemplate/resources/.github/workflows/build-prs.yml

name: Build and test PRs

on:
Expand All @@ -7,24 +10,14 @@ on:
- opened
- ready_for_review
- reopened
push:
branches:
- 'feature/**'
workflow_dispatch:

jobs:
jdk17:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1000
fetch-tags: true

- name: Setup JDK 17
uses: actions/setup-java@v2
with:
java-version: '17'
distribution: 'temurin'

- name: Build with Gradle
uses: gradle/gradle-build-action@v2
with:
arguments: build
build:
uses: neoforged/actions/.github/workflows/build-prs.yml@main
with:
java: 17
gradle_tasks: test
29 changes: 29 additions & 0 deletions .github/workflows/publish-prs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# File generated by the GradleUtils `setupGitHubActionsWorkflows` task, avoid modifying it directly
# The template can be found at https://github.com/neoforged/GradleUtils/blob/44d9e09cfa2c6032b84ac40495ea5ab7d64fe521/src/actionsTemplate/resources/.github/workflows/publish-prs.yml

name: Publish PRs to GitHub Packages

on:
workflow_run:
workflows: [Build and test PRs]
types:
- completed
issue_comment:
types:
- edited
pull_request_target:
types:
- opened

permissions:
packages: write

jobs:
publish-prs:
if: true
uses: neoforged/actions/.github/workflows/publish-prs.yml@main
with:
artifact_base_path: net/neoforged/CoreMods/
secrets:
PR_PUBLISHING_GH_APP_ID: ${{ secrets.PR_PUBLISHING_GH_APP_ID }}
PR_PUBLISHING_GH_APP_KEY: ${{ secrets.PR_PUBLISHING_GH_APP_KEY }}
17 changes: 10 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# File generated by the GradleUtils `setupGitHubActionsWorkflows` task, avoid modifying it directly
# The template can be found at https://github.com/neoforged/GradleUtils/blob/44d9e09cfa2c6032b84ac40495ea5ab7d64fe521/src/actionsTemplate/resources/.github/workflows/release.yml

name: Release

on:
Expand All @@ -9,17 +12,17 @@ permissions:
statuses: write

jobs:
build:
release:
uses: neoforged/actions/.github/workflows/gradle-publish.yml@main
with:
java: 17
pre_gradle_tasks: ':test'
gradle_tasks: ':publish'
pre_gradle_tasks: test
gradle_tasks: publish
secrets:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}

MAVEN_USER: ${{ secrets.MAVEN_USER }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}

GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
GPG_KEY_PASSWORD: ${{ secrets.GPG_KEY_PASSWORD }}
GPG_SUBKEY: ${{ secrets.GPG_SUBKEY }}
GPG_SUBKEY_ID: ${{ secrets.GPG_SUBKEY_ID }}
GPG_SUBKEY_PASSWORD: ${{ secrets.GPG_SUBKEY_PASSWORD }}

15 changes: 9 additions & 6 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
plugins {
id 'com.github.ben-manes.versions' version '0.39.0'
id 'net.neoforged.gradleutils' version '2.+'
id 'net.neoforged.gradleutils' version '3.0.0-alpha.10'
id 'signing'
}

Expand All @@ -12,7 +12,10 @@ group 'net.neoforged'

java.toolchain.languageVersion = JavaLanguageVersion.of(17)

version = gradleutils.getTagOffsetVersion()
version = gradleutils.version
gradleutils.version {
branches.suffixBranch()
}

ext.ASM_VERSION = 9.3

Expand Down Expand Up @@ -52,18 +55,18 @@ sourceSets {
}

changelog {
fromTag "6.0"
from "6.0"
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter-api:5.7.+')
testImplementation('org.powermock:powermock-core:2.0.+')
testImplementation('org.hamcrest:hamcrest-core:2.2')
testImplementation('org.apache.logging.log4j:log4j-core:2.14.1')
testImplementation('org.apache.logging.log4j:log4j-core:2.17.1')
testCompileOnly('org.jetbrains:annotations:21.0.1')
compileOnly('org.jetbrains:annotations:21.0.1')
testRuntimeOnly('org.junit.jupiter:junit-jupiter-engine:5.7.+')
testRuntimeOnly(sourceSets.testJars.output)
implementation('cpw.mods:modlauncher:9.0.24')
implementation('cpw.mods:modlauncher:10.1.10')
implementation('org.apache.logging.log4j:log4j-api:2.14.1')
implementation("org.ow2.asm:asm:${ASM_VERSION}")
implementation("org.ow2.asm:asm-commons:${ASM_VERSION}")
Expand Down Expand Up @@ -136,7 +139,7 @@ publishing {
}
}
repositories {
maven gradleutils.getPublishingForgeMaven()
maven gradleutils.publishingMaven
}
}

Expand Down
43 changes: 23 additions & 20 deletions src/main/java/net/neoforged/coremod/CoreMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
import net.neoforged.coremod.transformer.CoreModMethodTransformer;
import org.apache.logging.log4j.*;
import org.jetbrains.annotations.Nullable;
import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.FieldNode;
import org.objectweb.asm.tree.MethodNode;

import javax.script.*;
import java.io.*;
Expand Down Expand Up @@ -59,28 +62,28 @@ private ITransformer<?> buildCore(Map.Entry<String,? extends Bindings> entry) {
final String coreName = entry.getKey();
final Bindings data = entry.getValue();
final Map<String, Object> targetData = (Map<String, Object>)data.get("target");
final ITransformer.TargetType targetType = ITransformer.TargetType.valueOf((String)targetData.get("type"));
final Set<ITransformer.Target> targets;
final TargetType<?> targetType = TargetType.byName((String)targetData.get("type"));
final Bindings function = (Bindings)data.get("transformer");
switch (targetType) {
case CLASS:
if (targetData.containsKey("names")) {
Function<Map<String, Object>, Map<String, Object>> names = NashornFactory.getFunction((Bindings)targetData.get("names"));
targets = names.apply(targetData).values().stream().map(o -> (String)o).map(ITransformer.Target::targetClass).collect(Collectors.toSet());
} else
targets = Stream.of(ITransformer.Target.targetClass((String)targetData.get("name"))).collect(Collectors.toSet());
return new CoreModClassTransformer(this, coreName, targets, NashornFactory.getFunction(function));
case METHOD:
targets = Collections.singleton(ITransformer.Target.targetMethod(
(String) targetData.get("class"), ASMAPI.mapMethod((String) targetData.get("methodName")), (String) targetData.get("methodDesc")));
return new CoreModMethodTransformer(this, coreName, targets, NashornFactory.getFunction(function));
case FIELD:
targets = Collections.singleton(ITransformer.Target.targetField(
(String) targetData.get("class"), ASMAPI.mapField((String) targetData.get("fieldName"))));
return new CoreModFieldTransformer(this, coreName, targets, NashornFactory.getFunction(function));
default:
throw new RuntimeException("Unimplemented target type " + targetData);
if (targetType.equals(TargetType.CLASS)) {
Set<ITransformer.Target<ClassNode>> targets;
if (targetData.containsKey("names")) {
Function<Map<String, Object>, Map<String, Object>> names = NashornFactory.getFunction((Bindings) targetData.get("names"));
targets = names.apply(targetData).values().stream().map(o -> (String) o).map(ITransformer.Target::targetClass).collect(Collectors.toSet());
} else
targets = Stream.of(ITransformer.Target.targetClass((String) targetData.get("name"))).collect(Collectors.toSet());
return new CoreModClassTransformer(this, coreName, targets, NashornFactory.getFunction(function));
} else if (targetType.equals(TargetType.METHOD)) {
Set<ITransformer.Target<MethodNode>> targets;
targets = Collections.singleton(ITransformer.Target.targetMethod(
(String) targetData.get("class"), ASMAPI.mapMethod((String) targetData.get("methodName")), (String) targetData.get("methodDesc")));
return new CoreModMethodTransformer(this, coreName, targets, NashornFactory.getFunction(function));
} else if (targetType.equals(TargetType.FIELD)) {
Set<ITransformer.Target<FieldNode>> targets;
targets = Collections.singleton(ITransformer.Target.targetField(
(String) targetData.get("class"), ASMAPI.mapField((String) targetData.get("fieldName"))));
return new CoreModFieldTransformer(this, coreName, targets, NashornFactory.getFunction(function));
}
throw new RuntimeException("Unimplemented target type " + targetData);
}

public boolean hasError() {
Expand Down
14 changes: 2 additions & 12 deletions src/main/java/net/neoforged/coremod/api/ASMAPI.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package net.neoforged.coremod.api;

import cpw.mods.modlauncher.Launcher;
import cpw.mods.modlauncher.api.INameMappingService;
import net.neoforged.coremod.CoreModTracker;
import org.jetbrains.annotations.Nullable;
import org.objectweb.asm.Opcodes;
Expand All @@ -18,7 +16,6 @@
import java.util.Iterator;
import java.util.ListIterator;
import java.util.Objects;
import java.util.Optional;

public class ASMAPI {
public static MethodNode getMethodNode() {
Expand All @@ -42,18 +39,11 @@ public static MethodInsnNode buildMethodCall(final String ownerName, final Strin
}

public static String mapMethod(String name) {
return map(name, INameMappingService.Domain.METHOD);
return name;
}

public static String mapField(String name) {
return map(name, INameMappingService.Domain.FIELD);
}

private static String map(String name, INameMappingService.Domain domain) {
return Optional.ofNullable(Launcher.INSTANCE).
map(Launcher::environment).
flatMap(env->env.findNameMapping("srg")).
map(f -> f.apply(domain, name)).orElse(name);
return name;
}

public static boolean getSystemPropertyFlag(final String propertyName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ public abstract class CoreModBaseTransformer<T> implements ITransformer<T> {
static final Logger LOGGER = LogManager.getLogger();
static final Marker COREMOD = MarkerManager.getMarker("COREMOD");
final CoreMod coreMod;
final Set<Target> targets;
final Set<Target<T>> targets;
final Function<T, T> function;
final String coreName;

public CoreModBaseTransformer(CoreMod coreMod, final String coreName, final Set<Target> targets, final Function<T, T> function) {
public CoreModBaseTransformer(CoreMod coreMod, final String coreName, final Set<Target<T>> targets, final Function<T, T> function) {
this.coreMod = coreMod;
this.coreName = coreName;
this.targets = targets;
Expand Down Expand Up @@ -54,7 +54,7 @@ public TransformerVoteResult castVote(ITransformerVotingContext context) {

@NotNull
@Override
public Set<Target> targets() {
public Set<Target<T>> targets() {
return targets;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
package net.neoforged.coremod.transformer;

import cpw.mods.modlauncher.api.ITransformer;
import cpw.mods.modlauncher.api.TargetType;
import net.neoforged.coremod.CoreMod;
import org.jetbrains.annotations.NotNull;
import org.objectweb.asm.tree.ClassNode;

import java.util.Set;
import java.util.function.Function;

public class CoreModClassTransformer extends CoreModBaseTransformer<ClassNode> implements ITransformer<ClassNode> {
public CoreModClassTransformer(CoreMod coreMod, String coreName, Set<Target> targets, Function<ClassNode, ClassNode> function) {
public CoreModClassTransformer(CoreMod coreMod, String coreName, Set<Target<ClassNode>> targets, Function<ClassNode, ClassNode> function) {
super(coreMod, coreName, targets, function);
}

Expand All @@ -17,4 +19,9 @@ ClassNode runCoremod(ClassNode input) {
LOGGER.debug(COREMOD, "Transforming {}", input.name);
return function.apply(input);
}

@Override
public @NotNull TargetType<ClassNode> getTargetType() {
return TargetType.CLASS;
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,24 @@
package net.neoforged.coremod.transformer;

import cpw.mods.modlauncher.api.ITransformer;
import cpw.mods.modlauncher.api.TargetType;
import net.neoforged.coremod.CoreMod;
import org.jetbrains.annotations.NotNull;
import org.objectweb.asm.tree.FieldNode;

import java.util.Set;
import java.util.function.Function;

public class CoreModFieldTransformer extends CoreModBaseTransformer<FieldNode> implements ITransformer<FieldNode> {
public CoreModFieldTransformer(CoreMod coreMod, String coreName, Set<Target> targets, Function<FieldNode, FieldNode> function) {
public CoreModFieldTransformer(CoreMod coreMod, String coreName, Set<Target<FieldNode>> targets, Function<FieldNode, FieldNode> function) {
super(coreMod, coreName, targets, function);
}

@Override
public @NotNull TargetType<FieldNode> getTargetType() {
return TargetType.FIELD;
}

@Override
FieldNode runCoremod(FieldNode input) {
LOGGER.debug(COREMOD, "Transforming {} with desc {}", input.name, input.desc);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,24 @@
package net.neoforged.coremod.transformer;

import cpw.mods.modlauncher.api.ITransformer;
import cpw.mods.modlauncher.api.TargetType;
import net.neoforged.coremod.CoreMod;
import org.jetbrains.annotations.NotNull;
import org.objectweb.asm.tree.MethodNode;

import java.util.Set;
import java.util.function.Function;

public class CoreModMethodTransformer extends CoreModBaseTransformer<MethodNode> implements ITransformer<MethodNode> {
public CoreModMethodTransformer(CoreMod coreMod, String coreName, Set<Target> targets, Function<MethodNode, MethodNode> function) {
public CoreModMethodTransformer(CoreMod coreMod, String coreName, Set<Target<MethodNode>> targets, Function<MethodNode, MethodNode> function) {
super(coreMod, coreName, targets, function);
}

@Override
public @NotNull TargetType<MethodNode> getTargetType() {
return TargetType.METHOD;
}

@Override
MethodNode runCoremod(MethodNode input) {
LOGGER.debug(COREMOD, "Transforming {} with desc {}", input.name, input.desc);
Expand Down

0 comments on commit 44da517

Please sign in to comment.