/* * This file is part of LanternServer, licensed under the MIT License (MIT). * * Copyright (c) LanternPowered <https://www.lanternpowered.org> * Copyright (c) SpongePowered <https://www.spongepowered.org> * Copyright (c) contributors * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the Software), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package org.lanternpowered.server.network.protocol; import org.lanternpowered.server.network.message.CodecRegistration; import org.lanternpowered.server.network.message.Message; import org.lanternpowered.server.network.message.MessageRegistry; import org.lanternpowered.server.network.vanilla.message.codec.connection.CodecInOutPing; import org.lanternpowered.server.network.vanilla.message.codec.connection.CodecOutDisconnect; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInChangeSign; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInChatMessage; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInClickWindow; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInClientSettings; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInClientStatus; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInCreativeWindowAction; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInEnchantItem; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInOutCloseWindow; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInOutCustomPayload; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInOutHeldItemChange; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInPlayerAbilities; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInPlayerAction; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInPlayerBlockPlacement; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInPlayerDigging; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInPlayerLook; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInPlayerMovement; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInPlayerMovementAndLook; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInPlayerOnGroundState; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInPlayerSwingArm; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInPlayerUseItem; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInPlayerVehicleControls; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInResourcePackStatus; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInSpectate; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInTabComplete; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInTeleportConfirm; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInUseEntity; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutAddPotionEffect; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutBlockAction; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutBlockBreakAnimation; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutBlockChange; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutBossBar; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutChangeGameState; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutChatMessage; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutChunkData; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayInOutConfirmWindowTransaction; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutDestroyEntities; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutEffect; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutEntityAnimation; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutEntityCollectItem; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutEntityEquipment; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutEntityHeadLook; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutEntityLook; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutEntityLookAndRelativeMove; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutEntityMetadata; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutEntityRelativeMove; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutEntityStatus; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutEntityTeleport; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutEntityVelocity; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutMultiBlockChange; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutOpenSign; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutOpenWindow; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutPlayerAbilities; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutPlayerHealthUpdate; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutPlayerJoinGame; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutPlayerPositionAndLook; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutPlayerRespawn; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutPlayerSpawnPosition; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutRemovePotionEffect; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutScoreboardDisplayObjective; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutScoreboardObjective; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutScoreboardScore; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutSendResourcePack; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutSetCamera; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutSetCooldown; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutSetDifficulty; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutSetEntityPassengers; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutSetExperience; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutSoundEffect; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutSpawnExperienceOrb; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutSpawnMob; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutSpawnObject; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutSpawnPainting; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutSpawnParticle; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutSpawnPlayer; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutSpawnThunderbolt; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutStatistics; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutTabComplete; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutTabListEntries; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutTabListHeaderAndFooter; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutTeams; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutTitle; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutUnloadChunk; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutUpdateTileEntity; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutSetWindowSlot; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutWindowItems; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutWindowProperty; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutWorldBorder; import org.lanternpowered.server.network.vanilla.message.codec.play.CodecPlayOutWorldTime; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInDropHeldItem; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInEditBook; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInPickItem; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInPlayerAbilities; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInPlayerLook; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInPlayerMovement; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInPlayerMovementAndLook; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInPlayerOnGroundState; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInPlayerSneak; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInPlayerSprint; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInPlayerUseItem; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInRequestStatistics; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInSignBook; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInStartElytraFlying; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInUseEntityAttack; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInUseEntityInteract; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInPickItem; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInChangeSign; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInChannelPayload; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInChatMessage; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInClickWindow; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInClientSettings; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInCloseWindow; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInCreativeWindowAction; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInHeldItemChange; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInOpenInventory; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInPlayerBlockPlacement; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInPlayerDigging; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInRegisterChannels; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInResourcePackStatus; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInSwapHandItems; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInTabComplete; import org.lanternpowered.server.network.vanilla.message.handler.play.HandlerPlayInUnregisterChannels; import org.lanternpowered.server.network.vanilla.message.processor.play.ProcessorPlayOutTabListEntries; import org.lanternpowered.server.network.vanilla.message.processor.play.ProcessorPlayOutTheEnd; import org.lanternpowered.server.network.vanilla.message.processor.play.ProcessorPlayOutParticleEffect; import org.lanternpowered.server.network.vanilla.message.processor.play.ProcessorPlayOutSetGameMode; import org.lanternpowered.server.network.vanilla.message.processor.play.ProcessorPlayOutWorldSky; import org.lanternpowered.server.network.vanilla.message.type.connection.MessageInOutKeepAlive; import org.lanternpowered.server.network.vanilla.message.type.connection.MessageOutDisconnect; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInClickWindow; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInCreativeWindowAction; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInEditBook; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInEditCommandBlock; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInChangeItemName; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInChangeOffer; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInChangeSign; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInChatMessage; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInClientSettings; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInDropHeldItem; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInEnchantItem; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInFinishUsingItem; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInLeaveBed; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInOpenInventory; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInOutBrand; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInOutChannelPayload; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInOutCloseWindow; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInOutHeldItemChange; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInOutRegisterChannels; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInOutUnregisterChannels; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInPerformRespawn; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInPlayerAbilities; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInPlayerBlockPlacement; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInPlayerDigging; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInPlayerLook; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInPlayerMovement; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInPlayerMovementAndLook; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInPlayerOnGroundState; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInPlayerSneak; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInPlayerSprint; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInPlayerSwingArm; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInPlayerUseItem; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInPlayerVehicleJump; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInPlayerVehicleMovement; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInRequestStatistics; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInResourcePackStatus; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInSignBook; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInSpectate; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInStartElytraFlying; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInSwapHandItems; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInTabComplete; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInTeleportConfirm; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInUseEntity; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutAddPotionEffect; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutBlockAction; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutBlockBreakAnimation; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutBlockChange; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutBossBar; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutChatMessage; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutChunkData; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayInOutConfirmWindowTransaction; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutDestroyEntities; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutEffect; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutEntityAnimation; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutEntityCollectItem; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutEntityEquipment; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutEntityHeadLook; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutEntityLook; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutEntityLookAndRelativeMove; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutEntityMetadata; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutEntityRelativeMove; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutEntityTeleport; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutEntityVelocity; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutMultiBlockChange; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutNamedSoundEffect; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutOpenBook; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutOpenWindow; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutPlayerAbilities; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutRemovePotionEffect; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSendResourcePack; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSetEntityPassengers; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSpawnPainting; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSpawnParticle; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutStopSound; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutTheEnd; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutOpenSign; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutParticleEffect; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutPlayerHealthUpdate; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutPlayerJoinGame; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutPlayerPositionAndLook; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutPlayerRespawn; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutPlayerSpawnPosition; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutScoreboardDisplayObjective; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutScoreboardObjective; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutScoreboardScore; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSetCamera; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSetCooldown; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSetDifficulty; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSetExperience; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSetGameMode; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSetOpLevel; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSetReducedDebug; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSetWindowSlot; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSoundEffect; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSpawnExperienceOrb; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSpawnMob; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSpawnObject; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSpawnPlayer; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutSpawnThunderbolt; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutStatistics; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutTabComplete; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutTabListEntries; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutTabListHeaderAndFooter; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutTeams; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutTitle; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutUnloadChunk; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutUpdateTileEntity; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutWindowItems; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutWindowProperty; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutWorldBorder; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutWorldSky; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutWorldTime; import org.lanternpowered.server.network.vanilla.message.type.play.internal.MessagePlayOutChangeGameState; import org.lanternpowered.server.network.vanilla.message.type.play.MessagePlayOutEntityStatus; final class ProtocolPlay extends ProtocolBase { ProtocolPlay() { final MessageRegistry inbound = this.inbound(); final MessageRegistry outbound = this.outbound(); // Register the processors outbound.bindProcessor(MessagePlayOutTheEnd.class, new ProcessorPlayOutTheEnd()); outbound.bindProcessor(MessagePlayOutParticleEffect.class, new ProcessorPlayOutParticleEffect()); outbound.bindProcessor(MessagePlayOutSetGameMode.class, new ProcessorPlayOutSetGameMode()); outbound.bindProcessor(MessagePlayOutWorldSky.class, new ProcessorPlayOutWorldSky()); outbound.bindProcessor(MessagePlayOutTabListEntries.class, new ProcessorPlayOutTabListEntries()); // Register the codecs and handlers of the default messages inbound.bind(0x00, CodecPlayInTeleportConfirm.class, MessagePlayInTeleportConfirm.class); // TODO: Handler inbound.bind(0x01, CodecPlayInTabComplete.class, MessagePlayInTabComplete.class) .bindHandler(new HandlerPlayInTabComplete()); inbound.bind(0x02, CodecPlayInChatMessage.class, MessagePlayInChatMessage.class) .bindHandler(new HandlerPlayInChatMessage()); inbound.bind(0x03, CodecPlayInClientStatus.class); inbound.bind(0x04, CodecPlayInClientSettings.class, MessagePlayInClientSettings.class) .bindHandler(new HandlerPlayInClientSettings()); inbound.bind(0x05, CodecPlayInOutConfirmWindowTransaction.class, MessagePlayInOutConfirmWindowTransaction.class); // TODO: Handler inbound.bind(0x06, CodecPlayInEnchantItem.class, MessagePlayInEnchantItem.class); // TODO: Handler inbound.bind(0x07, CodecPlayInClickWindow.class, MessagePlayInClickWindow.class) .bindHandler(new HandlerPlayInClickWindow()); inbound.bind(0x08, CodecPlayInOutCloseWindow.class, MessagePlayInOutCloseWindow.class) .bindHandler(new HandlerPlayInCloseWindow()); inbound.bind(0x09, CodecPlayInOutCustomPayload.class); inbound.bind(0x0a, CodecPlayInUseEntity.class); inbound.bind(0x0b, CodecInOutPing.class, MessageInOutKeepAlive.class); inbound.bind(0x0c, CodecPlayInPlayerMovement.class, MessagePlayInPlayerMovement.class) .bindHandler(new HandlerPlayInPlayerMovement()); inbound.bind(0x0d, CodecPlayInPlayerMovementAndLook.class, MessagePlayInPlayerMovementAndLook.class) .bindHandler(new HandlerPlayInPlayerMovementAndLook()); inbound.bind(0x0e, CodecPlayInPlayerLook.class, MessagePlayInPlayerLook.class) .bindHandler(new HandlerPlayInPlayerLook()); inbound.bind(0x0f, CodecPlayInPlayerOnGroundState.class, MessagePlayInPlayerOnGroundState.class) .bindHandler(new HandlerPlayInPlayerOnGroundState()); // ... inbound.bind(0x12, CodecPlayInPlayerAbilities.class, MessagePlayInPlayerAbilities.class) .bindHandler(new HandlerPlayInPlayerAbilities()); inbound.bind(0x13, CodecPlayInPlayerDigging.class); inbound.bind(0x14, CodecPlayInPlayerAction.class); inbound.bind(0x15, CodecPlayInPlayerVehicleControls.class); inbound.bind(0x16, CodecPlayInResourcePackStatus.class, MessagePlayInResourcePackStatus.class) .bindHandler(new HandlerPlayInResourcePackStatus()); inbound.bind(0x17, CodecPlayInOutHeldItemChange.class, MessagePlayInOutHeldItemChange.class) .bindHandler(new HandlerPlayInHeldItemChange()); inbound.bind(0x18, CodecPlayInCreativeWindowAction.class, MessagePlayInCreativeWindowAction.class) .bindHandler(new HandlerPlayInCreativeWindowAction()); inbound.bind(0x19, CodecPlayInChangeSign.class, MessagePlayInChangeSign.class) .bindHandler(new HandlerPlayInChangeSign()); inbound.bind(0x1a, CodecPlayInPlayerSwingArm.class, MessagePlayInPlayerSwingArm.class); // TODO: Handler inbound.bind(0x1b, CodecPlayInSpectate.class, MessagePlayInSpectate.class); // TODO: Handler inbound.bind(0x1c, CodecPlayInPlayerBlockPlacement.class, MessagePlayInPlayerBlockPlacement.class) .bindHandler(new HandlerPlayInPlayerBlockPlacement()); inbound.bind(0x1d, CodecPlayInPlayerUseItem.class, MessagePlayInPlayerUseItem.class) .bindHandler(new HandlerPlayInPlayerUseItem()); // Provided by CodecPlayInOutCustomPayload inbound.bind(MessagePlayInOutBrand.class); // TODO: Handler inbound.bind(MessagePlayInChangeItemName.class); // TODO: Handler inbound.bind(MessagePlayInChangeOffer.class); // TODO: Handler inbound.bind(MessagePlayInEditCommandBlock.Block.class); // TODO: Handler inbound.bind(MessagePlayInEditCommandBlock.AdvancedBlock.class); // TODO: Handler inbound.bind(MessagePlayInEditCommandBlock.Entity.class); // TODO: Handler inbound.bind(MessagePlayInEditBook.class) .bindHandler(new HandlerPlayInEditBook()); inbound.bind(MessagePlayInSignBook.class) .bindHandler(new HandlerPlayInSignBook()); inbound.bind(MessagePlayInPickItem.class) .bindHandler(new HandlerPlayInPickItem()); inbound.bind(MessagePlayInOutChannelPayload.class) .bindHandler(new HandlerPlayInChannelPayload()); inbound.bind(MessagePlayInOutRegisterChannels.class) .bindHandler(new HandlerPlayInRegisterChannels()); inbound.bind(MessagePlayInOutUnregisterChannels.class) .bindHandler(new HandlerPlayInUnregisterChannels()); // Provided by CodecPlayInUseEntity inbound.bind(MessagePlayInUseEntity.Attack.class) .bindHandler(new HandlerPlayInUseEntityAttack()); inbound.bind(MessagePlayInUseEntity.Interact.class) .bindHandler(new HandlerPlayInUseEntityInteract()); // Provided by CodecPlayInPlayerDigging inbound.bind(MessagePlayInPlayerDigging.class) .bindHandler(new HandlerPlayInPlayerDigging()); inbound.bind(MessagePlayInDropHeldItem.class) .bindHandler(new HandlerPlayInDropHeldItem()); inbound.bind(MessagePlayInFinishUsingItem.class); // TODO: Handler inbound.bind(MessagePlayInSwapHandItems.class) .bindHandler(new HandlerPlayInSwapHandItems()); // Provided by CodecPlayInClientStatus inbound.bind(MessagePlayInOpenInventory.class) .bindHandler(new HandlerPlayInOpenInventory()); inbound.bind(MessagePlayInPerformRespawn.class); // TODO: Handler inbound.bind(MessagePlayInRequestStatistics.class) .bindHandler(new HandlerPlayInRequestStatistics()); // Provided by CodecPlayInPlayerAction inbound.bind(MessagePlayInLeaveBed.class);// TODO: Handler inbound.bind(MessagePlayInStartElytraFlying.class) .bindHandler(new HandlerPlayInStartElytraFlying()); // Provided by CodecPlayInPlayerVehicleControls or CodecPlayInPlayerAction inbound.bind(MessagePlayInPlayerSneak.class) .bindHandler(new HandlerPlayInPlayerSneak()); inbound.bind(MessagePlayInPlayerSprint.class) .bindHandler(new HandlerPlayInPlayerSprint()); inbound.bind(MessagePlayInPlayerVehicleJump.class); // TODO: Handler // Provided by CodecPlayInPlayerVehicleControls inbound.bind(MessagePlayInPlayerVehicleMovement.class); // TODO: Handler outbound.bind(0x00, CodecPlayOutSpawnObject.class, MessagePlayOutSpawnObject.class); outbound.bind(0x01, CodecPlayOutSpawnExperienceOrb.class, MessagePlayOutSpawnExperienceOrb.class); outbound.bind(0x02, CodecPlayOutSpawnThunderbolt.class, MessagePlayOutSpawnThunderbolt.class); outbound.bind(0x03, CodecPlayOutSpawnMob.class, MessagePlayOutSpawnMob.class); outbound.bind(0x04, CodecPlayOutSpawnPainting.class, MessagePlayOutSpawnPainting.class); outbound.bind(0x05, CodecPlayOutSpawnPlayer.class, MessagePlayOutSpawnPlayer.class); outbound.bind(0x06, CodecPlayOutEntityAnimation.class, MessagePlayOutEntityAnimation.class); outbound.bind(0x07, CodecPlayOutStatistics.class, MessagePlayOutStatistics.class); outbound.bind(0x08, CodecPlayOutBlockBreakAnimation.class, MessagePlayOutBlockBreakAnimation.class); outbound.bind(0x09, CodecPlayOutUpdateTileEntity.class, MessagePlayOutUpdateTileEntity.class); outbound.bind(0x0a, CodecPlayOutBlockAction.class, MessagePlayOutBlockAction.class); outbound.bind(0x0b, CodecPlayOutBlockChange.class, MessagePlayOutBlockChange.class); final CodecRegistration<MessagePlayOutBossBar, CodecPlayOutBossBar> codecPlayOutBossBar = outbound.bind(0x0c, CodecPlayOutBossBar.class); codecPlayOutBossBar.bind(MessagePlayOutBossBar.Add.class); codecPlayOutBossBar.bind(MessagePlayOutBossBar.Remove.class); codecPlayOutBossBar.bind(MessagePlayOutBossBar.UpdatePercent.class); codecPlayOutBossBar.bind(MessagePlayOutBossBar.UpdateStyle.class); codecPlayOutBossBar.bind(MessagePlayOutBossBar.UpdateTitle.class); codecPlayOutBossBar.bind(MessagePlayOutBossBar.UpdateMisc.class); outbound.bind(0x0d, CodecPlayOutSetDifficulty.class, MessagePlayOutSetDifficulty.class); outbound.bind(0x0e, CodecPlayOutTabComplete.class, MessagePlayOutTabComplete.class); outbound.bind(0x0f, CodecPlayOutChatMessage.class, MessagePlayOutChatMessage.class); outbound.bind(0x10, CodecPlayOutMultiBlockChange.class, MessagePlayOutMultiBlockChange.class); outbound.bind(0x11, CodecPlayInOutConfirmWindowTransaction.class, MessagePlayInOutConfirmWindowTransaction.class); outbound.bind(0x12, CodecPlayInOutCloseWindow.class, MessagePlayInOutCloseWindow.class); outbound.bind(0x13, CodecPlayOutOpenWindow.class, MessagePlayOutOpenWindow.class); outbound.bind(0x14, CodecPlayOutWindowItems.class, MessagePlayOutWindowItems.class); outbound.bind(0x15, CodecPlayOutWindowProperty.class, MessagePlayOutWindowProperty.class); outbound.bind(0x16, CodecPlayOutSetWindowSlot.class, MessagePlayOutSetWindowSlot.class); outbound.bind(0x17, CodecPlayOutSetCooldown.class, MessagePlayOutSetCooldown.class); final CodecRegistration<Message, CodecPlayInOutCustomPayload> codecPlayInOutCustomPayload = outbound.bind( 0x18, CodecPlayInOutCustomPayload.class); codecPlayInOutCustomPayload.bind(MessagePlayInOutChannelPayload.class); codecPlayInOutCustomPayload.bind(MessagePlayOutOpenBook.class); codecPlayInOutCustomPayload.bind(MessagePlayInOutBrand.class); codecPlayInOutCustomPayload.bind(MessagePlayOutStopSound.class); outbound.bind(0x19, CodecPlayOutSoundEffect.class, MessagePlayOutNamedSoundEffect.class); outbound.bind(0x1a, CodecOutDisconnect.class, MessageOutDisconnect.class); final CodecRegistration<Message, CodecPlayOutEntityStatus> codecPlayOutEntityStatus = outbound.bind(0x1b, CodecPlayOutEntityStatus.class); codecPlayOutEntityStatus.bind(MessagePlayOutEntityStatus.class); codecPlayOutEntityStatus.bind(MessagePlayOutSetOpLevel.class); codecPlayOutEntityStatus.bind(MessagePlayOutSetReducedDebug.class); // 0x1c outbound.bind(0x1d, CodecPlayOutUnloadChunk.class, MessagePlayOutUnloadChunk.class); outbound.bind(0x1e, CodecPlayOutChangeGameState.class, MessagePlayOutChangeGameState.class); outbound.bind(0x1f, CodecInOutPing.class, MessageInOutKeepAlive.class); outbound.bind(0x20, CodecPlayOutChunkData.class, MessagePlayOutChunkData.class); outbound.bind(0x21, CodecPlayOutEffect.class, MessagePlayOutEffect.class); outbound.bind(0x22, CodecPlayOutSpawnParticle.class, MessagePlayOutSpawnParticle.class); outbound.bind(0x23, CodecPlayOutPlayerJoinGame.class, MessagePlayOutPlayerJoinGame.class); // 0x24 outbound.bind(0x25, CodecPlayOutEntityRelativeMove.class, MessagePlayOutEntityRelativeMove.class); outbound.bind(0x26, CodecPlayOutEntityLookAndRelativeMove.class, MessagePlayOutEntityLookAndRelativeMove.class); outbound.bind(0x27, CodecPlayOutEntityLook.class, MessagePlayOutEntityLook.class); // ... outbound.bind(0x2a, CodecPlayOutOpenSign.class, MessagePlayOutOpenSign.class); outbound.bind(0x2b, CodecPlayOutPlayerAbilities.class, MessagePlayOutPlayerAbilities.class); // 0x2c outbound.bind(0x2d, CodecPlayOutTabListEntries.class, MessagePlayOutTabListEntries.class); outbound.bind(0x2e, CodecPlayOutPlayerPositionAndLook.class, MessagePlayOutPlayerPositionAndLook.class); // ... outbound.bind(0x30, CodecPlayOutDestroyEntities.class, MessagePlayOutDestroyEntities.class); outbound.bind(0x31, CodecPlayOutRemovePotionEffect.class, MessagePlayOutRemovePotionEffect.class); outbound.bind(0x32, CodecPlayOutSendResourcePack.class, MessagePlayOutSendResourcePack.class); outbound.bind(0x33, CodecPlayOutPlayerRespawn.class, MessagePlayOutPlayerRespawn.class); outbound.bind(0x34, CodecPlayOutEntityHeadLook.class, MessagePlayOutEntityHeadLook.class); final CodecRegistration<MessagePlayOutWorldBorder, CodecPlayOutWorldBorder> codecPlayOutWorldBorder = outbound.bind(0x35, CodecPlayOutWorldBorder.class); codecPlayOutWorldBorder.bind(MessagePlayOutWorldBorder.Initialize.class); codecPlayOutWorldBorder.bind(MessagePlayOutWorldBorder.UpdateCenter.class); codecPlayOutWorldBorder.bind(MessagePlayOutWorldBorder.UpdateDiameter.class); codecPlayOutWorldBorder.bind(MessagePlayOutWorldBorder.UpdateLerpedDiameter.class); codecPlayOutWorldBorder.bind(MessagePlayOutWorldBorder.UpdateWarningDistance.class); codecPlayOutWorldBorder.bind(MessagePlayOutWorldBorder.UpdateWarningTime.class); outbound.bind(0x36, CodecPlayOutSetCamera.class, MessagePlayOutSetCamera.class); outbound.bind(0x37, CodecPlayInOutHeldItemChange.class, MessagePlayInOutHeldItemChange.class); outbound.bind(0x38, CodecPlayOutScoreboardDisplayObjective.class, MessagePlayOutScoreboardDisplayObjective.class); outbound.bind(0x39, CodecPlayOutEntityMetadata.class, MessagePlayOutEntityMetadata.class); // 0x3a outbound.bind(0x3b, CodecPlayOutEntityVelocity.class, MessagePlayOutEntityVelocity.class); outbound.bind(0x3c, CodecPlayOutEntityEquipment.class, MessagePlayOutEntityEquipment.class); outbound.bind(0x3d, CodecPlayOutSetExperience.class, MessagePlayOutSetExperience.class); outbound.bind(0x3e, CodecPlayOutPlayerHealthUpdate.class, MessagePlayOutPlayerHealthUpdate.class); final CodecRegistration<MessagePlayOutScoreboardObjective, CodecPlayOutScoreboardObjective> codecPlayOutScoreboardObjective = outbound.bind( 0x3f, CodecPlayOutScoreboardObjective.class); codecPlayOutScoreboardObjective.bind(MessagePlayOutScoreboardObjective.Create.class); codecPlayOutScoreboardObjective.bind(MessagePlayOutScoreboardObjective.Update.class); codecPlayOutScoreboardObjective.bind(MessagePlayOutScoreboardObjective.Remove.class); outbound.bind(0x40, CodecPlayOutSetEntityPassengers.class, MessagePlayOutSetEntityPassengers.class); final CodecRegistration<MessagePlayOutTeams, CodecPlayOutTeams> codecPlayOutTeams = outbound.bind( 0x41, CodecPlayOutTeams.class); codecPlayOutTeams.bind(MessagePlayOutTeams.AddPlayers.class); codecPlayOutTeams.bind(MessagePlayOutTeams.Create.class); codecPlayOutTeams.bind(MessagePlayOutTeams.Update.class); codecPlayOutTeams.bind(MessagePlayOutTeams.Remove.class); codecPlayOutTeams.bind(MessagePlayOutTeams.RemovePlayers.class); final CodecRegistration<MessagePlayOutScoreboardScore, CodecPlayOutScoreboardScore> codecPlayOutScoreboardScore = outbound.bind( 0x42, CodecPlayOutScoreboardScore.class); codecPlayOutScoreboardScore.bind(MessagePlayOutScoreboardScore.CreateOrUpdate.class); codecPlayOutScoreboardScore.bind(MessagePlayOutScoreboardScore.Remove.class); outbound.bind(0x43, CodecPlayOutPlayerSpawnPosition.class, MessagePlayOutPlayerSpawnPosition.class); outbound.bind(0x44, CodecPlayOutWorldTime.class, MessagePlayOutWorldTime.class); final CodecRegistration<MessagePlayOutTitle, CodecPlayOutTitle> codecPlayOutTitle = outbound.bind(0x45, CodecPlayOutTitle.class); codecPlayOutTitle.bind(MessagePlayOutTitle.Clear.class); codecPlayOutTitle.bind(MessagePlayOutTitle.Reset.class); codecPlayOutTitle.bind(MessagePlayOutTitle.SetSubtitle.class); codecPlayOutTitle.bind(MessagePlayOutTitle.SetActionbarTitle.class); codecPlayOutTitle.bind(MessagePlayOutTitle.SetTimes.class); codecPlayOutTitle.bind(MessagePlayOutTitle.SetTitle.class); outbound.bind(0x46, CodecPlayOutSoundEffect.class, MessagePlayOutSoundEffect.class); outbound.bind(0x47, CodecPlayOutTabListHeaderAndFooter.class, MessagePlayOutTabListHeaderAndFooter.class); outbound.bind(0x48, CodecPlayOutEntityCollectItem.class, MessagePlayOutEntityCollectItem.class); outbound.bind(0x49, CodecPlayOutEntityTeleport.class, MessagePlayOutEntityTeleport.class); // 0x4a outbound.bind(0x4b, CodecPlayOutAddPotionEffect.class, MessagePlayOutAddPotionEffect.class); } }