Skip to content

Commit f78fea3

Browse files
committed
1.13 fixes and Rift access transformers
1 parent ee3e3df commit f78fea3

12 files changed

Lines changed: 491 additions & 255 deletions

File tree

build.gradle

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ buildscript {
66
}
77
dependencies {
88
classpath "com.gradle.publish:plugin-publish-plugin:0.9.1"
9-
classpath 'nl.javadude.gradle.plugins:license-gradle-plugin:0.11.0'
9+
// classpath 'nl.javadude.gradle.plugins:license-gradle-plugin:0.11.0'
1010
}
1111
}
1212

@@ -15,7 +15,7 @@ apply plugin: 'idea'
1515
apply plugin: 'eclipse'
1616
apply plugin: 'maven'
1717
apply plugin: "com.gradle.plugin-publish"
18-
apply plugin: 'license'
18+
//apply plugin: 'license'
1919

2020
group = 'net.minecraftforge.gradle'
2121
version = '2.3-SNAPSHOT'
@@ -180,27 +180,6 @@ test {
180180
exclude "**/ExtensionMcpMappingTest*"
181181
}
182182

183-
license {
184-
ext {
185-
description = 'A Gradle plugin for the creation of Minecraft mods and MinecraftForge plugins.'
186-
year = '2013-' + Calendar.getInstance().get(Calendar.YEAR)
187-
fullname = 'Minecraft Forge'
188-
}
189-
header rootProject.file('HEADER')
190-
include '**net/minecraftforge/gradle/**/*.java'
191-
excludes ([
192-
'**net/minecraftforge/gradle/util/ZipFileTree.java',
193-
'**net/minecraftforge/gradle/util/json/version/*',
194-
'**net/minecraftforge/gradle/util/patching/Base64.java',
195-
'**net/minecraftforge/gradle/util/patching/ContextualPatch.java'
196-
])
197-
ignoreFailures false
198-
strictCheck true
199-
mapping {
200-
java = 'SLASHSTAR_STYLE'
201-
}
202-
}
203-
204183
pluginBundle {
205184
website = 'http://www.gradle.org/'
206185
vcsUrl = 'https://github.com/MinecraftForge/ForgeGradle'

src/main/java/net/minecraftforge/gradle/common/BaseExtension.java

Lines changed: 1 addition & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import java.net.URL;
3131
import java.util.Arrays;
3232
import java.util.Map;
33-
import java.util.Map.Entry;
3433

3534
public abstract class BaseExtension
3635
{
@@ -248,79 +247,8 @@ public void setMappings(String mappings)
248247
checkMappings();
249248
}
250249

251-
/**
252-
* Checks that the set mappings are valid based on the channel, version, and MC version.
253-
* If the mappings are invalid, this method will throw a runtime exception.
254-
*/
255-
protected void checkMappings()
256-
{
257-
258-
if (!Strings.isNullOrEmpty(version)
259-
&& (compareVersion(version, MIN_VERSION) < 0 || compareVersion(version, MAX_VERSION) > 0)
260-
&& !suppressVersionTest)
261-
{
262-
// version not supported
263-
throw new GradleConfigurationException(String.format("ForgeGradle %s does not support Minecraft %s. MIN: %s, MAX: %s",
264-
forgeGradleVersion, version, MIN_VERSION, nullStringTo(MAX_VERSION, "none")));
265-
266-
}
267-
268-
// mappings or mc version are null
269-
if (mappingsChannel == null || Strings.isNullOrEmpty(version))
270-
return;
271-
272-
// set now.
250+
protected void checkMappings() {
273251
replacer.putReplacement(Constants.REPLACE_MCP_MCVERSION, version);
274-
275-
// gotta do this after setting the MC version
276-
if (mappingsCustom != null)
277-
return;
278-
279-
// check if it exists
280-
Map<String, int[]> versionMap = mcpJson.get(version);
281-
String channel = getMappingsChannelNoSubtype();
282-
if (versionMap != null)
283-
{
284-
int[] channelList = versionMap.get(channel);
285-
if (channelList == null)
286-
throw new GradleConfigurationException("There is no such MCP mapping channel named " + channel);
287-
288-
// all is well with the world
289-
if (searchArray(channelList, mappingsVersion))
290-
return;
291-
}
292-
293-
// if it gets here.. it wasnt found. Now we try to actually find it..
294-
for (Entry<String, Map<String, int[]>> mcEntry : mcpJson.entrySet())
295-
{
296-
for (Entry<String, int[]> channelEntry : mcEntry.getValue().entrySet())
297-
{
298-
// found it!
299-
if (searchArray(channelEntry.getValue(), mappingsVersion))
300-
{
301-
boolean rightMc = mcEntry.getKey().equals(version);
302-
boolean rightChannel = channelEntry.getKey().equals(channel);
303-
304-
// right channel, but wrong mc
305-
if (rightChannel && !rightMc)
306-
{
307-
project.getLogger().warn("This mapping '" + getMappings() + "' was designed for MC " + mcEntry.getKey() + "! Use at your own peril.");
308-
replacer.putReplacement(Constants.REPLACE_MCP_MCVERSION, mcEntry.getKey()); // set MC version
309-
return;
310-
// throw new GradleConfigurationException("This mapping '" + getMappings() + "' exists only for MC " + mcEntry.getKey() + "!");
311-
}
312-
313-
// right MC , but wrong channel
314-
else if (rightMc && !rightChannel)
315-
{
316-
throw new GradleConfigurationException("This mapping '" + getMappings() + "' doesnt exist! perhaps you meant '" + channelEntry.getKey() + "_" + mappingsVersion + "'");
317-
}
318-
}
319-
}
320-
}
321-
322-
// wasnt found
323-
throw new GradleConfigurationException("The specified mapping '" + getMappings() + "' does not exist!");
324252
}
325253

326254
@SuppressWarnings("unused")

src/main/java/net/minecraftforge/gradle/common/BasePlugin.java

Lines changed: 29 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -19,42 +19,9 @@
1919
*/
2020
package net.minecraftforge.gradle.common;
2121

22-
import static net.minecraftforge.gradle.common.Constants.*;
23-
24-
import java.io.File;
25-
import java.io.IOException;
26-
import java.io.InputStream;
27-
import java.lang.reflect.ParameterizedType;
28-
import java.lang.reflect.Type;
29-
import java.net.HttpURLConnection;
30-
import java.net.URL;
31-
import java.util.Collections;
32-
import java.util.List;
33-
import java.util.Map;
34-
35-
import net.minecraftforge.gradle.util.json.version.ManifestVersion;
36-
import org.gradle.api.Action;
37-
import org.gradle.api.DefaultTask;
38-
import org.gradle.api.Plugin;
39-
import org.gradle.api.Project;
40-
import org.gradle.api.Task;
41-
import org.gradle.api.artifacts.Configuration;
42-
import org.gradle.api.artifacts.Dependency;
43-
import org.gradle.api.artifacts.Configuration.State;
44-
import org.gradle.api.artifacts.dsl.DependencyHandler;
45-
import org.gradle.api.artifacts.repositories.FlatDirectoryArtifactRepository;
46-
import org.gradle.api.artifacts.repositories.MavenArtifactRepository;
47-
import org.gradle.api.logging.Logger;
48-
import org.gradle.api.logging.Logging;
49-
import org.gradle.api.plugins.ExtraPropertiesExtension;
50-
import org.gradle.api.specs.Spec;
51-
import org.gradle.api.tasks.Delete;
52-
import org.gradle.testfixtures.ProjectBuilder;
53-
5422
import com.google.common.base.Charsets;
5523
import com.google.common.base.Splitter;
5624
import com.google.common.base.Strings;
57-
import com.google.common.base.Throwables;
5825
import com.google.common.cache.CacheBuilder;
5926
import com.google.common.cache.CacheLoader;
6027
import com.google.common.cache.LoadingCache;
@@ -64,30 +31,43 @@
6431
import com.google.common.io.ByteStreams;
6532
import com.google.common.io.Files;
6633
import com.google.gson.reflect.TypeToken;
67-
6834
import groovy.lang.Closure;
69-
import net.minecraftforge.gradle.tasks.CrowdinDownload;
70-
import net.minecraftforge.gradle.tasks.Download;
71-
import net.minecraftforge.gradle.tasks.DownloadAssetsTask;
72-
import net.minecraftforge.gradle.tasks.EtagDownloadTask;
73-
import net.minecraftforge.gradle.tasks.ExtractConfigTask;
74-
import net.minecraftforge.gradle.tasks.GenSrgs;
75-
import net.minecraftforge.gradle.tasks.JenkinsChangelog;
76-
import net.minecraftforge.gradle.tasks.MergeJars;
77-
import net.minecraftforge.gradle.tasks.SignJar;
78-
import net.minecraftforge.gradle.tasks.SplitJarTask;
35+
import net.minecraftforge.gradle.tasks.*;
7936
import net.minecraftforge.gradle.util.FileLogListenner;
8037
import net.minecraftforge.gradle.util.GradleConfigurationException;
81-
import net.minecraftforge.gradle.util.delayed.DelayedFile;
82-
import net.minecraftforge.gradle.util.delayed.DelayedFileTree;
83-
import net.minecraftforge.gradle.util.delayed.DelayedString;
84-
import net.minecraftforge.gradle.util.delayed.ReplacementProvider;
85-
import net.minecraftforge.gradle.util.delayed.TokenReplacer;
38+
import net.minecraftforge.gradle.util.delayed.*;
8639
import net.minecraftforge.gradle.util.json.JsonFactory;
8740
import net.minecraftforge.gradle.util.json.fgversion.FGBuildStatus;
8841
import net.minecraftforge.gradle.util.json.fgversion.FGVersion;
8942
import net.minecraftforge.gradle.util.json.fgversion.FGVersionWrapper;
43+
import net.minecraftforge.gradle.util.json.version.ManifestVersion;
9044
import net.minecraftforge.gradle.util.json.version.Version;
45+
import org.gradle.api.*;
46+
import org.gradle.api.artifacts.Configuration;
47+
import org.gradle.api.artifacts.Configuration.State;
48+
import org.gradle.api.artifacts.Dependency;
49+
import org.gradle.api.artifacts.dsl.DependencyHandler;
50+
import org.gradle.api.artifacts.repositories.FlatDirectoryArtifactRepository;
51+
import org.gradle.api.artifacts.repositories.MavenArtifactRepository;
52+
import org.gradle.api.logging.Logger;
53+
import org.gradle.api.logging.Logging;
54+
import org.gradle.api.plugins.ExtraPropertiesExtension;
55+
import org.gradle.api.specs.Spec;
56+
import org.gradle.api.tasks.Delete;
57+
import org.gradle.testfixtures.ProjectBuilder;
58+
59+
import java.io.File;
60+
import java.io.IOException;
61+
import java.io.InputStream;
62+
import java.lang.reflect.ParameterizedType;
63+
import java.lang.reflect.Type;
64+
import java.net.HttpURLConnection;
65+
import java.net.URL;
66+
import java.util.Collections;
67+
import java.util.List;
68+
import java.util.Map;
69+
70+
import static net.minecraftforge.gradle.common.Constants.*;
9171
public abstract class BasePlugin<K extends BaseExtension> implements Plugin<Project>
9272
{
9373
private static final Logger LOGGER = Logging.getLogger(BasePlugin.class);
@@ -820,7 +800,6 @@ protected Version parseAndStoreVersion(File file, File... inheritanceDirs)
820800
String configName = CONFIG_MC_DEPS;
821801
if (lib.name.contains("java3d")
822802
|| lib.name.contains("paulscode")
823-
|| lib.name.contains("lwjgl")
824803
|| lib.name.contains("twitch")
825804
|| lib.name.contains("jinput"))
826805
{
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
package net.minecraftforge.gradle.tasks;
2+
3+
import com.google.common.collect.Lists;
4+
import net.minecraftforge.gradle.util.caching.Cached;
5+
import net.minecraftforge.gradle.util.caching.CachedTask;
6+
import org.dimdev.accesstransform.AccessTransformationSet;
7+
import org.dimdev.accesstransform.AccessTransformer;
8+
import org.gradle.api.file.ConfigurableFileCollection;
9+
import org.gradle.api.tasks.InputFile;
10+
import org.gradle.api.tasks.InputFiles;
11+
import org.gradle.api.tasks.OutputFile;
12+
import org.gradle.api.tasks.TaskAction;
13+
14+
import java.io.*;
15+
import java.util.ArrayList;
16+
import java.util.Arrays;
17+
import java.util.Enumeration;
18+
import java.util.Scanner;
19+
import java.util.jar.JarEntry;
20+
import java.util.jar.JarFile;
21+
import java.util.jar.JarOutputStream;
22+
import java.util.zip.ZipEntry;
23+
24+
public class AccessTransformJar extends CachedTask {
25+
@InputFile
26+
private Object inJar;
27+
28+
private Object outJar;
29+
30+
@InputFiles
31+
private ArrayList<Object> ats = Lists.newArrayList();
32+
33+
@TaskAction
34+
public void doTask() throws IOException {
35+
getLogger().lifecycle("Applying access transformers...");
36+
37+
AccessTransformationSet transformations = new AccessTransformationSet();
38+
for (File file : getAts()) {
39+
if (file.getName().endsWith(".jar")) {
40+
JarFile jar = new JarFile(file);
41+
ZipEntry entry = jar.getEntry("access_transformations.at");
42+
if (entry != null) {
43+
try (Scanner scanner = new Scanner(jar.getInputStream(entry))) {
44+
while (scanner.hasNextLine()) {
45+
transformations.addMinimumAccessLevel(scanner.nextLine());
46+
}
47+
}
48+
}
49+
} else {
50+
try (Scanner scanner = new Scanner(file)) {
51+
while (scanner.hasNextLine()) {
52+
transformations.addMinimumAccessLevel(scanner.nextLine());
53+
}
54+
}
55+
}
56+
}
57+
58+
AccessTransformer accessTransformer = new AccessTransformer(transformations);
59+
60+
try (JarFile jar = new JarFile(getInJar());
61+
FileOutputStream os = new FileOutputStream(getOutJar());
62+
JarOutputStream out = new JarOutputStream(os)) {
63+
Enumeration<JarEntry> entries = jar.entries();
64+
while (entries.hasMoreElements()) {
65+
JarEntry entry = entries.nextElement();
66+
67+
// Read the entry
68+
InputStream in = jar.getInputStream(entry);
69+
String name = entry.getName();
70+
byte[] data = readStream(in);
71+
72+
// Remap classes
73+
if (name.endsWith(".class")) {
74+
String className = name.substring(0, name.length() - 6);
75+
data = accessTransformer.transformClass(className, data);
76+
}
77+
78+
// Write the new entry
79+
JarEntry newEntry = new JarEntry(name);
80+
out.putNextEntry(newEntry);
81+
out.write(data);
82+
out.closeEntry();
83+
}
84+
}
85+
}
86+
87+
private static byte[] readStream(InputStream inputStream) throws IOException {
88+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
89+
byte[] data = new byte[4096];
90+
int bytesRead;
91+
while ((bytesRead = inputStream.read(data, 0, data.length)) != -1) {
92+
outputStream.write(data, 0, bytesRead);
93+
}
94+
outputStream.flush();
95+
return outputStream.toByteArray();
96+
}
97+
98+
99+
public File getInJar() {
100+
return getProject().file(inJar);
101+
}
102+
103+
public void setInJar(Object inJar) {
104+
this.inJar = inJar;
105+
}
106+
107+
@Cached
108+
@OutputFile
109+
public File getOutJar() {
110+
return getProject().file(outJar);
111+
}
112+
113+
public void setOutJar(Object outJar) {
114+
this.outJar = outJar;
115+
}
116+
117+
public void addAts(Object... objs) {
118+
ats.addAll(Arrays.asList(objs));
119+
}
120+
121+
public ConfigurableFileCollection getAts() {
122+
return getProject().files(ats.toArray());
123+
}
124+
}

0 commit comments

Comments
 (0)