Skip to content

Commit 4b28ed9

Browse files
committed
Restore mods folder support
Remove launch wrappers Modernize gradle and move to github actions
1 parent 6d7b866 commit 4b28ed9

12 files changed

Lines changed: 200 additions & 228 deletions

File tree

‎.github/workflows/publish.yml‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Publish
2+
3+
on:
4+
push:
5+
branches: [ "master" ]
6+
paths-ignore:
7+
- '.github/workflows/**'
8+
- 'README.md'
9+
- 'settings.gradle'
10+
11+
permissions:
12+
contents: read
13+
14+
jobs:
15+
build:
16+
uses: MinecraftForge/SharedActions/.github/workflows/gradle.yml@v0
17+
with:
18+
java: 17
19+
gradle_tasks: "publish"
20+
artifact_name: "legacyjavafixer"
21+
secrets:
22+
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
23+
PROMOTE_ARTIFACT_WEBHOOK: ${{ secrets.PROMOTE_ARTIFACT_WEBHOOK }}
24+
PROMOTE_ARTIFACT_USERNAME: ${{ secrets.PROMOTE_ARTIFACT_USERNAME }}
25+
PROMOTE_ARTIFACT_PASSWORD: ${{ secrets.PROMOTE_ARTIFACT_PASSWORD }}
26+
MAVEN_USER: ${{ secrets.MAVEN_USER }}
27+
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
28+
GRADLE_CACHE_KEY: ${{ secrets.GRADLE_CACHE_KEY }}

‎.gitignore‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,6 @@
2020
# Include git important files
2121
!.gitmodules
2222
!.gitignore
23+
24+
# Include github workflow
25+
!.github/

‎Jenkinsfile‎

Lines changed: 0 additions & 85 deletions
This file was deleted.

‎LICENSE-header.txt‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Copyright (c) LexManos
2+
SPDX-License-Identifier: MIT

‎README.md‎

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,39 @@
11
LegacyJavaFixer
22
===============
3+
This fixes a concurrent modification exception that is caused by the
4+
default implementation of Collections.sort being changed in https://bugs.openjdk.org/browse/JDK-8032636.
5+
This is not required on modern Forge versions, so verify before using.
6+
7+
Here is an example of the error fixed by this.
8+
```ascii
9+
[INFO] [ForgeModLoader] Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
10+
[SEVERE] [ForgeModLoader] Unable to launch
11+
java.util.ConcurrentModificationException
12+
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:911)
13+
at java.util.ArrayList$Itr.remove(ArrayList.java:875)
14+
at net.minecraft.launchwrapper.Launch.launch(Launch.java:114)
15+
at net.minecraft.launchwrapper.Launch.main(Launch.java:27)
16+
at net.minecraftforge.launcher.Main$Launcher.run(Main.java:282)
17+
at net.minecraftforge.launcher.Main$Launcher.access$000(Main.java:268)
18+
at net.minecraftforge.launcher.Main.main(Main.java:57)
19+
```
20+
21+
To use this in production, just place the jar in your mods folder. It will be loaded as a CoreMod.
22+
23+
For dev time, it can be used by adding `net.minecraftforge.legacyjavafixer.LoadingPlugin` to the `fml.coreMods.load` environement variable.
24+
25+
FG7 example:
26+
```groovy
27+
minecraft {
28+
runs {
29+
configureEach {
30+
systemProperty 'fml.coreMods.load', 'net.minecraftforge.legacyjavafixer.LoadingPlugin'
31+
}
32+
}
33+
}
34+
35+
dependencies {
36+
implementation 'net.minecraftforge:legacyjavafixer:2.0.1'
37+
}
38+
```
339

4-
Coremod to fix older FML/Forge versions for the broken Java 8_20 build.

‎build.gradle‎

Lines changed: 68 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,90 @@
1-
buildscript {
2-
repositories {
3-
mavenLocal()
4-
jcenter()
5-
maven { url "https://maven.minecraftforge.net/" }
6-
}
7-
dependencies {
8-
classpath 'net.minecraftforge.gradleutils:GradleUtils:1.0.+'
9-
}
10-
}
11-
121
plugins {
13-
id 'java'
14-
id 'eclipse'
2+
id 'java-library'
153
id 'maven-publish'
4+
alias libs.plugins.licenser
5+
alias libs.plugins.gitversion
6+
alias libs.plugins.gradleutils
7+
alias libs.plugins.forgegradle
168
}
179

18-
apply plugin: 'net.minecraftforge.gradleutils'
19-
20-
java.toolchain.languageVersion = JavaLanguageVersion.of(7)
21-
22-
version = gradleutils.tagOffsetVersion
10+
gradleutils.displayName = 'Legacy Java Fixer'
11+
description = 'A tweaker that fixes legacy Forge versions for the sorting change in java 8u20'
12+
version = gitversion.tagOffset
2313
group = 'net.minecraftforge'
24-
archivesBaseName = 'legacyjavafixer'
14+
println "Version: $version"
15+
16+
java {
17+
toolchain.languageVersion = JavaLanguageVersion.of(8)
18+
}
2519

