ServerPackCommand.java

net.minecraft.server.commands.ServerPackCommand

信息

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

    TODO

字段/常量

内部类/嵌套类型

构造器

方法

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

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

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

参数:

  • dispatcher: CommandDispatcher

说明:

TODO

private static void sendToAllConnections(CommandSourceStack source, Packet<?> packet) @ L56

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

参数:

  • source: CommandSourceStack
  • packet: Packet<?>

说明:

TODO

private static int pushPack(CommandSourceStack source, String url, Optional<UUID> maybeId, Optional<String> maybeHash) @ L60

  • 方法名:pushPack
  • 源码定位:L60
  • 返回类型:int
  • 修饰符:private static

参数:

  • source: CommandSourceStack
  • url: String
  • maybeId: Optional
  • maybeHash: Optional

说明:

TODO

private static int popPack(CommandSourceStack source, UUID uuid) @ L68

  • 方法名:popPack
  • 源码定位:L68
  • 返回类型:int
  • 修饰符:private static

参数:

  • source: CommandSourceStack
  • uuid: UUID

说明:

TODO

代码

public class ServerPackCommand {
    public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
        dispatcher.register(
            Commands.literal("serverpack")
                .requires(Commands.hasPermission(Commands.LEVEL_GAMEMASTERS))
                .then(
                    Commands.literal("push")
                        .then(
                            Commands.argument("url", StringArgumentType.string())
                                .then(
                                    Commands.argument("uuid", UuidArgument.uuid())
                                        .then(
                                            Commands.argument("hash", StringArgumentType.word())
                                                .executes(
                                                    c -> pushPack(
                                                        c.getSource(),
                                                        StringArgumentType.getString(c, "url"),
                                                        Optional.of(UuidArgument.getUuid(c, "uuid")),
                                                        Optional.of(StringArgumentType.getString(c, "hash"))
                                                    )
                                                )
                                        )
                                        .executes(
                                            c -> pushPack(
                                                c.getSource(),
                                                StringArgumentType.getString(c, "url"),
                                                Optional.of(UuidArgument.getUuid(c, "uuid")),
                                                Optional.empty()
                                            )
                                        )
                                )
                                .executes(c -> pushPack(c.getSource(), StringArgumentType.getString(c, "url"), Optional.empty(), Optional.empty()))
                        )
                )
                .then(
                    Commands.literal("pop")
                        .then(Commands.argument("uuid", UuidArgument.uuid()).executes(c -> popPack(c.getSource(), UuidArgument.getUuid(c, "uuid"))))
                )
        );
    }
 
    private static void sendToAllConnections(CommandSourceStack source, Packet<?> packet) {
        source.getServer().getConnection().getConnections().forEach(connection -> connection.send(packet));
    }
 
    private static int pushPack(CommandSourceStack source, String url, Optional<UUID> maybeId, Optional<String> maybeHash) {
        UUID id = maybeId.orElseGet(() -> UUID.nameUUIDFromBytes(url.getBytes(StandardCharsets.UTF_8)));
        String hash = maybeHash.orElse("");
        ClientboundResourcePackPushPacket packet = new ClientboundResourcePackPushPacket(id, url, hash, false, null);
        sendToAllConnections(source, packet);
        return 0;
    }
 
    private static int popPack(CommandSourceStack source, UUID uuid) {
        ClientboundResourcePackPopPacket packet = new ClientboundResourcePackPopPacket(Optional.of(uuid));
        sendToAllConnections(source, packet);
        return 0;
    }
}

引用的其他类