All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.nukkit.network.process.processor.ResourcePackClientResponseProcessor Maven / Gradle / Ivy

package cn.nukkit.network.process.processor;

import cn.nukkit.Player;
import cn.nukkit.PlayerHandle;
import cn.nukkit.network.process.DataPacketProcessor;
import cn.nukkit.network.protocol.ProtocolInfo;
import cn.nukkit.network.protocol.ResourcePackClientResponsePacket;
import cn.nukkit.network.protocol.ResourcePackDataInfoPacket;
import cn.nukkit.network.protocol.ResourcePackStackPacket;
import cn.nukkit.resourcepacks.ResourcePack;
import org.jetbrains.annotations.NotNull;
import org.powernukkit.version.Version;

public class ResourcePackClientResponseProcessor extends DataPacketProcessor {
    @Override
    public void handle(@NotNull PlayerHandle playerHandle, @NotNull ResourcePackClientResponsePacket pk) {
        Player player = playerHandle.player;
        switch (pk.responseStatus) {
            case ResourcePackClientResponsePacket.STATUS_REFUSED -> {
                player.close("", "disconnectionScreen.noReason");
            }
            case ResourcePackClientResponsePacket.STATUS_SEND_PACKS -> {
                for (ResourcePackClientResponsePacket.Entry entry : pk.packEntries) {
                    ResourcePack resourcePack = player.getServer().getResourcePackManager().getPackById(entry.uuid);
                    if (resourcePack == null) {
                        player.close("", "disconnectionScreen.resourcePack");
                        return;
                    }

                    ResourcePackDataInfoPacket dataInfoPacket = new ResourcePackDataInfoPacket();
                    dataInfoPacket.packId = resourcePack.getPackId();
                    dataInfoPacket.setPackVersion(new Version(resourcePack.getPackVersion()));
                    dataInfoPacket.maxChunkSize = player.getServer().getResourcePackManager().getMaxChunkSize();
                    dataInfoPacket.chunkCount = (int) Math.ceil(resourcePack.getPackSize() / (double) dataInfoPacket.maxChunkSize);
                    dataInfoPacket.compressedPackSize = resourcePack.getPackSize();
                    dataInfoPacket.sha256 = resourcePack.getSha256();
                    player.dataResourcePacket(dataInfoPacket);
                }
            }
            case ResourcePackClientResponsePacket.STATUS_HAVE_ALL_PACKS -> {
                ResourcePackStackPacket stackPacket = new ResourcePackStackPacket();
                stackPacket.mustAccept = player.getServer().getForceResources() && !player.getServer().getForceResourcesAllowOwnPacks();
                stackPacket.resourcePackStack = player.getServer().getResourcePackManager().getResourceStack();
                if (player.getServer().isEnableExperimentMode()) {
                    stackPacket.experiments.add(
                            new ResourcePackStackPacket.ExperimentData("data_driven_items", true)
                    );
                    stackPacket.experiments.add(
                            new ResourcePackStackPacket.ExperimentData("upcoming_creator_features", true)
                    );
                    stackPacket.experiments.add(
                            new ResourcePackStackPacket.ExperimentData("experimental_molang_features", true)
                    );
                    stackPacket.experiments.add(
                            new ResourcePackStackPacket.ExperimentData("cameras", true)
                    );
                }
                player.dataResourcePacket(stackPacket);
            }
            case ResourcePackClientResponsePacket.STATUS_COMPLETED -> {
                playerHandle.setShouldLogin(true);
                if (playerHandle.getPreLoginEventTask().isFinished()) {
                    playerHandle.getPreLoginEventTask().onCompletion(player.getServer());
                }
            }
        }
    }

    @Override
    public int getPacketId() {
        return ProtocolInfo.toNewProtocolID(ProtocolInfo.RESOURCE_PACK_CLIENT_RESPONSE_PACKET);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy