本帖最后由 ShiChunAn 于 2016-5-21 22:35 编辑 
RT:
假如有一个关于玩家的变量name,那么:
name.sendMessage(…)可以向该玩家发送消息。
name.setGameMode(…)可以设置该玩家的游戏模式。
……
HELP:
1.如果要给玩家发送subtitle和title,name.应该加什么(如果有的话)
2.我有一个TitleAPI
复制代码
里面的player项是可以直接用name 还是要进行什么样的修改操作?
求JAVA大神相助!!!
(顺便:求一个JAVA编译器吧,我只有JAVA反编译器{:10_527:})
RT:
假如有一个关于玩家的变量name,那么:
name.sendMessage(…)可以向该玩家发送消息。
name.setGameMode(…)可以设置该玩家的游戏模式。
……
HELP:
1.如果要给玩家发送subtitle和title,name.应该加什么(如果有的话)
2.我有一个TitleAPI
- TitleAPI.sendTitle(player,fadeIn,stay,fadeOut,"Title","Subtitle");
里面的player项是可以直接用name 还是要进行什么样的修改操作?
求JAVA大神相助!!!
(顺便:求一个JAVA编译器吧,我只有JAVA反编译器{:10_527:})
我也想知道!琢磨了几天了!最后结果游戏里面出现错误!而不是控制台!
。。。你就不能看看文档么
TitleAPI.sendTitle(Bukkit.getPlayer("玩家名字"),淡出时间,停留在屏幕的时间,淡出时间,"要发送的title","要发送的子title");
看变量类型呀!!
TitleAPI.sendTitle(Bukkit.getPlayer("玩家名字"),淡出时间,停留在屏幕的时间,淡出时间,"要发送的title","要发送的子title");
看变量类型呀!!
 本帖最后由 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坑爹啊!
已经找到解决方法!下面是完整代码以及注释!

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坑爹啊!
GTA守护使者 发表于 2016-6-14 16:34
已经找到解决方法!下面是完整代码以及注释!
非常感谢!