Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update to Modlauncher 10.1 APIs / Gradleutils 3 #2

Merged
merged 5 commits into from
Mar 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading