minecraft-src/net/minecraft/server/commands/ServerPackCommand.java
2025-07-04 01:41:11 +03:00

78 lines
3.1 KiB
Java

package net.minecraft.server.commands;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.arguments.StringArgumentType;
import java.nio.charset.StandardCharsets;
import java.util.Optional;
import java.util.UUID;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.commands.arguments.UuidArgument;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.common.ClientboundResourcePackPopPacket;
import net.minecraft.network.protocol.common.ClientboundResourcePackPushPacket;
public class ServerPackCommand {
public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
dispatcher.register(
Commands.literal("serverpack")
.requires(commandSourceStack -> commandSourceStack.hasPermission(2))
.then(
Commands.literal("push")
.then(
Commands.argument("url", StringArgumentType.string())
.then(
Commands.argument("uuid", UuidArgument.uuid())
.then(
Commands.argument("hash", StringArgumentType.word())
.executes(
commandContext -> pushPack(
commandContext.getSource(),
StringArgumentType.getString(commandContext, "url"),
Optional.of(UuidArgument.getUuid(commandContext, "uuid")),
Optional.of(StringArgumentType.getString(commandContext, "hash"))
)
)
)
.executes(
commandContext -> pushPack(
commandContext.getSource(),
StringArgumentType.getString(commandContext, "url"),
Optional.of(UuidArgument.getUuid(commandContext, "uuid")),
Optional.empty()
)
)
)
.executes(
commandContext -> pushPack(commandContext.getSource(), StringArgumentType.getString(commandContext, "url"), Optional.empty(), Optional.empty())
)
)
)
.then(
Commands.literal("pop")
.then(
Commands.argument("uuid", UuidArgument.uuid())
.executes(commandContext -> popPack(commandContext.getSource(), UuidArgument.getUuid(commandContext, "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> uuid, Optional<String> hash) {
UUID uUID = (UUID)uuid.orElseGet(() -> UUID.nameUUIDFromBytes(url.getBytes(StandardCharsets.UTF_8)));
String string = (String)hash.orElse("");
ClientboundResourcePackPushPacket clientboundResourcePackPushPacket = new ClientboundResourcePackPushPacket(uUID, url, string, false, null);
sendToAllConnections(source, clientboundResourcePackPushPacket);
return 0;
}
private static int popPack(CommandSourceStack source, UUID uuid) {
ClientboundResourcePackPopPacket clientboundResourcePackPopPacket = new ClientboundResourcePackPopPacket(Optional.of(uuid));
sendToAllConnections(source, clientboundResourcePackPopPacket);
return 0;
}
}