如何向服务器上的所有播放器发送消息? (服务器端)

时间:2018-12-30 19:20:34

标签: minecraft gradlew minecraft-forge

我将如何向服务器上的所有播放器发送消息? (尝试这样做时,它只会输出到控制台,我相信这是因为未在客户端安装该mod。)

我一直在尝试为1.7.10服务器制作一个mod(放入1.7.10 mod包),该服务器可以在线向所有玩家发送消息。我已经查询了这个问题,但没有找到任何答案。

@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");
    }
}

我希望服务器将向所有人发送一条消息,但仅输出到控制台。

2 个答案:

答案 0 :(得分:1)

处理该问题的一种非常快捷的方法是为玩家加入时创建一个EventHandler。然后将它们添加到ArrayList。然后当他们离开时(检查踢/退出事件)。从ArrayList中删除它们。通过拥有一个数组列表,您可以浏览并向每个玩家发送消息。

答案 1 :(得分:0)

您的'System.out.println(“ Respawned”);`行将仅打印到控制台。

我相信您想要做的是以下事情:

1)循环浏览服务器上的所有播放器。 2)向每个玩家发送计算出的消息。

我不是100%不确定如何从头顶上访问播放器列表,但是您需要访问FMLServerHandler并获取播放器列表,或者(更好的方法)访问EntityPlayer个对象已连接到玩家当前的世界,并执行上述步骤。第二种方法仅适用于当前环境,因此,如果您要访问与服务器的所有连接,则第一种方法是可行的方法。