mark Loom 0.2.0, update Mixin library

dev/0.11
Adrian Siekierka 2018-12-22 15:46:58 +01:00
parent a39d0b6656
commit baaf430fd8
2 changed files with 119 additions and 20 deletions

View File

@ -11,7 +11,7 @@ targetCompatibility = 1.8
group = 'net.fabricmc' group = 'net.fabricmc'
archivesBaseName = project.name archivesBaseName = project.name
version = '0.1.1-SNAPSHOT' version = '0.2.0-SNAPSHOT'
def build = "local" def build = "local"
def ENV = System.getenv() def ENV = System.getenv()
@ -25,10 +25,6 @@ repositories {
name = "Fabric" name = "Fabric"
url = 'https://maven.fabricmc.net/' url = 'https://maven.fabricmc.net/'
} }
maven {
name = "SonaType"
url = "https://oss.sonatype.org/content/repositories/snapshots/"
}
} }
dependencies { dependencies {
@ -45,7 +41,7 @@ dependencies {
// implementation ('org.benf:cfr:0.136') // implementation ('org.benf:cfr:0.136')
implementation ('org.jetbrains:intellij-fernflower:1.0.0.2') implementation ('org.jetbrains:intellij-fernflower:1.0.0.2')
implementation ('net.fabricmc:sponge-mixin:0.7.11.10') { implementation ('net.fabricmc:sponge-mixin:0.7.11.12:full') {
exclude module: 'launchwrapper' exclude module: 'launchwrapper'
exclude module: 'guava' exclude module: 'guava'
} }

View File

@ -25,41 +25,109 @@
package net.fabricmc.loom.mixin; package net.fabricmc.loom.mixin;
import com.google.common.io.ByteStreams; import com.google.common.io.ByteStreams;
import org.spongepowered.asm.service.IClassBytecodeProvider; import com.strobel.collections.ImmutableList;
import org.spongepowered.asm.service.mojang.MixinServiceLaunchWrapper; import org.spongepowered.asm.lib.ClassReader;
import org.spongepowered.asm.lib.tree.ClassNode;
import org.spongepowered.asm.mixin.MixinEnvironment;
import org.spongepowered.asm.service.*;
import org.spongepowered.asm.util.ReEntranceLock;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.net.URL;
import java.util.List; import java.util.*;
import java.util.Set;
import java.util.jar.JarFile; import java.util.jar.JarFile;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
public class MixinServiceGradle extends MixinServiceLaunchWrapper implements IClassBytecodeProvider { public class MixinServiceGradle implements IClassBytecodeProvider, IClassProvider, IMixinService {
private static List<JarFile> jars = new ArrayList<>(); private static List<JarFile> jars = new ArrayList<>();
private final ReEntranceLock lock = new ReEntranceLock(1);
@Override @Override
public String getName() { public String getName() {
return "FabricGradle"; return "FabricGradle";
} }
@Override
public boolean isValid() {
return true;
}
@Override
public void prepare() {
}
@Override
public MixinEnvironment.Phase getInitialPhase() {
return MixinEnvironment.Phase.DEFAULT;
}
@Override
public void init() {
}
@Override
public void beginPhase() {
}
@Override
public void checkEnv(Object bootSource) {
}
@Override
public ReEntranceLock getReEntranceLock() {
return lock;
}
@Override
public IClassProvider getClassProvider() {
return this;
}
@Override @Override
public InputStream getResourceAsStream(String name) { public InputStream getResourceAsStream(String name) {
for(JarFile file : jars){ for (JarFile file : jars) {
ZipEntry entry = file.getEntry(name); ZipEntry entry = file.getEntry(name);
if(entry != null){ if(entry != null){
try { try {
InputStream stream = file.getInputStream(entry); return file.getInputStream(entry);
return stream;
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException("Failed to read mod file", e); throw new RuntimeException("Failed to read mod file", e);
} }
} }
} }
return super.getResourceAsStream(name);
return getClass().getClassLoader().getResourceAsStream(name);
}
@Override
public void registerInvalidClass(String className) {
}
@Override
public boolean isClassLoaded(String className) {
return true;
}
@Override
public String getClassRestrictions(String className) {
return "";
}
@Override
public Collection<ITransformer> getTransformers() {
return Collections.emptyList();
}
@Override
public String getSideName() {
return "UNKNOWN";
} }
public static void setupModFiles(Set<File> mods, File minecraft) throws IOException { public static void setupModFiles(Set<File> mods, File minecraft) throws IOException {
@ -76,13 +144,48 @@ public class MixinServiceGradle extends MixinServiceLaunchWrapper implements ICl
return this; return this;
} }
@Override
public Collection<String> getPlatformAgents() {
return ImmutableList.of("org.spongepowered.asm.launch.platform.MixinPlatformAgentDefault");
}
public byte[] getClassBytes(String name, String transformedName) throws IOException { public byte[] getClassBytes(String name, String transformedName) throws IOException {
InputStream inputStream = getResourceAsStream(name.replace(".", "/") + ".class"); InputStream inputStream = getResourceAsStream(name.replace(".", "/") + ".class");
byte[] classBytes = ByteStreams.toByteArray(inputStream); byte[] classBytes = ByteStreams.toByteArray(inputStream);
inputStream.close(); inputStream.close();
if(classBytes == null){
return super.getClassBytes(name, transformedName);
}
return classBytes; return classBytes;
} }
@Override
public byte[] getClassBytes(String name, boolean runTransformers) throws ClassNotFoundException, IOException {
return getClassBytes(name, name);
}
@Override
public ClassNode getClassNode(String name) throws ClassNotFoundException, IOException {
ClassReader reader = new ClassReader(getClassBytes(name, name));
ClassNode node = new ClassNode();
reader.accept(node, 0);
return node;
}
@Override
public URL[] getClassPath() {
return new URL[0];
}
@Override
public Class<?> findClass(String name) throws ClassNotFoundException {
return Class.forName(name);
}
@Override
public Class<?> findClass(String name, boolean initialize) throws ClassNotFoundException {
return Class.forName(name, initialize, getClass().getClassLoader());
}
@Override
public Class<?> findAgentClass(String name, boolean initialize) throws ClassNotFoundException {
return Class.forName(name, initialize, getClass().getClassLoader());
}
} }