Skip to content
This repository was archived by the owner on May 12, 2024. It is now read-only.

Commit de0dbc6

Browse files
committed
Added spoofJavaVersion option to bootstrap
1 parent 92f0e8b commit de0dbc6

4 files changed

Lines changed: 47 additions & 9 deletions

File tree

bootstrap/src/main/java/net/raphimc/javadowngrader/bootstrap/AgentMain.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import net.raphimc.javadowngrader.impl.classtransform.util.ClassNameUtil;
2424
import net.raphimc.javadowngrader.runtime.RuntimeRoot;
2525
import net.raphimc.javadowngrader.util.Constants;
26+
import net.raphimc.javadowngrader.util.JavaVersion;
2627

2728
import java.io.IOException;
2829
import java.io.UncheckedIOException;
@@ -65,6 +66,17 @@ public static void agentmain(String args, Instrumentation instrumentation) throw
6566
final TransformerManager transformerManager = new TransformerManager(new InstrumentationClassProvider(instrumentation));
6667
transformerManager.addBytecodeTransformer(new JavaDowngraderTransformer(transformerManager));
6768
transformerManager.hookInstrumentation(instrumentation);
69+
70+
if (System.getProperty("spoofJavaVersion") != null) {
71+
final JavaVersion spoofedJavaVersion = JavaVersion.getByName(System.getProperty("spoofJavaVersion"));
72+
if (spoofedJavaVersion == null) {
73+
System.err.println("Unable to find version '" + System.getProperty("spoofJavaVersion") + "'");
74+
System.exit(-1);
75+
}
76+
System.setProperty("java.version", spoofedJavaVersion.getFakeJavaVersionName());
77+
System.setProperty("java.class.version", String.valueOf(spoofedJavaVersion.getVersion()));
78+
System.setProperty("java.specification.version", spoofedJavaVersion.getFakeSpecificationVersionName());
79+
}
6880
}
6981

7082
}

standalone/src/main/java/net/raphimc/javadowngrader/standalone/JavaVersion.java renamed to src/main/java/net/raphimc/javadowngrader/util/JavaVersion.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* You should have received a copy of the GNU General Public License
1616
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
18-
package net.raphimc.javadowngrader.standalone;
18+
package net.raphimc.javadowngrader.util;
1919

2020
import org.objectweb.asm.Opcodes;
2121

@@ -37,14 +37,14 @@ public enum JavaVersion {
3737
JAVA_21("21", Opcodes.V21),
3838
;
3939

40+
private final String name;
41+
private final int version;
42+
4043
JavaVersion(final String name, final int version) {
4144
this.name = name;
4245
this.version = version;
4346
}
4447

45-
private final String name;
46-
private final int version;
47-
4848
public String getName() {
4949
return this.name;
5050
}
@@ -53,4 +53,28 @@ public int getVersion() {
5353
return this.version;
5454
}
5555

56+
public String getFakeJavaVersionName() {
57+
if (this.ordinal() <= JAVA_8.ordinal()) {
58+
return "1." + this.name + ".0";
59+
} else {
60+
return this.version + ".0.0";
61+
}
62+
}
63+
64+
public String getFakeSpecificationVersionName() {
65+
if (this.ordinal() <= JAVA_8.ordinal()) {
66+
return "1." + this.name;
67+
} else {
68+
return this.name;
69+
}
70+
}
71+
72+
public static JavaVersion getByName(String name) {
73+
name = name.toLowerCase().replace("java", "").replace("j", "");
74+
for (JavaVersion version : JavaVersion.values()) {
75+
if (version.getName().equalsIgnoreCase(name)) return version;
76+
}
77+
return null;
78+
}
79+
5680
}

standalone/src/main/java/net/raphimc/javadowngrader/standalone/JavaVersionEnumConverter.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,19 @@
1919

2020
import joptsimple.ValueConversionException;
2121
import joptsimple.ValueConverter;
22+
import net.raphimc.javadowngrader.util.JavaVersion;
2223

2324
import java.util.StringJoiner;
2425

2526
public class JavaVersionEnumConverter implements ValueConverter<JavaVersion> {
2627

2728
@Override
28-
public JavaVersion convert(String s) {
29-
final String input = s.toLowerCase().replace("java", "").replace("j", "");
30-
for (JavaVersion version : JavaVersion.values()) {
31-
if (version.getName().equalsIgnoreCase(input)) return version;
29+
public JavaVersion convert(final String name) {
30+
final JavaVersion version = JavaVersion.getByName(name);
31+
if (version == null) {
32+
throw new ValueConversionException("Unable to find version '" + name + "'");
3233
}
33-
throw new ValueConversionException("Unable to find version '" + s + "'");
34+
return version;
3435
}
3536

3637
@Override

standalone/src/main/java/net/raphimc/javadowngrader/standalone/Main.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import net.raphimc.javadowngrader.runtime.RuntimeRoot;
3030
import net.raphimc.javadowngrader.standalone.progress.MultiThreadedProgressBar;
3131
import net.raphimc.javadowngrader.standalone.util.GeneralUtil;
32+
import net.raphimc.javadowngrader.util.JavaVersion;
3233
import org.slf4j.Logger;
3334
import org.slf4j.LoggerFactory;
3435

0 commit comments

Comments
 (0)