mark Loom 0.2.0, update Mixin library
parent
a39d0b6656
commit
baaf430fd8
|
@ -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'
|
||||||
}
|
}
|
||||||
|
|
|
@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue