Fix LocalPlayer & WorldGuardHook
This commit is contained in:
		@@ -14,10 +14,6 @@ public class BridgeLoader extends ClassLoader {
 | 
				
			|||||||
    private static Method findClass;
 | 
					    private static Method findClass;
 | 
				
			||||||
    private static ClassLoader pluginClassLoader;
 | 
					    private static ClassLoader pluginClassLoader;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static BridgeLoader getInstance() {
 | 
					 | 
				
			||||||
        return new BridgeLoader();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private BridgeLoader() {
 | 
					    private BridgeLoader() {
 | 
				
			||||||
        super(BridgeLoader.class.getClassLoader());
 | 
					        super(BridgeLoader.class.getClassLoader());
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
@@ -41,6 +37,6 @@ public class BridgeLoader extends ClassLoader {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static Class<?> createNewClass(String name, byte[] arr) {
 | 
					    public static Class<?> createNewClass(String name, byte[] arr) {
 | 
				
			||||||
        return getInstance().defineClass(name, arr, 0, arr.length, BridgeLoader.class.getProtectionDomain());
 | 
					        return new BridgeLoader().defineClass(name, arr, 0, arr.length, BridgeLoader.class.getProtectionDomain());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,7 @@ import io.izzel.taboolib.Version;
 | 
				
			|||||||
import io.izzel.taboolib.common.plugin.InternalPlugin;
 | 
					import io.izzel.taboolib.common.plugin.InternalPlugin;
 | 
				
			||||||
import io.izzel.taboolib.common.plugin.bridge.BridgeLoader;
 | 
					import io.izzel.taboolib.common.plugin.bridge.BridgeLoader;
 | 
				
			||||||
import io.izzel.taboolib.util.Files;
 | 
					import io.izzel.taboolib.util.Files;
 | 
				
			||||||
 | 
					import io.izzel.taboolib.util.IO;
 | 
				
			||||||
import io.izzel.taboolib.util.Ref;
 | 
					import io.izzel.taboolib.util.Ref;
 | 
				
			||||||
import io.izzel.taboolib.util.asm.AsmClassLoader;
 | 
					import io.izzel.taboolib.util.asm.AsmClassLoader;
 | 
				
			||||||
import org.bukkit.plugin.Plugin;
 | 
					import org.bukkit.plugin.Plugin;
 | 
				
			||||||
@@ -13,7 +14,9 @@ import org.objectweb.asm.ClassReader;
 | 
				
			|||||||
import org.objectweb.asm.ClassVisitor;
 | 
					import org.objectweb.asm.ClassVisitor;
 | 
				
			||||||
import org.objectweb.asm.ClassWriter;
 | 
					import org.objectweb.asm.ClassWriter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.ByteArrayInputStream;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					import java.io.InputStream;
 | 
				
			||||||
import java.util.Arrays;
 | 
					import java.util.Arrays;
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
@@ -25,7 +28,7 @@ import java.util.Map;
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
public class SimpleVersionControl {
 | 
					public class SimpleVersionControl {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static Map<String, Class<?>> cacheClasses = new HashMap<>();
 | 
					    private static Map<String, byte[]> cacheClasses = new HashMap<>();
 | 
				
			||||||
    private String target;
 | 
					    private String target;
 | 
				
			||||||
    private String to;
 | 
					    private String to;
 | 
				
			||||||
    private List<String> from = Lists.newArrayList();
 | 
					    private List<String> from = Lists.newArrayList();
 | 
				
			||||||
@@ -113,20 +116,23 @@ public class SimpleVersionControl {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Class<?> translate(Plugin plugin) throws IOException {
 | 
					    public Class<?> translate(Plugin plugin) throws IOException {
 | 
				
			||||||
 | 
					        InputStream inputStream;
 | 
				
			||||||
        if (useCache && cacheClasses.containsKey(target)) {
 | 
					        if (useCache && cacheClasses.containsKey(target)) {
 | 
				
			||||||
            return cacheClasses.get(target);
 | 
					            inputStream = new ByteArrayInputStream(cacheClasses.get(target));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            inputStream = Files.getResource(plugin, target.replace(".", "/") + ".class");
 | 
				
			||||||
 | 
					            if (useCache) {
 | 
				
			||||||
 | 
					                cacheClasses.put(target, IO.readFully(inputStream));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        ClassReader classReader = new ClassReader(Files.getResource(plugin, target.replace(".", "/") + ".class"));
 | 
					        ClassReader classReader = new ClassReader(inputStream);
 | 
				
			||||||
        ClassWriter classWriter = new ClassWriter(0);
 | 
					        ClassWriter classWriter = new ClassWriter(0);
 | 
				
			||||||
        ClassVisitor classVisitor = new SimpleClassVisitor(this, classWriter);
 | 
					        ClassVisitor classVisitor = new SimpleClassVisitor(this, classWriter);
 | 
				
			||||||
        classReader.accept(classVisitor, ClassReader.EXPAND_FRAMES);
 | 
					        classReader.accept(classVisitor, ClassReader.EXPAND_FRAMES);
 | 
				
			||||||
        classWriter.visitEnd();
 | 
					        classWriter.visitEnd();
 | 
				
			||||||
        classVisitor.visitEnd();
 | 
					        classVisitor.visitEnd();
 | 
				
			||||||
        Class<?> newClass = plugin instanceof InternalPlugin ? AsmClassLoader.createNewClass(target, classWriter.toByteArray()) : BridgeLoader.createNewClass(target, classWriter.toByteArray());
 | 
					        // 因第三方插件调用该方法时会出现找不到类,所以第三方插件使用 BridgeLoader 加载类
 | 
				
			||||||
        if (useCache) {
 | 
					        return plugin instanceof InternalPlugin ?  AsmClassLoader.createNewClass(target, classWriter.toByteArray()) : BridgeLoader.createNewClass(target, classWriter.toByteArray());
 | 
				
			||||||
            cacheClasses.put(target, newClass);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return newClass;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Class<?> translateBridge() throws IOException {
 | 
					    public Class<?> translateBridge() throws IOException {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user