+ fix JSON
This commit is contained in:
parent
b8ab5ebc1a
commit
47faa031eb
14
pom.xml
14
pom.xml
@ -237,6 +237,20 @@
|
|||||||
<scope>system</scope>
|
<scope>system</scope>
|
||||||
<systemPath>${basedir}/libs/BossBarAPI.jar</systemPath>
|
<systemPath>${basedir}/libs/BossBarAPI.jar</systemPath>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>viaversion</groupId>
|
||||||
|
<artifactId>viaversion</artifactId>
|
||||||
|
<version>1</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${basedir}/libs/ViaVersion.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>protocolsupport</groupId>
|
||||||
|
<artifactId>protocolsupport</artifactId>
|
||||||
|
<version>1</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${basedir}/libs/ProtocolSupport.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>deprecated</groupId>
|
<groupId>deprecated</groupId>
|
||||||
<artifactId>deprecated</artifactId>
|
<artifactId>deprecated</artifactId>
|
||||||
|
@ -2,7 +2,6 @@ package com.ilummc.tlib.resources;
|
|||||||
|
|
||||||
import com.ilummc.tlib.TLib;
|
import com.ilummc.tlib.TLib;
|
||||||
import com.ilummc.tlib.bungee.api.ChatColor;
|
import com.ilummc.tlib.bungee.api.ChatColor;
|
||||||
import com.ilummc.tlib.bungee.api.chat.BaseComponent;
|
|
||||||
import com.ilummc.tlib.bungee.api.chat.TextComponent;
|
import com.ilummc.tlib.bungee.api.chat.TextComponent;
|
||||||
import com.ilummc.tlib.bungee.chat.ComponentSerializer;
|
import com.ilummc.tlib.bungee.chat.ComponentSerializer;
|
||||||
import com.ilummc.tlib.inject.TLoggerManager;
|
import com.ilummc.tlib.inject.TLoggerManager;
|
||||||
@ -10,15 +9,11 @@ import com.ilummc.tlib.util.Ref;
|
|||||||
import com.ilummc.tlib.util.Strings;
|
import com.ilummc.tlib.util.Strings;
|
||||||
import me.clip.placeholderapi.PlaceholderAPI;
|
import me.clip.placeholderapi.PlaceholderAPI;
|
||||||
import me.skymc.taboolib.Main;
|
import me.skymc.taboolib.Main;
|
||||||
import me.skymc.taboolib.nms.NMSUtil19;
|
import me.skymc.taboolib.json.tellraw.TellrawCreator;
|
||||||
import me.skymc.taboolib.nms.NMSUtils;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -139,23 +134,12 @@ public class TLocale {
|
|||||||
|
|
||||||
public static class Tellraw extends TLocale {
|
public static class Tellraw extends TLocale {
|
||||||
|
|
||||||
private static final Class<?> chatSerializer = NMSUtils.getNMSClassSilent("ChatSerializer", "IChatBaseComponent");
|
|
||||||
private static final Method chatSerializerA = NMSUtils.getMethodSilent(chatSerializer, "a", String.class);
|
|
||||||
private static final Field playerConnection = NMSUtils.getFieldSilent(NMSUtil19.class_EntityPlayer, "playerConnection");
|
|
||||||
private static final Method sendPacket = NMSUtils.getMethodSilent(NMSUtil19.class_PlayerConnection, "sendPacket", NMSUtil19.class_Packet);
|
|
||||||
private static final Constructor<?> PacketPlayOutChat = NMSUtils.getConstructorSilent(NMSUtil19.class_PacketPlayOutChat, NMSUtil19.class_IChatBaseComponent);
|
|
||||||
|
|
||||||
public static void send(CommandSender sender, String rawMessage) {
|
public static void send(CommandSender sender, String rawMessage) {
|
||||||
if (sender instanceof Player) {
|
if (sender instanceof Player) {
|
||||||
try {
|
TellrawCreator.getAbstractTellraw().sendRawMessage((Player) sender, rawMessage);
|
||||||
sendPacket.invoke(playerConnection.get(NMSUtils.getHandle(sender)), PacketPlayOutChat.newInstance(chatSerializerA.invoke(null, rawMessage)));
|
|
||||||
} catch (Exception e) {
|
|
||||||
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + sender.getName() + " " + rawMessage);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
sender.sendMessage(TextComponent.toLegacyText(ComponentSerializer.parse(rawMessage)));
|
sender.sendMessage(TextComponent.toLegacyText(ComponentSerializer.parse(rawMessage)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,85 @@
|
|||||||
|
package me.skymc.taboolib.common.util;
|
||||||
|
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author 坏黑
|
||||||
|
* @Since 2018-10-25 22:51
|
||||||
|
*/
|
||||||
|
public class SimpleReflection {
|
||||||
|
|
||||||
|
private static Map<String, Map<String, Field>> fieldCached = Maps.newHashMap();
|
||||||
|
|
||||||
|
public static void saveFiled(Class<?> nmsClass) {
|
||||||
|
try {
|
||||||
|
Arrays.stream(nmsClass.getDeclaredFields()).forEach(declaredField -> saveFiled(nmsClass, declaredField.getName()));
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void saveFiled(Class<?> nmsClass, String fieldName) {
|
||||||
|
try {
|
||||||
|
Field declaredField = nmsClass.getDeclaredField(fieldName);
|
||||||
|
declaredField.setAccessible(true);
|
||||||
|
fieldCached.computeIfAbsent(nmsClass.getName(), name -> Maps.newHashMap()).put(fieldName, declaredField);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setFieldValue(Class<?> nmsClass, Object instance, String fieldName, Object value) {
|
||||||
|
try {
|
||||||
|
Map<String, Field> fields = fieldCached.get(nmsClass.getName());
|
||||||
|
if (fields == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Field field = fields.get(fieldName);
|
||||||
|
if (value == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
field.set(instance, value);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Object getFieldValue(Class<?> nmsClass, Object instance, String fieldName) {
|
||||||
|
try {
|
||||||
|
Map<String, Field> fields = fieldCached.get(nmsClass.getName());
|
||||||
|
if (fields == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Field field = fields.get(fieldName);
|
||||||
|
if (field == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return field.get(instance);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> T getFieldValue(Class<?> nmsClass, Object instance, String fieldName, T def) {
|
||||||
|
try {
|
||||||
|
Map<String, Field> fields = fieldCached.get(nmsClass.getName());
|
||||||
|
if (fields == null) {
|
||||||
|
return def;
|
||||||
|
}
|
||||||
|
Field field = fields.get(fieldName);
|
||||||
|
if (field == null) {
|
||||||
|
return def;
|
||||||
|
}
|
||||||
|
return (T) field.get(instance);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return def;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
package me.skymc.taboolib.json.tellraw;
|
||||||
|
|
||||||
|
import me.skymc.taboolib.common.loader.Instantiable;
|
||||||
|
import me.skymc.taboolib.common.versioncontrol.SimpleVersionControl;
|
||||||
|
import me.skymc.taboolib.json.tellraw.internal.AbstractTellraw;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author 坏黑
|
||||||
|
* @Since 2018-11-07 22:58
|
||||||
|
*/
|
||||||
|
@Instantiable("TabooLib|TellrawCreator")
|
||||||
|
public class TellrawCreator {
|
||||||
|
|
||||||
|
private static AbstractTellraw abstractTellraw;
|
||||||
|
private static boolean viaVersionLoaded;
|
||||||
|
private static boolean protocolSupportLoaded;
|
||||||
|
|
||||||
|
public TellrawCreator() {
|
||||||
|
viaVersionLoaded = Bukkit.getPluginManager().getPlugin("ViaVersion") != null;
|
||||||
|
protocolSupportLoaded = Bukkit.getPluginManager().getPlugin("ProtocolSupport") != null;
|
||||||
|
try {
|
||||||
|
abstractTellraw = (AbstractTellraw) SimpleVersionControl.create()
|
||||||
|
.from("v1_8_R3")
|
||||||
|
.target("me.skymc.taboolib.json.tellraw.internal.InternalTellraw")
|
||||||
|
.translate()
|
||||||
|
.newInstance();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// *********************************
|
||||||
|
//
|
||||||
|
// Getter and Setter
|
||||||
|
//
|
||||||
|
// *********************************
|
||||||
|
|
||||||
|
public static AbstractTellraw getAbstractTellraw() {
|
||||||
|
return abstractTellraw;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isViaVersionLoaded() {
|
||||||
|
return viaVersionLoaded;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isProtocolSupportLoaded() {
|
||||||
|
return protocolSupportLoaded;
|
||||||
|
}
|
||||||
|
}
|
@ -2,17 +2,20 @@ package me.skymc.taboolib.json.tellraw;
|
|||||||
|
|
||||||
import com.ilummc.tlib.bungee.api.chat.*;
|
import com.ilummc.tlib.bungee.api.chat.*;
|
||||||
import com.ilummc.tlib.bungee.chat.ComponentSerializer;
|
import com.ilummc.tlib.bungee.chat.ComponentSerializer;
|
||||||
import com.ilummc.tlib.logger.TLogger;
|
|
||||||
import com.ilummc.tlib.resources.TLocale;
|
import com.ilummc.tlib.resources.TLocale;
|
||||||
import me.skymc.taboolib.methods.ReflectionUtils;
|
import com.ilummc.tlib.util.Strings;
|
||||||
import me.skymc.taboolib.nms.NMSUtils;
|
import me.skymc.taboolib.TabooLib;
|
||||||
import me.skymc.taboolib.string.ArrayUtils;
|
import me.skymc.taboolib.string.ArrayUtils;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import protocolsupport.api.ProtocolSupportAPI;
|
||||||
|
import us.myles.ViaVersion.api.Via;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -24,10 +27,8 @@ public class TellrawJson {
|
|||||||
|
|
||||||
private List<BaseComponent> components = new ArrayList<>();
|
private List<BaseComponent> components = new ArrayList<>();
|
||||||
private List<BaseComponent> componentsLatest = new ArrayList<>();
|
private List<BaseComponent> componentsLatest = new ArrayList<>();
|
||||||
private static final Class<?> craftItemStackClazz = NMSUtils.getOBCClass("inventory.CraftItemStack");
|
private Map<String, String[]> itemTag = new HashMap<>();
|
||||||
private static final Class<?> nmsItemStackClazz = NMSUtils.getNMSClass("ItemStack");
|
private int bukkitVersion = TabooLib.getVersionNumber();
|
||||||
private static final Class<?> nbtTagCompoundClazz = NMSUtils.getNMSClass("NBTTagCompound");
|
|
||||||
private static final String INVALID_ITEM = "{id:stone,tag:{display:{Name:§c* Invalid ItemStack *}}}";
|
|
||||||
|
|
||||||
TellrawJson() {
|
TellrawJson() {
|
||||||
}
|
}
|
||||||
@ -37,13 +38,38 @@ public class TellrawJson {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void send(CommandSender sender) {
|
public void send(CommandSender sender) {
|
||||||
TLocale.Tellraw.send(sender, toRawMessage());
|
send(sender, new String[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void send(CommandSender sender, String... args) {
|
||||||
|
if (sender instanceof Player) {
|
||||||
|
if (TellrawCreator.isViaVersionLoaded()) {
|
||||||
|
TLocale.Tellraw.send(sender, Strings.replaceWithOrder(toRawMessage(Via.getAPI().getPlayerVersion(sender) > 316 ? TellrawVersion.HIGH_VERSION : TellrawVersion.LOW_VERSION), args));
|
||||||
|
} else if (TellrawCreator.isProtocolSupportLoaded()) {
|
||||||
|
TLocale.Tellraw.send(sender, Strings.replaceWithOrder(toRawMessage(ProtocolSupportAPI.getProtocolVersion((Player) sender).getId() > 316 ? TellrawVersion.HIGH_VERSION : TellrawVersion.LOW_VERSION), args));
|
||||||
|
} else {
|
||||||
|
TLocale.Tellraw.send(sender, Strings.replaceWithOrder(toRawMessage(), args));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
TLocale.Tellraw.send(sender, Strings.replaceWithOrder(toRawMessage(), args));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toRawMessage() {
|
public String toRawMessage() {
|
||||||
return ComponentSerializer.toString(getComponentsAll());
|
return ComponentSerializer.toString(getComponentsAll());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String toRawMessage(TellrawVersion version) {
|
||||||
|
String rawMessage = toRawMessage();
|
||||||
|
if (version == TellrawVersion.CURRENT_VERSION) {
|
||||||
|
return rawMessage;
|
||||||
|
}
|
||||||
|
for (Map.Entry<String, String[]> stringEntry : itemTag.entrySet()) {
|
||||||
|
rawMessage = rawMessage.replace(stringEntry.getKey(), version == TellrawVersion.HIGH_VERSION ? stringEntry.getValue()[1] : stringEntry.getValue()[0]);
|
||||||
|
}
|
||||||
|
return rawMessage;
|
||||||
|
}
|
||||||
|
|
||||||
public String toLegacyText() {
|
public String toLegacyText() {
|
||||||
return TextComponent.toLegacyText(getComponentsAll());
|
return TextComponent.toLegacyText(getComponentsAll());
|
||||||
}
|
}
|
||||||
@ -61,6 +87,7 @@ public class TellrawJson {
|
|||||||
public TellrawJson append(TellrawJson json) {
|
public TellrawJson append(TellrawJson json) {
|
||||||
appendComponents();
|
appendComponents();
|
||||||
componentsLatest.addAll(ArrayUtils.asList(json.getComponentsAll()));
|
componentsLatest.addAll(ArrayUtils.asList(json.getComponentsAll()));
|
||||||
|
itemTag.putAll(json.itemTag);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +97,18 @@ public class TellrawJson {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public TellrawJson hoverItem(ItemStack itemStack) {
|
public TellrawJson hoverItem(ItemStack itemStack) {
|
||||||
getLatestComponent().forEach(component -> component.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_ITEM, new ComponentBuilder(getItemComponent(itemStack)).create())));
|
return hoverItem(itemStack, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TellrawJson hoverItem(ItemStack itemStack, boolean supportVersion) {
|
||||||
|
BaseComponent[] itemComponentCurrentVersion = new ComponentBuilder(TellrawCreator.getAbstractTellraw().getItemComponent(itemStack, TellrawVersion.CURRENT_VERSION)).create();
|
||||||
|
getLatestComponent().forEach(component -> component.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_ITEM, itemComponentCurrentVersion)));
|
||||||
|
if (supportVersion) {
|
||||||
|
itemTag.put(ComponentSerializer.toString(itemComponentCurrentVersion), new String[] {
|
||||||
|
ComponentSerializer.toString(new ComponentBuilder(TellrawCreator.getAbstractTellraw().getItemComponent(itemStack, TellrawVersion.LOW_VERSION)).create()),
|
||||||
|
ComponentSerializer.toString(new ComponentBuilder(TellrawCreator.getAbstractTellraw().getItemComponent(itemStack, TellrawVersion.HIGH_VERSION)).create())
|
||||||
|
});
|
||||||
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,19 +138,6 @@ public class TellrawJson {
|
|||||||
return components.toArray(new BaseComponent[0]);
|
return components.toArray(new BaseComponent[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getItemComponent(ItemStack itemStack) {
|
|
||||||
try {
|
|
||||||
Method asNMSCopyMethod = ReflectionUtils.getMethod(craftItemStackClazz, "asNMSCopy", ItemStack.class);
|
|
||||||
Method saveNmsItemStackMethod = ReflectionUtils.getMethod(nmsItemStackClazz, "save", nbtTagCompoundClazz);
|
|
||||||
Object nmsNbtTagCompoundObj = nbtTagCompoundClazz.newInstance();
|
|
||||||
Object nmsItemStackObj = asNMSCopyMethod.invoke(null, itemStack);
|
|
||||||
return saveNmsItemStackMethod.invoke(nmsItemStackObj, nmsNbtTagCompoundObj).toString();
|
|
||||||
} catch (Throwable t) {
|
|
||||||
TLogger.getGlobalLogger().error("failed to serialize bukkit item to nms item: " + t.toString());
|
|
||||||
return INVALID_ITEM;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// *********************************
|
// *********************************
|
||||||
//
|
//
|
||||||
// Private Methods
|
// Private Methods
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
package me.skymc.taboolib.json.tellraw;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author 坏黑
|
||||||
|
* @Since 2018-11-07 22:53
|
||||||
|
*/
|
||||||
|
public enum TellrawVersion {
|
||||||
|
|
||||||
|
LOW_VERSION, HIGH_VERSION, CURRENT_VERSION
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package me.skymc.taboolib.json.tellraw.internal;
|
||||||
|
|
||||||
|
import me.skymc.taboolib.json.tellraw.TellrawVersion;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author 坏黑
|
||||||
|
* @Since 2018-11-07 22:52
|
||||||
|
*/
|
||||||
|
public interface AbstractTellraw {
|
||||||
|
|
||||||
|
void sendRawMessage(Player player, String rawMessage);
|
||||||
|
|
||||||
|
String getItemComponent(ItemStack itemStack);
|
||||||
|
|
||||||
|
String getItemComponent(ItemStack itemStack, TellrawVersion version);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,81 @@
|
|||||||
|
package me.skymc.taboolib.json.tellraw.internal;
|
||||||
|
|
||||||
|
import me.skymc.taboolib.TabooLib;
|
||||||
|
import me.skymc.taboolib.common.packet.TPacketHandler;
|
||||||
|
import me.skymc.taboolib.common.util.SimpleReflection;
|
||||||
|
import me.skymc.taboolib.json.tellraw.TellrawVersion;
|
||||||
|
import net.minecraft.server.v1_8_R3.IChatBaseComponent;
|
||||||
|
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||||
|
import net.minecraft.server.v1_8_R3.NBTTagList;
|
||||||
|
import net.minecraft.server.v1_8_R3.PacketPlayOutChat;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author 坏黑
|
||||||
|
* @Since 2018-11-07 22:54
|
||||||
|
*/
|
||||||
|
public class InternalTellraw implements AbstractTellraw {
|
||||||
|
|
||||||
|
private int bukkitVersion = TabooLib.getVersionNumber();
|
||||||
|
|
||||||
|
public InternalTellraw() {
|
||||||
|
SimpleReflection.saveFiled(NBTTagCompound.class, "map");
|
||||||
|
SimpleReflection.saveFiled(NBTTagList.class, "list");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendRawMessage(Player player, String rawMessage) {
|
||||||
|
TPacketHandler.sendPacket(player, new PacketPlayOutChat(IChatBaseComponent.ChatSerializer.a(rawMessage)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getItemComponent(ItemStack itemStack) {
|
||||||
|
return getItemComponent(itemStack, TellrawVersion.CURRENT_VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getItemComponent(ItemStack itemStack, TellrawVersion version) {
|
||||||
|
return nbtToString(CraftItemStack.asNMSCopy(itemStack).save(new NBTTagCompound()), version);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String nbtToString(Object nbtTagCompound, TellrawVersion version) {
|
||||||
|
StringBuilder builder = new StringBuilder("{");
|
||||||
|
Map map = (Map) SimpleReflection.getFieldValue(NBTTagCompound.class, nbtTagCompound, "map");
|
||||||
|
int index = 0;
|
||||||
|
for (Object nbtBaseEntry : map.entrySet()) {
|
||||||
|
if (index++ != 0) {
|
||||||
|
builder.append(",");
|
||||||
|
}
|
||||||
|
Object value = ((Map.Entry) nbtBaseEntry).getValue();
|
||||||
|
if (value instanceof NBTTagList ) {
|
||||||
|
builder.append(((Map.Entry) nbtBaseEntry).getKey()).append(":").append(nbtListToString(value, version));
|
||||||
|
} else if (value instanceof NBTTagCompound) {
|
||||||
|
builder.append(((Map.Entry) nbtBaseEntry).getKey()).append(":").append(nbtToString(value, version));
|
||||||
|
} else {
|
||||||
|
builder.append(((Map.Entry) nbtBaseEntry).getKey()).append(":").append(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return builder.append('}').toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String nbtListToString(Object nbtTagList, TellrawVersion version) {
|
||||||
|
StringBuilder builder = new StringBuilder("[");
|
||||||
|
List list = (List) SimpleReflection.getFieldValue(NBTTagList.class, nbtTagList, "list");
|
||||||
|
for (int i = 0; i < list.size(); ++i) {
|
||||||
|
if (i != 0) {
|
||||||
|
builder.append(',');
|
||||||
|
}
|
||||||
|
if (version == TellrawVersion.HIGH_VERSION || (this.bukkitVersion >= 11200 && version == TellrawVersion.CURRENT_VERSION)) {
|
||||||
|
builder.append(list.get(i));
|
||||||
|
} else {
|
||||||
|
builder.append(i).append(':').append(list.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return builder.append(']').toString();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user