2620
repositories {
21+
minecraft.mavenizer(it)
2722
mavenCentral()
28-
maven {
29-
url = 'https://maven.minecraftforge.net/'
30-
metadataSources {
31-
gradleMetadata()
32-
mavenPom()
33-
artifact()
23+
maven gradleutils.forgeMaven
24+
maven { url = 'https://libraries.minecraft.net/' }
25+
}
26+
27+
minecraft {
28+
runs {
29+
configureEach {
30+
systemProperty 'fml.coreMods.load', 'net.minecraftforge.legacyjavafixer.LoadingPlugin'
31+
}
32+
register('client') {
33+
workingDir = file('runs/main/client/')
34+
systemProperty 'fml.ignoreInvalidMinecraftCertificates', 'true'
3435
}
3536
}
36-
maven { url = 'https://libraries.minecraft.net/' }
3737
}
3838

3939
dependencies {
40-
implementation 'net.minecraft:launchwrapper:1.11'
41-
implementation 'com.google.guava:guava:16.0'
42-
implementation 'net.minecraftforge:forge:1.7.10-10.13.1.1225:universal'
40+
// We just need the classes to compile against, but include the full thing so we can test run configs
41+
implementation minecraft.dependency(libs.forge)
4342
}
4443

44+
license {
45+
header rootProject.file('LICENSE-header.txt')
46+
newLine false
47+
}
48+
49+
tasks.withType(JavaCompile).configureEach {
50+
options.encoding = 'UTF-8'
51+
}
52+
53+
54+
tasks.named('jar', Jar) {
55+
manifest {
56+
attributes(
57+
'TweakClass': 'net.minecraftforge.legacyjavafixer.Tweaker',
58+
'TweakOrder': -2147483648
59+
)
60+
}
61+
}
4562

4663
publishing {
47-
publications {
48-
mavenJava(MavenPublication) {
49-
groupId project.group
50-
artifactId project.archivesBaseName
51-
version project.version
52-
artifact jar
64+
publications.register('mavenJava', MavenPublication) {
65+
// This causes it to skip any transitive dependencies in the pom
66+
artifact tasks.named('jar')
67+
68+
gradleutils.promote(it)
69+
70+
pom { pom ->
71+
name = gradleutils.displayName
72+
description = project.description
73+
74+
gradleutils.pom.addRemoteDetails(pom)
75+
76+
licenses {
77+
license gradleutils.pom.licenses.MIT
78+
}
79+
80+
developers {
81+
developer gradleutils.pom.developers.LexManos
82+
}
5383
}
5484
}
85+
5586
repositories {
56-
maven {
57-
if (project.hasProperty('forgeMavenPassword')) {
58-
credentials {
59-
username project.properties.forgeMavenUser
60-
password project.properties.forgeMavenPassword
61-
}
62-
url 'https://files.minecraftforge.net/maven/manage/upload'
63-
} else {
64-
url 'file://' + rootProject.file('repo').getAbsolutePath()
65-
}
66-
}
87+
maven gradleutils.publishingForgeMaven
6788
}
6889
}
90+
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.0-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

‎settings.gradle‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
plugins {
2+
id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0'
3+
}
4+
5+
rootProject.name = 'legacyjavafixer'
6+
7+
//formatter:off
8+
dependencyResolutionManagement.versionCatalogs.register('libs') {
9+
plugin 'licenser', 'net.minecraftforge.licenser' version '1.2.0'
10+
plugin 'gradleutils', 'net.minecraftforge.gradleutils' version '3.3.21'
11+
plugin 'gitversion', 'net.minecraftforge.gitversion' version '3.1.6'
12+
plugin 'forgegradle', 'net.minecraftforge.gradle' version '7.0.40'
13+
14+
library 'launchwrapper', 'net.minecraft', 'launchwrapper' version '1.11'
15+
library 'forge', 'net.minecraftforge', 'forge' version '1.6.4-9.11.1.964'
16+
}
17+
//formatter:on

src/main/java/net/minecraftforge/legacyjavafixer/sort/LegacyJavaSortDummyLoadingPlugin.java renamed to src/main/java/net/minecraftforge/legacyjavafixer/LoadingPlugin.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
package net.minecraftforge.legacyjavafixer.sort;
1+
/*
2+
* Copyright (c) LexManos
3+
* SPDX-License-Identifier: MIT
4+
*/
5+
package net.minecraftforge.legacyjavafixer;
26

37
import cpw.mods.fml.relauncher.IFMLLoadingPlugin;
48
import net.minecraft.launchwrapper.Launch;
@@ -9,17 +13,14 @@
913
/**
1014
* Used as a dummy plugin to add our cascading tweaker.
1115
* This allows us to provide this tweaker via the '-Dfml.coreMods.load' system property.
12-
* <p>
13-
* Created by covers1624 on 1/6/21.
1416
*/
15-
@IFMLLoadingPlugin.SortingIndex (-2147483648)
16-
public class LegacyJavaSortDummyLoadingPlugin implements IFMLLoadingPlugin {
17-
18-
public LegacyJavaSortDummyLoadingPlugin() {
17+
@IFMLLoadingPlugin.SortingIndex(-2147483648)
18+
public class LoadingPlugin implements IFMLLoadingPlugin {
19+
public LoadingPlugin() {
1920
@SuppressWarnings ("unchecked")
2021
List<String> tweakClasses = (List<String>) Launch.blackboard.get("TweakClasses");
2122
// Add our tweaker to LaunchWrapper, this is done the same as FMLTweaker
22-
tweakClasses.add("net.minecraftforge.legacyjavafixer.sort.LegacyJavaSortTweaker");
23+
tweakClasses.add("net.minecraftforge.legacyjavafixer.Tweaker");
2324
}
2425

2526
//@formatter:off
@@ -28,6 +29,6 @@ public LegacyJavaSortDummyLoadingPlugin() {
2829
@Override public String getModContainerClass() { return null; }
2930
@Override public String getSetupClass() { return null; }
3031
@Override public void injectData(Map<String, Object> map) { }
31-
@Override public String getAccessTransformerClass() { return null; }
32+
public String getAccessTransformerClass() { return null; } // Added in 1.7.10
3233
//@formatter:on
3334
}

0 commit comments

Comments
 (0)