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(final ClientboundGameEventPacket.Type event, final float param) { this.event = event; this.param = param; } private ClientboundGameEventPacket(final FriendlyByteBuf input) { this.event = ClientboundGameEventPacket.Type.TYPES.get(input.readUnsignedByte()); this.param = input.readFloat(); } private void write(final FriendlyByteBuf output) { output.writeByte(this.event.id); output.writeFloat(this.param); } @Override public PacketType type() { return GamePacketTypes.CLIENTBOUND_GAME_EVENT; } public void handle(final ClientGamePacketListener listener) { listener.handleGameEvent(this); } public ClientboundGameEventPacket.Type getEvent() { return this.event; } public float getParam() { return this.param; } public static class Type { private static final Int2ObjectMap TYPES = new Int2ObjectOpenHashMap<>(); private final int id; public Type(final int id) { this.id = id; TYPES.put(id, this); } } }