MsgCommand.java

net.minecraft.server.commands.MsgCommand

信息

  • 全限定名:net.minecraft.server.commands.MsgCommand
  • 类型:public class
  • 包:net.minecraft.server.commands
  • 源码路径:src/main/java/net/minecraft/server/commands/MsgCommand.java
  • 起始行号:L16
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

构造器

方法

下面的方法块按源码顺序生成。

public static void register(CommandDispatcher<CommandSourceStack> dispatcher) @ L17

  • 方法名:register
  • 源码定位:L17
  • 返回类型:void
  • 修饰符:public static

参数:

  • dispatcher: CommandDispatcher

说明:

TODO

private static void sendMessage(CommandSourceStack source, Collection<ServerPlayer> players, PlayerChatMessage message) @ L33

  • 方法名:sendMessage
  • 源码定位:L33
  • 返回类型:void
  • 修饰符:private static

参数:

  • source: CommandSourceStack
  • players: Collection
  • message: PlayerChatMessage

说明:

TODO

代码

public class MsgCommand {
    public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
        LiteralCommandNode<CommandSourceStack> msg = dispatcher.register(
            Commands.literal("msg")
                .then(Commands.argument("targets", EntityArgument.players()).then(Commands.argument("message", MessageArgument.message()).executes(c -> {
                    Collection<ServerPlayer> players = EntityArgument.getPlayers(c, "targets");
                    if (!players.isEmpty()) {
                        MessageArgument.resolveChatMessage(c, "message", message -> sendMessage(c.getSource(), players, message));
                    }
 
                    return players.size();
                })))
        );
        dispatcher.register(Commands.literal("tell").redirect(msg));
        dispatcher.register(Commands.literal("w").redirect(msg));
    }
 
    private static void sendMessage(CommandSourceStack source, Collection<ServerPlayer> players, PlayerChatMessage message) {
        ChatType.Bound incomingChatType = ChatType.bind(ChatType.MSG_COMMAND_INCOMING, source);
        OutgoingChatMessage tracked = OutgoingChatMessage.create(message);
        boolean wasFullyFiltered = false;
 
        for (ServerPlayer player : players) {
            ChatType.Bound outgoingChatType = ChatType.bind(ChatType.MSG_COMMAND_OUTGOING, source).withTargetName(player.getDisplayName());
            source.sendChatMessage(tracked, false, outgoingChatType);
            boolean filtered = source.shouldFilterMessageTo(player);
            player.sendChatMessage(tracked, filtered, incomingChatType);
            wasFullyFiltered |= filtered && message.isFullyFiltered();
        }
 
        if (wasFullyFiltered) {
            source.sendSystemMessage(PlayerList.CHAT_FILTERED_FULL);
        }
    }
}

引用的其他类

  • CommandSourceStack

    • 引用位置: 参数
  • Commands

    • 引用位置: 方法调用
    • 关联成员: Commands.argument(), Commands.literal()
  • EntityArgument

    • 引用位置: 方法调用
    • 关联成员: EntityArgument.getPlayers(), EntityArgument.players()
  • MessageArgument

    • 引用位置: 方法调用
    • 关联成员: MessageArgument.message(), MessageArgument.resolveChatMessage()
  • ChatType

    • 引用位置: 方法调用
    • 关联成员: ChatType.bind()
  • OutgoingChatMessage

    • 引用位置: 方法调用
    • 关联成员: OutgoingChatMessage.create()
  • PlayerChatMessage

    • 引用位置: 参数
  • ServerPlayer

    • 引用位置: 参数