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

问题描述 投票:0回答:2

我如何向服务器上的所有玩家发送消息? (当尝试这样做时,它只输出到控制台,我相信这是因为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");
    }
}

我希望服务器会向所有人发送消息,但只向控制台输出。

minecraft gradlew minecraft-forge
2个回答
1
投票

可以处理的一个非常快速的方法是在玩家加入时创建一个EventHandler。然后将它们添加到ArrayList。然后当他们离开时(检查踢/退出事件)。从ArrayList中删除它们。通过一个arraylist你可以通过这个和每个玩家的消息。


0
投票

你的'System.out.println(“Respawned”);`行只会打印到控制台。

我相信你要做的是以下几点:

1)遍历服务器上的所有玩家。 2)向每个玩家发送计算出的消息。

我不是100%肯定如何访问我的头顶上的播放器列表,但你需要访问FMLServerHandler并获取播放器列表,或者(更好的方式)访问连接到播放器当前的EntityPlayer对象世界并做上述步骤。第二种方法只适用于当前世界,因此如果您想访问服务器的所有连接,则第一种方法是可行的方法。

© www.soinside.com 2019 - 2024. All rights reserved.