Fix TellrawJson

This commit is contained in:
坏黑
2019-07-23 17:14:49 +08:00
parent 156c56d71d
commit ec3dc24a5e
6 changed files with 49 additions and 18 deletions

View File

@@ -1,6 +1,7 @@
package io.izzel.taboolib.module.lite;
import com.google.common.collect.Maps;
import io.izzel.taboolib.TabooLibAPI;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
@@ -107,7 +108,7 @@ public class SimpleReflection {
try {
if (ParameterizedType.class.isAssignableFrom(genericType.getClass())) {
for (Type actualTypeArgument : ((ParameterizedType) genericType).getActualTypeArguments()) {
return Class.forName(actualTypeArgument.getTypeName());
return TabooLibAPI.getPluginBridge().getClass(actualTypeArgument.getTypeName());
}
}
} catch (Throwable t) {
@@ -122,7 +123,7 @@ public class SimpleReflection {
Type genericType = field.getGenericType();
if (ParameterizedType.class.isAssignableFrom(genericType.getClass())) {
for (Type actualTypeArgument : ((ParameterizedType) genericType).getActualTypeArguments()) {
mapType[mapType[0] == null ? 0 : 1] = Class.forName(actualTypeArgument.getTypeName());
mapType[mapType[0] == null ? 0 : 1] = TabooLibAPI.getPluginBridge().getClass(actualTypeArgument.getTypeName());
}
}
} catch (Throwable t) {

View File

@@ -71,6 +71,7 @@ public class SimpleVersionControl {
this.from.add(from.startsWith("v") ? from : "v" + from);
return this;
}
/**
* 设置原版本写法如v1_8_R3, v1_12_R1
*/
@@ -80,7 +81,7 @@ public class SimpleVersionControl {
}
/**
* 设置目标版本
* 设置目标版本
*/
public SimpleVersionControl to(String to) {
this.to = to.startsWith("v") ? to : "v" + to;
@@ -116,15 +117,16 @@ public class SimpleVersionControl {
}
public Class<?> translate(Plugin plugin) throws IOException {
InputStream inputStream;
if (useCache && cacheClasses.containsKey(target)) {
inputStream = new ByteArrayInputStream(cacheClasses.get(target));
} else {
inputStream = Files.getResource(plugin, target.replace(".", "/") + ".class");
if (useCache) {
cacheClasses.put(target, IO.readFully(inputStream));
// 防止出现 Class not found 的奇葩问题,使用缓存(目的是兼容热重载)
InputStream inputStream = useCache ? new ByteArrayInputStream(cacheClasses.computeIfAbsent(target, n -> {
try {
return IO.readFully(Files.getResource(plugin, target.replace(".", "/") + ".class"));
} catch (IOException e) {
e.printStackTrace();
}
}
return new byte[0];
})) : Files.getResource(plugin, target.replace(".", "/") + ".class");
// 读取
ClassReader classReader = new ClassReader(inputStream);
ClassWriter classWriter = new ClassWriter(0);
ClassVisitor classVisitor = new SimpleClassVisitor(this, classWriter);
@@ -132,7 +134,7 @@ public class SimpleVersionControl {
classWriter.visitEnd();
classVisitor.visitEnd();
// 因第三方插件调用该方法时会出现找不到类,所以第三方插件使用 BridgeLoader 加载类
return plugin instanceof InternalPlugin ? AsmClassLoader.createNewClass(target, classWriter.toByteArray()) : BridgeLoader.createNewClass(target, classWriter.toByteArray());
return plugin instanceof InternalPlugin ? AsmClassLoader.createNewClass(target, classWriter.toByteArray()) : BridgeLoader.createNewClass(target, classWriter.toByteArray());
}
public Class<?> translateBridge() throws IOException {