private void send(CommandSender sender, String jsonString) { if (!(sender instanceof Player)) { sender.sendMessage(toOldMessageFormat()); return; } Player player = (Player) sender; try { Object handle = Reflection.getHandle(player); Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); Reflection.getMethod(connection.getClass(), "sendPacket", Reflection.getNMSClass("Packet")) .invoke(connection, createChatPacket(jsonString)); } catch (IllegalArgumentException e) { Bukkit.getLogger().log(Level.WARNING, "Argument could not be passed.", e); } catch (IllegalAccessException e) { Bukkit.getLogger().log(Level.WARNING, "Could not access method.", e); } catch (InstantiationException e) { Bukkit.getLogger().log(Level.WARNING, "Underlying class is abstract.", e); } catch (InvocationTargetException e) { Bukkit.getLogger().log(Level.WARNING, "A error has occured durring invoking of method.", e); } catch (NoSuchMethodException e) { Bukkit.getLogger().log(Level.WARNING, "Could not find method.", e); } catch (ClassNotFoundException e) { Bukkit.getLogger().log(Level.WARNING, "Could not find class.", e); } }
/** * Set the behavior of the current editing component to display information about a statistic * parameter with an entity type when the client hovers over the text. * * <p>Tooltips do not inherit display characteristics, such as color and styles, from the message * component on which they are applied. * * @param which The statistic to display. * @param entity The sole entity type parameter to the statistic. * @return This builder instance. * @exception IllegalArgumentException If the statistic requires a parameter which was not * supplied, or was supplied a parameter that was not required. */ public FancyMessage statisticTooltip(final Statistic which, EntityType entity) { Type type = which.getType(); if (type == Type.UNTYPED) { throw new IllegalArgumentException("That statistic needs no additional parameter!"); } if (type != Type.ENTITY) { throw new IllegalArgumentException( "Wrong parameter type for that statistic - needs " + type + "!"); } try { Object statistic = Reflection.getMethod( Reflection.getOBCClass("CraftStatistic"), "getEntityStatistic", Statistic.class, EntityType.class) .invoke(null, which, entity); return achievementTooltip( (String) Reflection.getField(Reflection.getNMSClass("Statistic"), "name").get(statistic)); } catch (IllegalAccessException e) { Bukkit.getLogger().log(Level.WARNING, "Could not access method.", e); return this; } catch (IllegalArgumentException e) { Bukkit.getLogger().log(Level.WARNING, "Argument could not be passed.", e); return this; } catch (InvocationTargetException e) { Bukkit.getLogger().log(Level.WARNING, "A error has occured durring invoking of method.", e); return this; } }
/** * Set the behavior of the current editing component to display information about an item when the * client hovers over the text. * * <p>Tooltips do not inherit display characteristics, such as color and styles, from the message * component on which they are applied. * * @param itemStack The stack for which to display information. * @return This builder instance. */ public FancyMessage itemTooltip(final ItemStack itemStack) { try { Object nmsItem = Reflection.getMethod( Reflection.getOBCClass("inventory.CraftItemStack"), "asNMSCopy", ItemStack.class) .invoke(null, itemStack); return itemTooltip( Reflection.getMethod( Reflection.getNMSClass("ItemStack"), "save", Reflection.getNMSClass("NBTTagCompound")) .invoke(nmsItem, Reflection.getNMSClass("NBTTagCompound").newInstance()) .toString()); } catch (Exception e) { e.printStackTrace(); return this; } }
/** * Set the behavior of the current editing component to display information about an achievement * when the client hovers over the text. * * <p>Tooltips do not inherit display characteristics, such as color and styles, from the message * component on which they are applied. * * @param which The achievement to display. * @return This builder instance. */ public FancyMessage achievementTooltip(final Achievement which) { try { Object achievement = Reflection.getMethod( Reflection.getOBCClass("CraftStatistic"), "getNMSAchievement", Achievement.class) .invoke(null, which); return achievementTooltip( (String) Reflection.getField(Reflection.getNMSClass("Achievement"), "name").get(achievement)); } catch (IllegalAccessException e) { Bukkit.getLogger().log(Level.WARNING, "Could not access method.", e); return this; } catch (IllegalArgumentException e) { Bukkit.getLogger().log(Level.WARNING, "Argument could not be passed.", e); return this; } catch (InvocationTargetException e) { Bukkit.getLogger().log(Level.WARNING, "A error has occured durring invoking of method.", e); return this; } }