我如何向服务器上的所有玩家发送消息? (当尝试这样做时,它只输出到控制台,我相信这是因为mod没有安装在客户端。)
我一直在努力为1.7.10服务器制作一个mod(加入1.7.10 mod pack),可以在线向所有玩家发送消息。我看了这个问题,但没有找到任何答案。
@SideOnly(Side.SERVER)
@SubscribeEvent
public void onDeath(PlayerEvent.Clone event)
{
if (event.wasDeath) {
final String[] messages = {"Oh boiss we got a respawner O_O", "How dare ye respawn on me?", "GAAH! You died again!", "._. Just why...", "Was taht me or waas that you? -.-","Why isn't this in hardcore mode? It should be..."};
Random random = new Random();
int index = random.nextInt(messages.length);
ChatComponentText text = new ChatComponentText(messages[index]);
ChatStyle style = new ChatStyle();
style.setColor(EnumChatFormatting.LIGHT_PURPLE);
text.setChatStyle(style);
FMLCommonHandler.instance().getMinecraftServerInstance().getConfigurationManager().sendChatMsg(text);
System.out.println("Respawned");
}
}
我希望服务器会向所有人发送消息,但只向控制台输出。
可以处理的一个非常快速的方法是在玩家加入时创建一个EventHandler。然后将它们添加到ArrayList。然后当他们离开时(检查踢/退出事件)。从ArrayList中删除它们。通过一个arraylist你可以通过这个和每个玩家的消息。
你的'System.out.println(“Respawned”);`行只会打印到控制台。
我相信你要做的是以下几点:
1)遍历服务器上的所有玩家。 2)向每个玩家发送计算出的消息。
我不是100%肯定如何访问我的头顶上的播放器列表,但你需要访问FMLServerHandler
并获取播放器列表,或者(更好的方式)访问连接到播放器当前的EntityPlayer
对象世界并做上述步骤。第二种方法只适用于当前世界,因此如果您想访问服务器的所有连接,则第一种方法是可行的方法。