minecraft-src/net/minecraft/network/protocol/game/ServerboundContainerClickPacket.java
2025-07-04 03:45:38 +03:00

63 lines
2.5 KiB
Java

package net.minecraft.network.protocol.game;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import net.minecraft.network.HashedStack;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.PacketType;
import net.minecraft.world.inventory.ClickType;
public record ServerboundContainerClickPacket(
int containerId, int stateId, short slotNum, byte buttonNum, ClickType clickType, Int2ObjectMap<HashedStack> changedSlots, HashedStack carriedItem
) implements Packet<ServerGamePacketListener> {
private static final int MAX_SLOT_COUNT = 128;
private static final StreamCodec<RegistryFriendlyByteBuf, Int2ObjectMap<HashedStack>> SLOTS_STREAM_CODEC = ByteBufCodecs.map(
Int2ObjectOpenHashMap::new, ByteBufCodecs.SHORT.map(Short::intValue, Integer::shortValue), HashedStack.STREAM_CODEC, 128
);
public static final StreamCodec<RegistryFriendlyByteBuf, ServerboundContainerClickPacket> STREAM_CODEC = StreamCodec.composite(
ByteBufCodecs.CONTAINER_ID,
ServerboundContainerClickPacket::containerId,
ByteBufCodecs.VAR_INT,
ServerboundContainerClickPacket::stateId,
ByteBufCodecs.SHORT,
ServerboundContainerClickPacket::slotNum,
ByteBufCodecs.BYTE,
ServerboundContainerClickPacket::buttonNum,
ClickType.STREAM_CODEC,
ServerboundContainerClickPacket::clickType,
SLOTS_STREAM_CODEC,
ServerboundContainerClickPacket::changedSlots,
HashedStack.STREAM_CODEC,
ServerboundContainerClickPacket::carriedItem,
ServerboundContainerClickPacket::new
);
public ServerboundContainerClickPacket(
int containerId, int stateId, short slotNum, byte buttonNum, ClickType clickType, Int2ObjectMap<HashedStack> changedSlots, HashedStack carriedItem
) {
changedSlots = Int2ObjectMaps.unmodifiable(changedSlots);
this.containerId = containerId;
this.stateId = stateId;
this.slotNum = slotNum;
this.buttonNum = buttonNum;
this.clickType = clickType;
this.changedSlots = changedSlots;
this.carriedItem = carriedItem;
}
@Override
public PacketType<ServerboundContainerClickPacket> type() {
return GamePacketTypes.SERVERBOUND_CONTAINER_CLICK;
}
/**
* Passes this Packet on to the NetHandler for processing.
*/
public void handle(ServerGamePacketListener handler) {
handler.handleContainerClick(this);
}
}