ShiChunAn
本帖最后由 ShiChunAn 于 2016-5-21 22:35 编辑

RT:
假如有一个关于玩家的变量name,那么:
name.sendMessage(…)可以向该玩家发送消息。
name.setGameMode(…)可以设置该玩家的游戏模式。
……
HELP:
1.如果要给玩家发送subtitletitle,name.应该加什么(如果有的话)
2.我有一个TitleAPI
  1. TitleAPI.sendTitle(player,fadeIn,stay,fadeOut,"Title","Subtitle");
复制代码

里面的player项是可以直接用name 还是要进行什么样的修改操作?
求JAVA大神相助!!!


(顺便:求一个JAVA编译器吧,我只有JAVA反编译器{:10_527:})

GTA守护使者
我也想知道!琢磨了几天了!最后结果游戏里面出现错误!而不是控制台!

TimmyOVO
。。。你就不能看看文档么
TitleAPI.sendTitle(Bukkit.getPlayer("玩家名字"),淡出时间,停留在屏幕的时间,淡出时间,"要发送的title","要发送的子title");
看变量类型呀!!

GTA守护使者
本帖最后由 GTA守护使者 于 2016-6-14 16:41 编辑

已经找到解决方法!下面是完整代码以及注释!






import java.lang.reflect.Constructor;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;

public class Title {

        public void mains(){  //执行这里就可以看到效果!这是主方法
                System.out.println(Bukkit.getOnlinePlayers());
                Player player = Bukkit.getPlayer("name") ; //玩家名字(name)
                Integer fadeIn = 5; //淡出时间
                Integer stay = 2; //停留在屏幕的时间
                Integer fadeOut = 10 ; //淡出时间
                String title = "服务器将在30秒后重启!"; //要发送的title
                String subtitle = "我要休息哦!~_~ 稍后回来!感谢大家对DYzjm的支持!"; //要发送的子title
                //new Title().Server_broadcast("服务器将在30秒后重启!");//广播信息  服务器稍后开启!正在重启!让服务器更加流畅吧!感谢大家对DYzjm的支持!
                Server_broadcast(player,fadeIn,stay,fadeOut,title,subtitle);//title广播信息
        }



        public void Server_broadcast(Player player, Integer fadeIn, Integer stay, Integer fadeOut, String title, String subtitle){
                /*
                 * Bukkit.broadcastMessage(ChatColor.DARK_RED + broadcast); 发送全服广播信息
                 * Bukkit.getPlayer("name")  玩家String name
                 * Ftime 淡出时间
                 * TimeS 停留在屏幕的时间
                 * FsTime 淡出时间
                 * title 要发送的title
                 * subtitle 要发送的子title
                 *
                 * Player player, Integer fadeIn, Integer stay, Integer fadeOut, String title, String subtitle
                 */
                sendTitle(player,fadeIn,stay,fadeOut,title,subtitle);
        }

        @SuppressWarnings("rawtypes")
        public static void sendTitle(Player player, Integer fadeIn, Integer stay, Integer fadeOut, String title, String subtitle){
                try {
                        if (title != null) { //要发送的title
                        title = ChatColor.translateAlternateColorCodes('&', title); //支持&b颜色代码
                        title = title.replaceAll("%player%", player.getDisplayName());
                        Object enumTitle = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TITLE").get(null);
                        Object chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[] { String.class }).invoke(null, new Object[] { "{\"text\":\"" + title + "\"}" });
                        Constructor titleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[] { getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE });
                        Object titlePacket = titleConstructor.newInstance(new Object[] { enumTitle, chatTitle, fadeIn, stay, fadeOut });
                        sendPacket(player, titlePacket);
                        }

                        if (subtitle != null) { //要发送的子title
                        subtitle = ChatColor.translateAlternateColorCodes('&', subtitle); //支持&b颜色代码
                        subtitle = subtitle.replaceAll("%player%", player.getDisplayName());
                        Object enumSubtitle = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("SUBTITLE").get(null);
                        Object chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", new Class[] { String.class }).invoke(null, new Object[] { "{\"text\":\"" + subtitle + "\"}" });
                        Constructor subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(new Class[] { getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE });
                        Object subtitlePacket = subtitleConstructor.newInstance(new Object[] { enumSubtitle, chatSubtitle, fadeIn, stay, fadeOut });
                        sendPacket(player, subtitlePacket);
                        }
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
        public static Class<?> getNMSClass(String name) {
                String version = org.bukkit.Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
                try {
                        return Class.forName("net.minecraft.server." + version + "." + name);
                } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                }return null;
        }
        public static void sendPacket(Player player, Object packet) {
                try {
                        Object handle = player.getClass().getMethod("getHandle", new Class[0]).invoke(player, new Object[0]);
                        Object playerConnection = handle.getClass().getField("playerConnection").get(handle);
                        playerConnection.getClass().getMethod("sendPacket", new Class[] { getNMSClass("Packet") }).invoke(playerConnection, new Object[] { packet });
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}











坑爹!不能上传图片!不然有图片了! 修改多次,为什么发帖内容不完整!MCBBS坑爹啊!



ShiChunAn
GTA守护使者 发表于 2016-6-14 16:34
已经找到解决方法!下面是完整代码以及注释!

非常感谢!