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

@ -69,4 +69,11 @@ public abstract class InternalPluginBridge {
abstract public Map<String, Object> taboolibTLocaleSerialize(Object in);
abstract public FileConfiguration taboolibGetPlayerData(OfflinePlayer player);
abstract public int protocolSupportPlayerVersion(Player player);
abstract public int viaVersionPlayerVersion(Player player);
abstract public Class getClass(String name) throws ClassNotFoundException;
}

View File

@ -20,6 +20,8 @@ import org.bukkit.World;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.RegisteredServiceProvider;
import protocolsupport.api.ProtocolSupportAPI;
import us.myles.ViaVersion.api.Via;
import java.lang.reflect.Method;
import java.util.Collection;
@ -205,4 +207,19 @@ public class BridgeImpl extends InternalPluginBridge {
public FileConfiguration taboolibGetPlayerData(OfflinePlayer player) {
return PlayerDataManager.getPlayerData(player);
}
@Override
public int protocolSupportPlayerVersion(Player player) {
return ProtocolSupportAPI.getProtocolVersion(player).getId();
}
@Override
public int viaVersionPlayerVersion(Player player) {
return Via.getAPI().getPlayerVersion(player);
}
@Override
public Class getClass(String name) throws ClassNotFoundException {
return Class.forName(name);
}
}

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
*/
@ -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);

View File

@ -1,6 +1,7 @@
package io.izzel.taboolib.module.tellraw;
import io.izzel.taboolib.module.inject.TFunction;
import io.izzel.taboolib.module.inject.TSchedule;
import io.izzel.taboolib.module.lite.SimpleVersionControl;
import io.izzel.taboolib.module.tellraw.internal.AbstractTellraw;
import org.bukkit.Bukkit;
@ -17,8 +18,6 @@ public class TellrawCreator {
private static boolean protocolSupportLoaded;
public static void init() {
viaVersionLoaded = Bukkit.getPluginManager().getPlugin("ViaVersion") != null;
protocolSupportLoaded = Bukkit.getPluginManager().getPlugin("ProtocolSupport") != null;
try {
abstractTellraw = (AbstractTellraw) SimpleVersionControl.createNMS("io.izzel.taboolib.module.tellraw.internal.InternalTellraw").translate().newInstance();
} catch (Exception e) {
@ -26,6 +25,12 @@ public class TellrawCreator {
}
}
@TSchedule
static void tick() {
viaVersionLoaded = Bukkit.getPluginManager().getPlugin("ViaVersion") != null;
protocolSupportLoaded = Bukkit.getPluginManager().getPlugin("ProtocolSupport") != null;
}
// *********************************
//
// Getter and Setter

View File

@ -1,5 +1,6 @@
package io.izzel.taboolib.module.tellraw;
import io.izzel.taboolib.TabooLibAPI;
import io.izzel.taboolib.module.locale.TLocale;
import io.izzel.taboolib.util.ArrayUtil;
import io.izzel.taboolib.util.Strings;
@ -8,8 +9,6 @@ import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import protocolsupport.api.ProtocolSupportAPI;
import us.myles.ViaVersion.api.Via;
import java.util.*;
import java.util.stream.Collectors;
@ -88,11 +87,11 @@ public class TellrawJson {
public String toRawMessage(Player player) {
// ViaVersion support!
if (TellrawCreator.isViaVersionLoaded()) {
return toRawMessage(Via.getAPI().getPlayerVersion(player) > 316 ? TellrawVersion.HIGH_VERSION : TellrawVersion.LOW_VERSION);
return toRawMessage(TabooLibAPI.getPluginBridge().viaVersionPlayerVersion(player) > 316 ? TellrawVersion.HIGH_VERSION : TellrawVersion.LOW_VERSION);
}
// ProtocolSupport support!
else if (TellrawCreator.isProtocolSupportLoaded()) {
return toRawMessage(ProtocolSupportAPI.getProtocolVersion(player).getId() > 316 ? TellrawVersion.HIGH_VERSION : TellrawVersion.LOW_VERSION);
return toRawMessage(TabooLibAPI.getPluginBridge().protocolSupportPlayerVersion(player) > 316 ? TellrawVersion.HIGH_VERSION : TellrawVersion.LOW_VERSION);
}
return toRawMessage();
}