mirror of
				https://e.coding.net/circlecloud/YumCore.git
				synced 2025-11-03 23:06:02 +00:00 
			
		
		
		
	@@ -1,5 +1,7 @@
 | 
				
			|||||||
package pw.yumc.YumCore.tellraw;
 | 
					package pw.yumc.YumCore.tellraw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.lang.reflect.InvocationTargetException;
 | 
				
			||||||
 | 
					import java.lang.reflect.Method;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.Arrays;
 | 
					import java.util.Arrays;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
@@ -8,6 +10,7 @@ import org.bukkit.Bukkit;
 | 
				
			|||||||
import org.bukkit.ChatColor;
 | 
					import org.bukkit.ChatColor;
 | 
				
			||||||
import org.bukkit.command.CommandSender;
 | 
					import org.bukkit.command.CommandSender;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					import org.bukkit.inventory.ItemStack;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import pw.yumc.YumCore.bukkit.compatible.C;
 | 
					import pw.yumc.YumCore.bukkit.compatible.C;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,6 +21,14 @@ import pw.yumc.YumCore.bukkit.compatible.C;
 | 
				
			|||||||
 * @author 喵♂呜
 | 
					 * @author 喵♂呜
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class Tellraw {
 | 
					public class Tellraw {
 | 
				
			||||||
 | 
					    static ItemSerialize is;
 | 
				
			||||||
 | 
					    static {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            is = new Automatic();
 | 
				
			||||||
 | 
					        } catch (ClassNotFoundException | NoSuchMethodException | SecurityException e) {
 | 
				
			||||||
 | 
					            is = new Manual();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    List<MessagePart> messageParts = new ArrayList<>();
 | 
					    List<MessagePart> messageParts = new ArrayList<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Tellraw(final String text) {
 | 
					    public Tellraw(final String text) {
 | 
				
			||||||
@@ -97,6 +108,28 @@ public class Tellraw {
 | 
				
			|||||||
        return this;
 | 
					        return this;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 悬浮物品
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param item
 | 
				
			||||||
 | 
					     *            {@link ItemStack}
 | 
				
			||||||
 | 
					     * @return {@link Tellraw}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public Tellraw item(final ItemStack item) {
 | 
				
			||||||
 | 
					        return item(is.$(item));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 悬浮物品
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param text
 | 
				
			||||||
 | 
					     *            文本
 | 
				
			||||||
 | 
					     * @return {@link Tellraw}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public Tellraw item(final String json) {
 | 
				
			||||||
 | 
					        return onHover("show_item", json);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 打开URL
 | 
					     * 打开URL
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@@ -246,7 +279,7 @@ public class Tellraw {
 | 
				
			|||||||
    public String toOldMessageFormat() {
 | 
					    public String toOldMessageFormat() {
 | 
				
			||||||
        final StringBuilder result = new StringBuilder();
 | 
					        final StringBuilder result = new StringBuilder();
 | 
				
			||||||
        for (final MessagePart part : messageParts) {
 | 
					        for (final MessagePart part : messageParts) {
 | 
				
			||||||
            result.append(ChatColor.stripColor(part.text));
 | 
					            result.append(part.text);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return result.toString();
 | 
					        return result.toString();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -308,4 +341,48 @@ public class Tellraw {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        return this;
 | 
					        return this;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static class Automatic implements ItemSerialize {
 | 
				
			||||||
 | 
					        Method asNMSCopyMethod;
 | 
				
			||||||
 | 
					        Method nmsSaveNBTMethod;
 | 
				
			||||||
 | 
					        Class<?> nmsNBTTagCompound;
 | 
				
			||||||
 | 
					        String ver = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Automatic() throws ClassNotFoundException, NoSuchMethodException, SecurityException {
 | 
				
			||||||
 | 
					            final Class<?> cis = getOBCClass("inventory.CraftItemStack");
 | 
				
			||||||
 | 
					            asNMSCopyMethod = cis.getMethod("asNMSCopy", ItemStack.class);
 | 
				
			||||||
 | 
					            final Class<?> nmsItemStack = getNMSClass("ItemStack");
 | 
				
			||||||
 | 
					            nmsNBTTagCompound = getNMSClass("NBTTagCompound");
 | 
				
			||||||
 | 
					            nmsSaveNBTMethod = nmsItemStack.getMethod("save", nmsNBTTagCompound);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        @Override
 | 
				
			||||||
 | 
					        public String $(final ItemStack item) {
 | 
				
			||||||
 | 
					            try {
 | 
				
			||||||
 | 
					                return nmsSaveNBTMethod.invoke(asNMSCopyMethod.invoke(null, item), nmsNBTTagCompound.newInstance()).toString();
 | 
				
			||||||
 | 
					            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException e) {
 | 
				
			||||||
 | 
					                is = new Manual();
 | 
				
			||||||
 | 
					                return is.$(item);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Class<?> getNMSClass(final String cname) throws ClassNotFoundException {
 | 
				
			||||||
 | 
					            return Class.forName("net.minecraft.server" + ver + "." + cname);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Class<?> getOBCClass(final String cname) throws ClassNotFoundException {
 | 
				
			||||||
 | 
					            return Class.forName("org.bukkit.craftbukkit." + ver + "." + cname);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static interface ItemSerialize {
 | 
				
			||||||
 | 
					        public String $(ItemStack item);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static class Manual implements ItemSerialize {
 | 
				
			||||||
 | 
					        @Override
 | 
				
			||||||
 | 
					        public String $(final ItemStack item) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user