package net.minecraft.network.protocol.game; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.PacketType; public class ClientboundGameEventPacket implements Packet { public static final StreamCodec STREAM_CODEC = Packet.codec( ClientboundGameEventPacket::write, ClientboundGameEventPacket::new ); public static final ClientboundGameEventPacket.Type NO_RESPAWN_BLOCK_AVAILABLE = new ClientboundGameEventPacket.Type(0); public static final ClientboundGameEventPacket.Type START_RAINING = new ClientboundGameEventPacket.Type(1); public static final ClientboundGameEventPacket.Type STOP_RAINING = new ClientboundGameEventPacket.Type(2); public static final ClientboundGameEventPacket.Type CHANGE_GAME_MODE = new ClientboundGameEventPacket.Type(3); public static final ClientboundGameEventPacket.Type WIN_GAME = new ClientboundGameEventPacket.Type(4); public static final ClientboundGameEventPacket.Type DEMO_EVENT = new ClientboundGameEventPacket.Type(5); public static final ClientboundGameEventPacket.Type PLAY_ARROW_HIT_SOUND = new ClientboundGameEventPacket.Type(6); public static final ClientboundGameEventPacket.Type RAIN_LEVEL_CHANGE = new ClientboundGameEventPacket.Type(7); public static final ClientboundGameEventPacket.Type THUNDER_LEVEL_CHANGE = new ClientboundGameEventPacket.Type(8); public static final ClientboundGameEventPacket.Type PUFFER_FISH_STING = new ClientboundGameEventPacket.Type(9); public static final ClientboundGameEventPacket.Type GUARDIAN_ELDER_EFFECT = new ClientboundGameEventPacket.Type(10); public static final ClientboundGameEventPacket.Type IMMEDIATE_RESPAWN = new ClientboundGameEventPacket.Type(11); public static final ClientboundGameEventPacket.Type LIMITED_CRAFTING = new ClientboundGameEventPacket.Type(12); public static final ClientboundGameEventPacket.Type LEVEL_CHUNKS_LOAD_START = new ClientboundGameEventPacket.Type(13); public static final int DEMO_PARAM_INTRO = 0; public static final int DEMO_PARAM_HINT_1 = 101; public static final int DEMO_PARAM_HINT_2 = 102; public static final int DEMO_PARAM_HINT_3 = 103; public static final int DEMO_PARAM_HINT_4 = 104; private final ClientboundGameEventPacket.Type event; private final float param; public ClientboundGameEventPacket(ClientboundGameEventPacket.Type event, float param) { this.event = event; this.param = param; } private ClientboundGameEventPacket(FriendlyByteBuf buffer) { this.event = ClientboundGameEventPacket.Type.TYPES.get(buffer.readUnsignedByte()); this.param = buffer.readFloat(); } /** * Writes the raw packet data to the data stream. */ private void write(FriendlyByteBuf buffer) { buffer.writeByte(this.event.id); buffer.writeFloat(this.param); } @Override public PacketType type() { return GamePacketTypes.CLIENTBOUND_GAME_EVENT; } /** * Passes this Packet on to the NetHandler for processing. */ public void handle(ClientGamePacketListener handler) { handler.handleGameEvent(this); } public ClientboundGameEventPacket.Type getEvent() { return this.event; } public float getParam() { return this.param; } public static class Type { static final Int2ObjectMap TYPES = new Int2ObjectOpenHashMap<>(); final int id; public Type(int id) { this.id = id; TYPES.put(id, this); } } }