From 6845acd89d98986f4951a84c63ff9b878d2651ae Mon Sep 17 00:00:00 2001 From: Dan Mulloy Date: Sat, 26 Oct 2024 15:21:23 -0500 Subject: [PATCH] Update to 1.21.3 --- build.gradle | 12 +- .../com/comphenix/protocol/PacketType.java | 319 +++++++++--------- .../protocol/utility/MinecraftVersion.java | 7 +- .../protocol/wrappers/EnumWrappers.java | 9 +- .../protocol/wrappers/PlayerInfoData.java | 108 ++++-- .../protocol/wrappers/WrappedParticle.java | 120 ++++--- .../protocol/BukkitInitialization.java | 77 ++--- .../protocol/events/PacketContainerTest.java | 6 +- .../injector/EntityUtilitiesTest.java | 13 +- .../utility/MinecraftReflectionTest.java | 2 +- .../utility/MinecraftReflectionTestUtil.java | 2 +- .../utility/MinecraftVersionTest.java | 2 +- .../wrappers/ChunkCoordIntPairTest.java | 9 +- .../wrappers/WrappedAttributeTest.java | 2 +- .../wrappers/WrappedBlockDataTest.java | 8 +- .../wrappers/WrappedDataWatcherTest.java | 4 +- .../wrappers/WrappedStreamCodecTests.java | 4 +- 17 files changed, 386 insertions(+), 318 deletions(-) diff --git a/build.gradle b/build.gradle index d02c29811..4ea2ef8e9 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { } group = 'com.comphenix.protocol' -version = '5.3.0' +version = '5.4.0-SNAPSHOT' description = 'Provides access to the Minecraft protocol' def isSnapshot = version.endsWith('-SNAPSHOT') @@ -34,8 +34,8 @@ repositories { dependencies { implementation 'net.bytebuddy:byte-buddy:1.15.1' - compileOnly 'org.spigotmc:spigot-api:1.21.1-R0.1-SNAPSHOT' - compileOnly 'org.spigotmc:spigot:1.21.1-R0.1-SNAPSHOT' + compileOnly 'org.spigotmc:spigot-api:1.21.3-R0.1-SNAPSHOT' + compileOnly 'org.spigotmc:spigot:1.21.3-R0.1-SNAPSHOT' compileOnly 'io.netty:netty-all:4.0.23.Final' compileOnly 'net.kyori:adventure-text-serializer-gson:4.14.0' compileOnly 'com.googlecode.json-simple:json-simple:1.1.1' @@ -46,14 +46,14 @@ dependencies { testImplementation 'org.mockito:mockito-core:5.6.0' testImplementation 'io.netty:netty-common:4.1.97.Final' testImplementation 'io.netty:netty-transport:4.1.97.Final' - testImplementation 'org.spigotmc:spigot:1.21.1-R0.1-SNAPSHOT' + testImplementation 'org.spigotmc:spigot:1.21.3-R0.1-SNAPSHOT' testImplementation 'net.kyori:adventure-text-serializer-gson:4.14.0' testImplementation 'net.kyori:adventure-text-serializer-plain:4.14.0' } java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 withJavadocJar() withSourcesJar() diff --git a/src/main/java/com/comphenix/protocol/PacketType.java b/src/main/java/com/comphenix/protocol/PacketType.java index 9471674a6..42ca24fa3 100644 --- a/src/main/java/com/comphenix/protocol/PacketType.java +++ b/src/main/java/com/comphenix/protocol/PacketType.java @@ -139,100 +139,105 @@ public static class Server extends PacketTypeEnum { public static final PacketType KICK_DISCONNECT = new PacketType(PROTOCOL, SENDER, 0x1D, "Disconnect", "KickDisconnect", "SPacketDisconnect"); public static final PacketType DISGUISED_CHAT = new PacketType(PROTOCOL, SENDER, 0x1E, "DisguisedChat"); public static final PacketType ENTITY_STATUS = new PacketType(PROTOCOL, SENDER, 0x1F, "EntityEvent", "EntityStatus", "SPacketEntityStatus"); - public static final PacketType EXPLOSION = new PacketType(PROTOCOL, SENDER, 0x20, "Explode", "Explosion", "SPacketExplosion"); - public static final PacketType UNLOAD_CHUNK = new PacketType(PROTOCOL, SENDER, 0x21, "ForgetLevelChunk", "UnloadChunk", "SPacketUnloadChunk"); - public static final PacketType GAME_STATE_CHANGE = new PacketType(PROTOCOL, SENDER, 0x22, "GameEvent", "GameStateChange", "SPacketChangeGameState"); - public static final PacketType OPEN_WINDOW_HORSE = new PacketType(PROTOCOL, SENDER, 0x23, "HorseScreenOpen", "OpenWindowHorse"); - public static final PacketType HURT_ANIMATION = new PacketType(PROTOCOL, SENDER, 0x24, "HurtAnimation", "ClientboundHurtAnimationPacket"); - public static final PacketType INITIALIZE_BORDER = new PacketType(PROTOCOL, SENDER, 0x25, "InitializeBorder"); - public static final PacketType KEEP_ALIVE = new PacketType(PROTOCOL, SENDER, 0x26, "KeepAlive", "SPacketKeepAlive"); - public static final PacketType MAP_CHUNK = new PacketType(PROTOCOL, SENDER, 0x27, "LevelChunkWithLight", "MapChunk", "SPacketChunkData"); - public static final PacketType WORLD_EVENT = new PacketType(PROTOCOL, SENDER, 0x28, "LevelEvent", "WorldEvent", "SPacketEffect"); - public static final PacketType WORLD_PARTICLES = new PacketType(PROTOCOL, SENDER, 0x29, "LevelParticles", "WorldParticles", "SPacketParticles"); - public static final PacketType LIGHT_UPDATE = new PacketType(PROTOCOL, SENDER, 0x2A, "LightUpdate"); - public static final PacketType LOGIN = new PacketType(PROTOCOL, SENDER, 0x2B, "Login", "SPacketJoinGame"); - public static final PacketType MAP = new PacketType(PROTOCOL, SENDER, 0x2C, "MapItemData", "Map", "SPacketMaps"); - public static final PacketType OPEN_WINDOW_MERCHANT = new PacketType(PROTOCOL, SENDER, 0x2D, "MerchantOffers", "OpenWindowMerchant"); - public static final PacketType REL_ENTITY_MOVE = new PacketType(PROTOCOL, SENDER, 0x2E, "net.minecraft.network.protocol.game.ClientboundMoveEntityPacket$Pos", "Entity$RelEntityMove", "Entity$PacketPlayOutRelEntityMove"); - public static final PacketType REL_ENTITY_MOVE_LOOK = new PacketType(PROTOCOL, SENDER, 0x2F, "net.minecraft.network.protocol.game.ClientboundMoveEntityPacket$PosRot", "Entity$RelEntityMoveLook", "Entity$PacketPlayOutRelEntityMoveLook"); - public static final PacketType ENTITY_LOOK = new PacketType(PROTOCOL, SENDER, 0x30, "net.minecraft.network.protocol.game.ClientboundMoveEntityPacket$Rot", "Entity$EntityLook", "Entity$PacketPlayOutEntityLook"); - public static final PacketType VEHICLE_MOVE = new PacketType(PROTOCOL, SENDER, 0x31, "MoveVehicle", "VehicleMove", "SPacketMoveVehicle"); - public static final PacketType OPEN_BOOK = new PacketType(PROTOCOL, SENDER, 0x32, "OpenBook"); - public static final PacketType OPEN_WINDOW = new PacketType(PROTOCOL, SENDER, 0x33, "OpenScreen", "OpenWindow", "SPacketOpenWindow"); - public static final PacketType OPEN_SIGN_EDITOR = new PacketType(PROTOCOL, SENDER, 0x34, "OpenSignEditor", "SPacketSignEditorOpen"); - public static final PacketType PING = new PacketType(PROTOCOL, SENDER, 0x35, "Ping"); - public static final PacketType PONG_RESPONSE = new PacketType(PROTOCOL, SENDER, 0x36, "PongResponse"); - public static final PacketType AUTO_RECIPE = new PacketType(PROTOCOL, SENDER, 0x37, "PlaceGhostRecipe", "AutoRecipe", "SPacketPlaceGhostRecipe"); - public static final PacketType ABILITIES = new PacketType(PROTOCOL, SENDER, 0x38, "PlayerAbilities", "Abilities", "SPacketPlayerAbilities"); - public static final PacketType CHAT = new PacketType(PROTOCOL, SENDER, 0x39, "PlayerChat", "Chat", "SPacketChat"); - public static final PacketType PLAYER_COMBAT_END = new PacketType(PROTOCOL, SENDER, 0x3A, "PlayerCombatEnd"); - public static final PacketType PLAYER_COMBAT_ENTER = new PacketType(PROTOCOL, SENDER, 0x3B, "PlayerCombatEnter"); - public static final PacketType PLAYER_COMBAT_KILL = new PacketType(PROTOCOL, SENDER, 0x3C, "PlayerCombatKill"); - public static final PacketType PLAYER_INFO_REMOVE = new PacketType(PROTOCOL, SENDER, 0x3D, "PlayerInfoRemove"); - public static final PacketType PLAYER_INFO = new PacketType(PROTOCOL, SENDER, 0x3E, "PlayerInfoUpdate", "PlayerInfo"); - public static final PacketType LOOK_AT = new PacketType(PROTOCOL, SENDER, 0x3F, "PlayerLookAt", "LookAt", "SPacketPlayerPosLook"); - public static final PacketType POSITION = new PacketType(PROTOCOL, SENDER, 0x40, "PlayerPosition", "Position"); - public static final PacketType RECIPES = new PacketType(PROTOCOL, SENDER, 0x41, "Recipe", "Recipes", "SPacketRecipeBook"); - public static final PacketType ENTITY_DESTROY = new PacketType(PROTOCOL, SENDER, 0x42, "RemoveEntities", "EntityDestroy", "SPacketDestroyEntities"); - public static final PacketType REMOVE_ENTITY_EFFECT = new PacketType(PROTOCOL, SENDER, 0x43, "RemoveMobEffect", "RemoveEntityEffect", "SPacketRemoveEntityEffect"); - public static final PacketType RESET_SCORE = new PacketType(PROTOCOL, SENDER, 0x44, "ResetScore", "ResetScorePacket"); - public static final PacketType REMOVE_RESOURCE_PACK = new PacketType(PROTOCOL, SENDER, 0x45, "ResourcePackPop", "ResourcePackPopPacket"); - public static final PacketType ADD_RESOURCE_PACK = new PacketType(PROTOCOL, SENDER, 0x46, "ResourcePackPush", "ResourcePackPushPacket"); - public static final PacketType RESPAWN = new PacketType(PROTOCOL, SENDER, 0x47, "Respawn", "SPacketRespawn"); - public static final PacketType ENTITY_HEAD_ROTATION = new PacketType(PROTOCOL, SENDER, 0x48, "RotateHead", "EntityHeadRotation", "SPacketEntityHeadLook"); - public static final PacketType MULTI_BLOCK_CHANGE = new PacketType(PROTOCOL, SENDER, 0x49, "SectionBlocksUpdate", "MultiBlockChange", "SPacketMultiBlockChange"); - public static final PacketType SELECT_ADVANCEMENT_TAB = new PacketType(PROTOCOL, SENDER, 0x4A, "SelectAdvancementsTab", "SelectAdvancementTab", "SPacketSelectAdvancementsTab"); - public static final PacketType SERVER_DATA = new PacketType(PROTOCOL, SENDER, 0x4B, "ServerData"); - public static final PacketType SET_ACTION_BAR_TEXT = new PacketType(PROTOCOL, SENDER, 0x4C, "SetActionBarText"); - public static final PacketType SET_BORDER_CENTER = new PacketType(PROTOCOL, SENDER, 0x4D, "SetBorderCenter"); - public static final PacketType SET_BORDER_LERP_SIZE = new PacketType(PROTOCOL, SENDER, 0x4E, "SetBorderLerpSize"); - public static final PacketType SET_BORDER_SIZE = new PacketType(PROTOCOL, SENDER, 0x4F, "SetBorderSize"); - public static final PacketType SET_BORDER_WARNING_DELAY = new PacketType(PROTOCOL, SENDER, 0x50, "SetBorderWarningDelay"); - public static final PacketType SET_BORDER_WARNING_DISTANCE = new PacketType(PROTOCOL, SENDER, 0x51, "SetBorderWarningDistance"); - public static final PacketType CAMERA = new PacketType(PROTOCOL, SENDER, 0x52, "SetCamera", "Camera", "SPacketCamera"); - public static final PacketType HELD_ITEM_SLOT = new PacketType(PROTOCOL, SENDER, 0x53, "SetCarriedItem", "HeldItemSlot", "SPacketHeldItemChange"); - public static final PacketType VIEW_CENTRE = new PacketType(PROTOCOL, SENDER, 0x54, "SetChunkCacheCenter", "ViewCentre"); - public static final PacketType VIEW_DISTANCE = new PacketType(PROTOCOL, SENDER, 0x55, "SetChunkCacheRadius", "ViewDistance"); - public static final PacketType SPAWN_POSITION = new PacketType(PROTOCOL, SENDER, 0x56, "SetDefaultSpawnPosition", "SpawnPosition", "SPacketSpawnPosition"); - public static final PacketType SCOREBOARD_DISPLAY_OBJECTIVE = new PacketType(PROTOCOL, SENDER, 0x57, "SetDisplayObjective", "ScoreboardDisplayObjective", "SPacketDisplayObjective"); - public static final PacketType ENTITY_METADATA = new PacketType(PROTOCOL, SENDER, 0x58, "SetEntityData", "EntityMetadata", "SPacketEntityMetadata"); - public static final PacketType ATTACH_ENTITY = new PacketType(PROTOCOL, SENDER, 0x59, "SetEntityLink", "AttachEntity", "SPacketEntityAttach"); - public static final PacketType ENTITY_VELOCITY = new PacketType(PROTOCOL, SENDER, 0x5A, "SetEntityMotion", "EntityVelocity", "SPacketEntityVelocity"); - public static final PacketType ENTITY_EQUIPMENT = new PacketType(PROTOCOL, SENDER, 0x5B, "SetEquipment", "EntityEquipment", "SPacketEntityEquipment"); - public static final PacketType EXPERIENCE = new PacketType(PROTOCOL, SENDER, 0x5C, "SetExperience", "Experience", "SPacketSetExperience"); - public static final PacketType UPDATE_HEALTH = new PacketType(PROTOCOL, SENDER, 0x5D, "SetHealth", "UpdateHealth", "SPacketUpdateHealth"); - public static final PacketType SCOREBOARD_OBJECTIVE = new PacketType(PROTOCOL, SENDER, 0x5E, "SetObjective", "ScoreboardObjective", "SPacketScoreboardObjective"); - public static final PacketType MOUNT = new PacketType(PROTOCOL, SENDER, 0x5F, "SetPassengers", "Mount", "SPacketSetPassengers"); - public static final PacketType SCOREBOARD_TEAM = new PacketType(PROTOCOL, SENDER, 0x60, "SetPlayerTeam", "ScoreboardTeam", "SPacketTeams"); - public static final PacketType SCOREBOARD_SCORE = new PacketType(PROTOCOL, SENDER, 0x61, "SetScore", "ScoreboardScore", "SPacketUpdateScore"); - public static final PacketType UPDATE_SIMULATION_DISTANCE = new PacketType(PROTOCOL, SENDER, 0x62, "SetSimulationDistance"); - public static final PacketType SET_SUBTITLE_TEXT = new PacketType(PROTOCOL, SENDER, 0x63, "SetSubtitleText"); - public static final PacketType UPDATE_TIME = new PacketType(PROTOCOL, SENDER, 0x64, "SetTime", "UpdateTime", "SPacketTimeUpdate"); - public static final PacketType SET_TITLE_TEXT = new PacketType(PROTOCOL, SENDER, 0x65, "SetTitleText"); - public static final PacketType SET_TITLES_ANIMATION = new PacketType(PROTOCOL, SENDER, 0x66, "SetTitlesAnimation"); - public static final PacketType ENTITY_SOUND = new PacketType(PROTOCOL, SENDER, 0x67, "SoundEntity", "EntitySound", "SPacketSoundEffect"); - public static final PacketType NAMED_SOUND_EFFECT = new PacketType(PROTOCOL, SENDER, 0x68, "Sound", "NamedSoundEffect"); - public static final PacketType START_CONFIGURATION = new PacketType(PROTOCOL, SENDER, 0x69, "StartConfiguration"); - public static final PacketType STOP_SOUND = new PacketType(PROTOCOL, SENDER, 0x6A, "StopSound"); - public static final PacketType STORE_COOKIE = new PacketType(PROTOCOL, SENDER, 0x6B, "StoreCookie"); - public static final PacketType SYSTEM_CHAT = new PacketType(PROTOCOL, SENDER, 0x6C, "SystemChat"); - public static final PacketType PLAYER_LIST_HEADER_FOOTER = new PacketType(PROTOCOL, SENDER, 0x6D, "TabList", "PlayerListHeaderFooter", "SPacketPlayerListHeaderFooter"); - public static final PacketType NBT_QUERY = new PacketType(PROTOCOL, SENDER, 0x6E, "TagQuery", "NBTQuery"); - public static final PacketType COLLECT = new PacketType(PROTOCOL, SENDER, 0x6F, "TakeItemEntity", "Collect", "SPacketCollectItem"); - public static final PacketType ENTITY_TELEPORT = new PacketType(PROTOCOL, SENDER, 0x70, "TeleportEntity", "EntityTeleport", "SPacketEntityTeleport"); - public static final PacketType TICKING_STATE = new PacketType(PROTOCOL, SENDER, 0x71, "TickingState", "TickingStatePacket"); - public static final PacketType TICKING_STEP_STATE = new PacketType(PROTOCOL, SENDER, 0x72, "TickingStep", "TickingStepPacket"); - public static final PacketType TRANSFER = new PacketType(PROTOCOL, SENDER, 0x73, "Transfer"); - public static final PacketType ADVANCEMENTS = new PacketType(PROTOCOL, SENDER, 0x74, "UpdateAdvancements", "Advancements", "SPacketAdvancementInfo"); - public static final PacketType UPDATE_ATTRIBUTES = new PacketType(PROTOCOL, SENDER, 0x75, "UpdateAttributes", "SPacketEntityProperties"); - public static final PacketType ENTITY_EFFECT = new PacketType(PROTOCOL, SENDER, 0x76, "UpdateMobEffect", "EntityEffect", "SPacketEntityEffect"); - public static final PacketType RECIPE_UPDATE = new PacketType(PROTOCOL, SENDER, 0x77, "UpdateRecipes", "RecipeUpdate"); - public static final PacketType TAGS = new PacketType(PROTOCOL, SENDER, 0x78, "UpdateTags", "Tags"); - public static final PacketType PROJECTILE_POWER = new PacketType(PROTOCOL, SENDER, 0x79, "ProjectilePower"); - public static final PacketType REPORT_DETAILS = new PacketType(PROTOCOL, SENDER, 0x7A, "CustomReportDetails"); - public static final PacketType SERVER_LINKS = new PacketType(PROTOCOL, SENDER, 0x7B, "ServerLinks"); - - // ---- Removed in 1.9 + public static final PacketType ENTITY_POSITION_SYNC = new PacketType(PROTOCOL, SENDER, 0x20, "EntityPositionSync"); + public static final PacketType EXPLOSION = new PacketType(PROTOCOL, SENDER, 0x21, "Explode", "Explosion", "SPacketExplosion"); + public static final PacketType UNLOAD_CHUNK = new PacketType(PROTOCOL, SENDER, 0x22, "ForgetLevelChunk", "UnloadChunk", "SPacketUnloadChunk"); + public static final PacketType GAME_STATE_CHANGE = new PacketType(PROTOCOL, SENDER, 0x23, "GameEvent", "GameStateChange", "SPacketChangeGameState"); + public static final PacketType OPEN_WINDOW_HORSE = new PacketType(PROTOCOL, SENDER, 0x24, "HorseScreenOpen", "OpenWindowHorse"); + public static final PacketType HURT_ANIMATION = new PacketType(PROTOCOL, SENDER, 0x25, "HurtAnimation", "ClientboundHurtAnimationPacket"); + public static final PacketType INITIALIZE_BORDER = new PacketType(PROTOCOL, SENDER, 0x26, "InitializeBorder"); + public static final PacketType KEEP_ALIVE = new PacketType(PROTOCOL, SENDER, 0x27, "KeepAlive", "SPacketKeepAlive"); + public static final PacketType MAP_CHUNK = new PacketType(PROTOCOL, SENDER, 0x28, "LevelChunkWithLight", "MapChunk", "SPacketChunkData"); + public static final PacketType WORLD_EVENT = new PacketType(PROTOCOL, SENDER, 0x29, "LevelEvent", "WorldEvent", "SPacketEffect"); + public static final PacketType WORLD_PARTICLES = new PacketType(PROTOCOL, SENDER, 0x2A, "LevelParticles", "WorldParticles", "SPacketParticles"); + public static final PacketType LIGHT_UPDATE = new PacketType(PROTOCOL, SENDER, 0x2B, "LightUpdate"); + public static final PacketType LOGIN = new PacketType(PROTOCOL, SENDER, 0x2C, "Login", "SPacketJoinGame"); + public static final PacketType MAP = new PacketType(PROTOCOL, SENDER, 0x2D, "MapItemData", "Map", "SPacketMaps"); + public static final PacketType OPEN_WINDOW_MERCHANT = new PacketType(PROTOCOL, SENDER, 0x2E, "MerchantOffers", "OpenWindowMerchant"); + public static final PacketType REL_ENTITY_MOVE = new PacketType(PROTOCOL, SENDER, 0x2F, "net.minecraft.network.protocol.game.ClientboundMoveEntityPacket$Pos", "Entity$RelEntityMove", "Entity$PacketPlayOutRelEntityMove"); + public static final PacketType REL_ENTITY_MOVE_LOOK = new PacketType(PROTOCOL, SENDER, 0x30, "net.minecraft.network.protocol.game.ClientboundMoveEntityPacket$PosRot", "Entity$RelEntityMoveLook", "Entity$PacketPlayOutRelEntityMoveLook"); + public static final PacketType MOVE_MINECART = new PacketType(PROTOCOL, SENDER, 0x31, "MoveMinecart"); + public static final PacketType ENTITY_LOOK = new PacketType(PROTOCOL, SENDER, 0x32, "net.minecraft.network.protocol.game.ClientboundMoveEntityPacket$Rot", "Entity$EntityLook", "Entity$PacketPlayOutEntityLook"); + public static final PacketType VEHICLE_MOVE = new PacketType(PROTOCOL, SENDER, 0x33, "MoveVehicle", "VehicleMove", "SPacketMoveVehicle"); + public static final PacketType OPEN_BOOK = new PacketType(PROTOCOL, SENDER, 0x34, "OpenBook"); + public static final PacketType OPEN_WINDOW = new PacketType(PROTOCOL, SENDER, 0x35, "OpenScreen", "OpenWindow", "SPacketOpenWindow"); + public static final PacketType OPEN_SIGN_EDITOR = new PacketType(PROTOCOL, SENDER, 0x36, "OpenSignEditor", "SPacketSignEditorOpen"); + public static final PacketType PING = new PacketType(PROTOCOL, SENDER, 0x37, "Ping"); + public static final PacketType PONG_RESPONSE = new PacketType(PROTOCOL, SENDER, 0x38, "PongResponse"); + public static final PacketType AUTO_RECIPE = new PacketType(PROTOCOL, SENDER, 0x39, "PlaceGhostRecipe", "AutoRecipe", "SPacketPlaceGhostRecipe"); + public static final PacketType ABILITIES = new PacketType(PROTOCOL, SENDER, 0x3A, "PlayerAbilities", "Abilities", "SPacketPlayerAbilities"); + public static final PacketType CHAT = new PacketType(PROTOCOL, SENDER, 0x3B, "PlayerChat", "Chat", "SPacketChat"); + public static final PacketType PLAYER_COMBAT_END = new PacketType(PROTOCOL, SENDER, 0x3C, "PlayerCombatEnd"); + public static final PacketType PLAYER_COMBAT_ENTER = new PacketType(PROTOCOL, SENDER, 0x3D, "PlayerCombatEnter"); + public static final PacketType PLAYER_COMBAT_KILL = new PacketType(PROTOCOL, SENDER, 0x3E, "PlayerCombatKill"); + public static final PacketType PLAYER_INFO_REMOVE = new PacketType(PROTOCOL, SENDER, 0x3F, "PlayerInfoRemove"); + public static final PacketType PLAYER_INFO = new PacketType(PROTOCOL, SENDER, 0x40, "PlayerInfoUpdate", "PlayerInfo"); + public static final PacketType LOOK_AT = new PacketType(PROTOCOL, SENDER, 0x41, "PlayerLookAt", "LookAt", "SPacketPlayerPosLook"); + public static final PacketType POSITION = new PacketType(PROTOCOL, SENDER, 0x42, "PlayerPosition", "Position"); + public static final PacketType PLAYER_ROTATION = new PacketType(PROTOCOL, SENDER, 0x43, "PlayerRotation"); + public static final PacketType RECIPE_BOOK_ADD = new PacketType(PROTOCOL, SENDER, 0x44, "RecipeBookAdd"); + public static final PacketType RECIPE_BOOK_REMOVE = new PacketType(PROTOCOL, SENDER, 0x45, "RecipeBookRemove"); + public static final PacketType RECIPE_BOOK_SETTINGS = new PacketType(PROTOCOL, SENDER, 0x46, "RecipeBookSettings"); + public static final PacketType ENTITY_DESTROY = new PacketType(PROTOCOL, SENDER, 0x47, "RemoveEntities", "EntityDestroy", "SPacketDestroyEntities"); + public static final PacketType REMOVE_ENTITY_EFFECT = new PacketType(PROTOCOL, SENDER, 0x48, "RemoveMobEffect", "RemoveEntityEffect", "SPacketRemoveEntityEffect"); + public static final PacketType RESET_SCORE = new PacketType(PROTOCOL, SENDER, 0x49, "ResetScore", "ResetScorePacket"); + public static final PacketType REMOVE_RESOURCE_PACK = new PacketType(PROTOCOL, SENDER, 0x4A, "ResourcePackPop", "ResourcePackPopPacket"); + public static final PacketType ADD_RESOURCE_PACK = new PacketType(PROTOCOL, SENDER, 0x4B, "ResourcePackPush", "ResourcePackPushPacket"); + public static final PacketType RESPAWN = new PacketType(PROTOCOL, SENDER, 0x4C, "Respawn", "SPacketRespawn"); + public static final PacketType ENTITY_HEAD_ROTATION = new PacketType(PROTOCOL, SENDER, 0x4D, "RotateHead", "EntityHeadRotation", "SPacketEntityHeadLook"); + public static final PacketType MULTI_BLOCK_CHANGE = new PacketType(PROTOCOL, SENDER, 0x4E, "SectionBlocksUpdate", "MultiBlockChange", "SPacketMultiBlockChange"); + public static final PacketType SELECT_ADVANCEMENT_TAB = new PacketType(PROTOCOL, SENDER, 0x4F, "SelectAdvancementsTab", "SelectAdvancementTab", "SPacketSelectAdvancementsTab"); + public static final PacketType SERVER_DATA = new PacketType(PROTOCOL, SENDER, 0x50, "ServerData"); + public static final PacketType SET_ACTION_BAR_TEXT = new PacketType(PROTOCOL, SENDER, 0x51, "SetActionBarText"); + public static final PacketType SET_BORDER_CENTER = new PacketType(PROTOCOL, SENDER, 0x52, "SetBorderCenter"); + public static final PacketType SET_BORDER_LERP_SIZE = new PacketType(PROTOCOL, SENDER, 0x53, "SetBorderLerpSize"); + public static final PacketType SET_BORDER_SIZE = new PacketType(PROTOCOL, SENDER, 0x54, "SetBorderSize"); + public static final PacketType SET_BORDER_WARNING_DELAY = new PacketType(PROTOCOL, SENDER, 0x55, "SetBorderWarningDelay"); + public static final PacketType SET_BORDER_WARNING_DISTANCE = new PacketType(PROTOCOL, SENDER, 0x56, "SetBorderWarningDistance"); + public static final PacketType CAMERA = new PacketType(PROTOCOL, SENDER, 0x57, "SetCamera", "Camera", "SPacketCamera"); + public static final PacketType VIEW_CENTRE = new PacketType(PROTOCOL, SENDER, 0x58, "SetChunkCacheCenter", "ViewCentre"); + public static final PacketType VIEW_DISTANCE = new PacketType(PROTOCOL, SENDER, 0x59, "SetChunkCacheRadius", "ViewDistance"); + public static final PacketType SET_CURSOR_ITEM = new PacketType(PROTOCOL, SENDER, 0x5A, "SetCursorItem"); + public static final PacketType SPAWN_POSITION = new PacketType(PROTOCOL, SENDER, 0x5B, "SetDefaultSpawnPosition", "SpawnPosition", "SPacketSpawnPosition"); + public static final PacketType SCOREBOARD_DISPLAY_OBJECTIVE = new PacketType(PROTOCOL, SENDER, 0x5C, "SetDisplayObjective", "ScoreboardDisplayObjective", "SPacketDisplayObjective"); + public static final PacketType ENTITY_METADATA = new PacketType(PROTOCOL, SENDER, 0x5D, "SetEntityData", "EntityMetadata", "SPacketEntityMetadata"); + public static final PacketType ATTACH_ENTITY = new PacketType(PROTOCOL, SENDER, 0x5E, "SetEntityLink", "AttachEntity", "SPacketEntityAttach"); + public static final PacketType ENTITY_VELOCITY = new PacketType(PROTOCOL, SENDER, 0x5F, "SetEntityMotion", "EntityVelocity", "SPacketEntityVelocity"); + public static final PacketType ENTITY_EQUIPMENT = new PacketType(PROTOCOL, SENDER, 0x60, "SetEquipment", "EntityEquipment", "SPacketEntityEquipment"); + public static final PacketType EXPERIENCE = new PacketType(PROTOCOL, SENDER, 0x61, "SetExperience", "Experience", "SPacketSetExperience"); + public static final PacketType UPDATE_HEALTH = new PacketType(PROTOCOL, SENDER, 0x62, "SetHealth", "UpdateHealth", "SPacketUpdateHealth"); + public static final PacketType HELD_ITEM_SLOT = new PacketType(PROTOCOL, SENDER, 0x63, "SetCarriedItem", "HeldItemSlot", "SPacketHeldItemChange"); + public static final PacketType SCOREBOARD_OBJECTIVE = new PacketType(PROTOCOL, SENDER, 0x64, "SetObjective", "ScoreboardObjective", "SPacketScoreboardObjective"); + public static final PacketType MOUNT = new PacketType(PROTOCOL, SENDER, 0x65, "SetPassengers", "Mount", "SPacketSetPassengers"); + public static final PacketType SET_PLAYER_INVENTORY = new PacketType(PROTOCOL, SENDER, 0x66, "SetPlayerInventory"); + public static final PacketType SCOREBOARD_TEAM = new PacketType(PROTOCOL, SENDER, 0x67, "SetPlayerTeam", "ScoreboardTeam", "SPacketTeams"); + public static final PacketType SCOREBOARD_SCORE = new PacketType(PROTOCOL, SENDER, 0x68, "SetScore", "ScoreboardScore", "SPacketUpdateScore"); + public static final PacketType UPDATE_SIMULATION_DISTANCE = new PacketType(PROTOCOL, SENDER, 0x69, "SetSimulationDistance"); + public static final PacketType SET_SUBTITLE_TEXT = new PacketType(PROTOCOL, SENDER, 0x6A, "SetSubtitleText"); + public static final PacketType UPDATE_TIME = new PacketType(PROTOCOL, SENDER, 0x6B, "SetTime", "UpdateTime", "SPacketTimeUpdate"); + public static final PacketType SET_TITLE_TEXT = new PacketType(PROTOCOL, SENDER, 0x6C, "SetTitleText"); + public static final PacketType SET_TITLES_ANIMATION = new PacketType(PROTOCOL, SENDER, 0x6D, "SetTitlesAnimation"); + public static final PacketType ENTITY_SOUND = new PacketType(PROTOCOL, SENDER, 0x6E, "SoundEntity", "EntitySound", "SPacketSoundEffect"); + public static final PacketType NAMED_SOUND_EFFECT = new PacketType(PROTOCOL, SENDER, 0x6F, "Sound", "NamedSoundEffect"); + public static final PacketType START_CONFIGURATION = new PacketType(PROTOCOL, SENDER, 0x70, "StartConfiguration"); + public static final PacketType STOP_SOUND = new PacketType(PROTOCOL, SENDER, 0x71, "StopSound"); + public static final PacketType STORE_COOKIE = new PacketType(PROTOCOL, SENDER, 0x72, "StoreCookie"); + public static final PacketType SYSTEM_CHAT = new PacketType(PROTOCOL, SENDER, 0x73, "SystemChat"); + public static final PacketType PLAYER_LIST_HEADER_FOOTER = new PacketType(PROTOCOL, SENDER, 0x74, "TabList", "PlayerListHeaderFooter", "SPacketPlayerListHeaderFooter"); + public static final PacketType NBT_QUERY = new PacketType(PROTOCOL, SENDER, 0x75, "TagQuery", "NBTQuery"); + public static final PacketType COLLECT = new PacketType(PROTOCOL, SENDER, 0x76, "TakeItemEntity", "Collect", "SPacketCollectItem"); + public static final PacketType ENTITY_TELEPORT = new PacketType(PROTOCOL, SENDER, 0x77, "TeleportEntity", "EntityTeleport", "SPacketEntityTeleport"); + public static final PacketType TICKING_STATE = new PacketType(PROTOCOL, SENDER, 0x78, "TickingState", "TickingStatePacket"); + public static final PacketType TICKING_STEP_STATE = new PacketType(PROTOCOL, SENDER, 0x79, "TickingStep", "TickingStepPacket"); + public static final PacketType TRANSFER = new PacketType(PROTOCOL, SENDER, 0x7A, "Transfer"); + public static final PacketType ADVANCEMENTS = new PacketType(PROTOCOL, SENDER, 0x7B, "UpdateAdvancements", "Advancements", "SPacketAdvancementInfo"); + public static final PacketType UPDATE_ATTRIBUTES = new PacketType(PROTOCOL, SENDER, 0x7C, "UpdateAttributes", "SPacketEntityProperties"); + public static final PacketType ENTITY_EFFECT = new PacketType(PROTOCOL, SENDER, 0x7D, "UpdateMobEffect", "EntityEffect", "SPacketEntityEffect"); + public static final PacketType RECIPE_UPDATE = new PacketType(PROTOCOL, SENDER, 0x7E, "UpdateRecipes", "RecipeUpdate"); + public static final PacketType TAGS = new PacketType(PROTOCOL, SENDER, 0x7F, "UpdateTags", "Tags"); + public static final PacketType PROJECTILE_POWER = new PacketType(PROTOCOL, SENDER, 0x80, "ProjectilePower"); + public static final PacketType REPORT_DETAILS = new PacketType(PROTOCOL, SENDER, 0x81, "CustomReportDetails"); + public static final PacketType SERVER_LINKS = new PacketType(PROTOCOL, SENDER, 0x82, "ServerLinks"); /** * @deprecated Removed in 1.9 @@ -252,8 +257,6 @@ public static class Server extends PacketTypeEnum { @Deprecated public static final PacketType UPDATE_ENTITY_NBT = new PacketType(PROTOCOL, SENDER, 253, "UpdateEntityNBT"); - // ----- Renamed packets - /** * @deprecated Renamed to {@link #WINDOW_DATA} */ @@ -278,8 +281,6 @@ public static class Server extends PacketTypeEnum { @Deprecated public static final PacketType OPEN_SIGN_ENTITY = OPEN_SIGN_EDITOR.clone(); - // ----- Replaced in 1.9.4 - /** * @deprecated Replaced by {@link #TILE_ENTITY_DATA} */ @@ -287,8 +288,6 @@ public static class Server extends PacketTypeEnum { public static final PacketType UPDATE_SIGN = MinecraftReflection.signUpdateExists() ? new PacketType(PROTOCOL, SENDER, 252, "UpdateSign") : TILE_ENTITY_DATA.clone(); - // ---- Removed in 1.14 - /** * @deprecated Removed in 1.14 */ @@ -403,6 +402,12 @@ public static class Server extends PacketTypeEnum { @Deprecated public static final PacketType RESOURCE_PACK_SEND = new PacketType(PROTOCOL, SENDER, 234, "ResourcePackSend", "SPacketResourcePackSend"); + /** + * @deprecated Removed in 1.21.2: replaced with individual packets for adding/removing recipes + */ + @Deprecated + public static final PacketType RECIPES = new PacketType(PROTOCOL, SENDER, 0x41, "Recipe", "Recipes", "SPacketRecipeBook"); + private static final Server INSTANCE = new Server(); // Prevent accidental construction @@ -425,62 +430,64 @@ public static class Client extends PacketTypeEnum { public static final PacketType TELEPORT_ACCEPT = new PacketType(PROTOCOL, SENDER, 0x00, "AcceptTeleportation", "TeleportAccept", "CPacketConfirmTeleport"); public static final PacketType TILE_NBT_QUERY = new PacketType(PROTOCOL, SENDER, 0x01, "BlockEntityTagQuery", "TileNBTQuery"); - public static final PacketType DIFFICULTY_CHANGE = new PacketType(PROTOCOL, SENDER, 0x02, "ChangeDifficulty", "DifficultyChange"); - public static final PacketType CHAT_ACK = new PacketType(PROTOCOL, SENDER, 0x03, "ChatAck"); - public static final PacketType CHAT_COMMAND = new PacketType(PROTOCOL, SENDER, 0x04, "ChatCommand"); - public static final PacketType CHAT_COMMAND_SIGNED = new PacketType(PROTOCOL, SENDER, 0x05, "ChatCommandSigned"); - public static final PacketType CHAT = new PacketType(PROTOCOL, SENDER, 0x06, "Chat", "CPacketChatMessage"); - public static final PacketType CHAT_SESSION_UPDATE = new PacketType(PROTOCOL, SENDER, 0x07, "ChatSessionUpdate"); - public static final PacketType CHUNK_BATCH_RECEIVED = new PacketType(PROTOCOL, SENDER, 0x08, "ChunkBatchReceived"); - public static final PacketType CLIENT_COMMAND = new PacketType(PROTOCOL, SENDER, 0x09, "ClientCommand", "CPacketClientStatus"); - public static final PacketType SETTINGS = new PacketType(PROTOCOL, SENDER, 0x0A, "ClientInformation", "Settings", "CPacketClientSettings"); - public static final PacketType TAB_COMPLETE = new PacketType(PROTOCOL, SENDER, 0x0B, "CommandSuggestion", "TabComplete", "CPacketTabComplete"); - public static final PacketType CONFIGURATION_ACK = new PacketType(PROTOCOL, SENDER, 0x0C, "ConfigurationAcknowledged"); - public static final PacketType ENCHANT_ITEM = new PacketType(PROTOCOL, SENDER, 0x0D, "ContainerButtonClick", "EnchantItem", "CPacketEnchantItem"); - public static final PacketType WINDOW_CLICK = new PacketType(PROTOCOL, SENDER, 0x0E, "ContainerClick", "WindowClick", "CPacketClickWindow"); - public static final PacketType CLOSE_WINDOW = new PacketType(PROTOCOL, SENDER, 0x0F, "ContainerClose", "CloseWindow", "CPacketCloseWindow"); - public static final PacketType CONTAINER_SLOT_STATE_CHANGED = new PacketType(PROTOCOL, SENDER, 0x10, "ContainerSlotStateChanged", "ContainerSlotStateChangedPacket"); - public static final PacketType COOKIE_RESPONSE = new PacketType(PROTOCOL, SENDER, 0x11, "CookieResponse"); - public static final PacketType CUSTOM_PAYLOAD = new PacketType(PROTOCOL, SENDER, 0x12, "CustomPayload", "CPacketCustomPayload"); - public static final PacketType DEBUG_SAMPLE_SUBSCRIPTION = new PacketType(PROTOCOL, SENDER, 0x13, "DebugSampleSubscription"); - public static final PacketType B_EDIT = new PacketType(PROTOCOL, SENDER, 0x14, "EditBook", "BEdit"); - public static final PacketType ENTITY_NBT_QUERY = new PacketType(PROTOCOL, SENDER, 0x15, "EntityTagQuery", "EntityNBTQuery"); - public static final PacketType USE_ENTITY = new PacketType(PROTOCOL, SENDER, 0x16, "Interact", "UseEntity", "CPacketUseEntity"); - public static final PacketType JIGSAW_GENERATE = new PacketType(PROTOCOL, SENDER, 0x17, "JigsawGenerate"); - public static final PacketType KEEP_ALIVE = new PacketType(PROTOCOL, SENDER, 0x18, "KeepAlive", "CPacketKeepAlive"); - public static final PacketType DIFFICULTY_LOCK = new PacketType(PROTOCOL, SENDER, 0x19, "LockDifficulty", "DifficultyLock"); - public static final PacketType POSITION = new PacketType(PROTOCOL, SENDER, 0x1A, "net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$Pos", "Flying$Position", "Flying$PacketPlayInPosition", "CPacketPlayer$Position"); - public static final PacketType POSITION_LOOK = new PacketType(PROTOCOL, SENDER, 0x1B, "net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$PosRot", "Flying$PositionLook", "Flying$PacketPlayInPositionLook", "CPacketPlayer$PositionRotation"); - public static final PacketType LOOK = new PacketType(PROTOCOL, SENDER, 0x1C, "net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$Rot", "Flying$Look", "Flying$PacketPlayInLook", "CPacketPlayer$Rotation"); - public static final PacketType GROUND = new PacketType(PROTOCOL, SENDER, 0x1D, "net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$StatusOnly", "Flying$d"); - public static final PacketType VEHICLE_MOVE = new PacketType(PROTOCOL, SENDER, 0x1E, "MoveVehicle", "VehicleMove", "CPacketVehicleMove"); - public static final PacketType BOAT_MOVE = new PacketType(PROTOCOL, SENDER, 0x1F, "PaddleBoat", "BoatMove", "CPacketSteerBoat"); - public static final PacketType PICK_ITEM = new PacketType(PROTOCOL, SENDER, 0x20, "PickItem"); - public static final PacketType PING_REQUEST = new PacketType(PROTOCOL, SENDER, 0x21, "PingRequest"); - public static final PacketType AUTO_RECIPE = new PacketType(PROTOCOL, SENDER, 0x22, "PlaceRecipe", "AutoRecipe", "CPacketPlaceRecipe"); - public static final PacketType ABILITIES = new PacketType(PROTOCOL, SENDER, 0x23, "PlayerAbilities", "Abilities", "CPacketPlayerAbilities"); - public static final PacketType BLOCK_DIG = new PacketType(PROTOCOL, SENDER, 0x24, "PlayerAction", "BlockDig", "CPacketPlayerDigging"); - public static final PacketType ENTITY_ACTION = new PacketType(PROTOCOL, SENDER, 0x25, "PlayerCommand", "EntityAction", "CPacketEntityAction"); - public static final PacketType STEER_VEHICLE = new PacketType(PROTOCOL, SENDER, 0x26, "PlayerInput", "SteerVehicle", "CPacketInput"); - public static final PacketType PONG = new PacketType(PROTOCOL, SENDER, 0x27, "Pong"); - public static final PacketType RECIPE_SETTINGS = new PacketType(PROTOCOL, SENDER, 0x28, "RecipeBookChangeSettings", "RecipeSettings"); - public static final PacketType RECIPE_DISPLAYED = new PacketType(PROTOCOL, SENDER, 0x29, "RecipeBookSeenRecipe", "RecipeDisplayed", "CPacketRecipeInfo"); - public static final PacketType ITEM_NAME = new PacketType(PROTOCOL, SENDER, 0x2A, "RenameItem", "ItemName"); - public static final PacketType RESOURCE_PACK_STATUS = new PacketType(PROTOCOL, SENDER, 0x2B, "ResourcePack", "ResourcePackStatus", "CPacketResourcePackStatus"); - public static final PacketType ADVANCEMENTS = new PacketType(PROTOCOL, SENDER, 0x2C, "SeenAdvancements", "Advancements", "CPacketSeenAdvancements"); - public static final PacketType TR_SEL = new PacketType(PROTOCOL, SENDER, 0x2D, "SelectTrade", "TrSel"); - public static final PacketType BEACON = new PacketType(PROTOCOL, SENDER, 0x2E, "SetBeacon", "Beacon"); - public static final PacketType HELD_ITEM_SLOT = new PacketType(PROTOCOL, SENDER, 0x2F, "SetCarriedItem", "HeldItemSlot", "CPacketHeldItemChange"); - public static final PacketType SET_COMMAND_BLOCK = new PacketType(PROTOCOL, SENDER, 0x30, "SetCommandBlock"); - public static final PacketType SET_COMMAND_MINECART = new PacketType(PROTOCOL, SENDER, 0x31, "SetCommandMinecart"); - public static final PacketType SET_CREATIVE_SLOT = new PacketType(PROTOCOL, SENDER, 0x32, "SetCreativeModeSlot", "SetCreativeSlot", "CPacketCreativeInventoryAction"); - public static final PacketType SET_JIGSAW = new PacketType(PROTOCOL, SENDER, 0x33, "SetJigsawBlock", "SetJigsaw"); - public static final PacketType STRUCT = new PacketType(PROTOCOL, SENDER, 0x34, "SetStructureBlock", "Struct"); - public static final PacketType UPDATE_SIGN = new PacketType(PROTOCOL, SENDER, 0x35, "SignUpdate", "UpdateSign", "CPacketUpdateSign"); - public static final PacketType ARM_ANIMATION = new PacketType(PROTOCOL, SENDER, 0x36, "Swing", "ArmAnimation", "CPacketAnimation"); - public static final PacketType SPECTATE = new PacketType(PROTOCOL, SENDER, 0x37, "TeleportToEntity", "Spectate", "CPacketSpectate"); - public static final PacketType USE_ITEM_ON = new PacketType(PROTOCOL, SENDER, 0x38, "UseItemOn", "BlockPlace", "CPacketPlayerTryUseItemOnBlock"); - public static final PacketType USE_ITEM = new PacketType(PROTOCOL, SENDER, 0x39, "UseItem", "CPacketPlayerTryUseItem"); + public static final PacketType SELECT_BUNDLE_ITEM = new PacketType(PROTOCOL, SENDER, 0x02, "SelectBundleItem"); + public static final PacketType DIFFICULTY_CHANGE = new PacketType(PROTOCOL, SENDER, 0x03, "ChangeDifficulty", "DifficultyChange"); + public static final PacketType CHAT_ACK = new PacketType(PROTOCOL, SENDER, 0x04, "ChatAck"); + public static final PacketType CHAT_COMMAND = new PacketType(PROTOCOL, SENDER, 0x05, "ChatCommand"); + public static final PacketType CHAT_COMMAND_SIGNED = new PacketType(PROTOCOL, SENDER, 0x06, "ChatCommandSigned"); + public static final PacketType CHAT = new PacketType(PROTOCOL, SENDER, 0x07, "Chat", "CPacketChatMessage"); + public static final PacketType CHAT_SESSION_UPDATE = new PacketType(PROTOCOL, SENDER, 0x08, "ChatSessionUpdate"); + public static final PacketType CHUNK_BATCH_RECEIVED = new PacketType(PROTOCOL, SENDER, 0x09, "ChunkBatchReceived"); + public static final PacketType CLIENT_COMMAND = new PacketType(PROTOCOL, SENDER, 0x0A, "ClientCommand", "CPacketClientStatus"); + public static final PacketType CLIENT_TICK_END = new PacketType(PROTOCOL, SENDER, 0x0B, "ClientTickEnd"); + public static final PacketType SETTINGS = new PacketType(PROTOCOL, SENDER, 0x0C, "ClientInformation", "Settings", "CPacketClientSettings"); + public static final PacketType TAB_COMPLETE = new PacketType(PROTOCOL, SENDER, 0x0D, "CommandSuggestion", "TabComplete", "CPacketTabComplete"); + public static final PacketType CONFIGURATION_ACK = new PacketType(PROTOCOL, SENDER, 0x0E, "ConfigurationAcknowledged"); + public static final PacketType ENCHANT_ITEM = new PacketType(PROTOCOL, SENDER, 0x0F, "ContainerButtonClick", "EnchantItem", "CPacketEnchantItem"); + public static final PacketType WINDOW_CLICK = new PacketType(PROTOCOL, SENDER, 0x10, "ContainerClick", "WindowClick", "CPacketClickWindow"); + public static final PacketType CLOSE_WINDOW = new PacketType(PROTOCOL, SENDER, 0x11, "ContainerClose", "CloseWindow", "CPacketCloseWindow"); + public static final PacketType CONTAINER_SLOT_STATE_CHANGED = new PacketType(PROTOCOL, SENDER, 0x12, "ContainerSlotStateChanged", "ContainerSlotStateChangedPacket"); + public static final PacketType COOKIE_RESPONSE = new PacketType(PROTOCOL, SENDER, 0x13, "CookieResponse"); + public static final PacketType CUSTOM_PAYLOAD = new PacketType(PROTOCOL, SENDER, 0x14, "CustomPayload", "CPacketCustomPayload"); + public static final PacketType DEBUG_SAMPLE_SUBSCRIPTION = new PacketType(PROTOCOL, SENDER, 0x15, "DebugSampleSubscription"); + public static final PacketType B_EDIT = new PacketType(PROTOCOL, SENDER, 0x16, "EditBook", "BEdit"); + public static final PacketType ENTITY_NBT_QUERY = new PacketType(PROTOCOL, SENDER, 0x17, "EntityTagQuery", "EntityNBTQuery"); + public static final PacketType USE_ENTITY = new PacketType(PROTOCOL, SENDER, 0x18, "Interact", "UseEntity", "CPacketUseEntity"); + public static final PacketType JIGSAW_GENERATE = new PacketType(PROTOCOL, SENDER, 0x19, "JigsawGenerate"); + public static final PacketType KEEP_ALIVE = new PacketType(PROTOCOL, SENDER, 0x1A, "KeepAlive", "CPacketKeepAlive"); + public static final PacketType DIFFICULTY_LOCK = new PacketType(PROTOCOL, SENDER, 0x1B, "LockDifficulty", "DifficultyLock"); + public static final PacketType POSITION = new PacketType(PROTOCOL, SENDER, 0x1C, "net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$Pos", "Flying$Position", "Flying$PacketPlayInPosition", "CPacketPlayer$Position"); + public static final PacketType POSITION_LOOK = new PacketType(PROTOCOL, SENDER, 0x1D, "net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$PosRot", "Flying$PositionLook", "Flying$PacketPlayInPositionLook", "CPacketPlayer$PositionRotation"); + public static final PacketType LOOK = new PacketType(PROTOCOL, SENDER, 0x1E, "net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$Rot", "Flying$Look", "Flying$PacketPlayInLook", "CPacketPlayer$Rotation"); + public static final PacketType GROUND = new PacketType(PROTOCOL, SENDER, 0x1F, "net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$StatusOnly", "Flying$d"); + public static final PacketType VEHICLE_MOVE = new PacketType(PROTOCOL, SENDER, 0x20, "MoveVehicle", "VehicleMove", "CPacketVehicleMove"); + public static final PacketType BOAT_MOVE = new PacketType(PROTOCOL, SENDER, 0x21, "PaddleBoat", "BoatMove", "CPacketSteerBoat"); + public static final PacketType PICK_ITEM = new PacketType(PROTOCOL, SENDER, 0x22, "PickItem"); + public static final PacketType PING_REQUEST = new PacketType(PROTOCOL, SENDER, 0x23, "PingRequest"); + public static final PacketType AUTO_RECIPE = new PacketType(PROTOCOL, SENDER, 0x24, "PlaceRecipe", "AutoRecipe", "CPacketPlaceRecipe"); + public static final PacketType ABILITIES = new PacketType(PROTOCOL, SENDER, 0x25, "PlayerAbilities", "Abilities", "CPacketPlayerAbilities"); + public static final PacketType BLOCK_DIG = new PacketType(PROTOCOL, SENDER, 0x26, "PlayerAction", "BlockDig", "CPacketPlayerDigging"); + public static final PacketType ENTITY_ACTION = new PacketType(PROTOCOL, SENDER, 0x27, "PlayerCommand", "EntityAction", "CPacketEntityAction"); + public static final PacketType STEER_VEHICLE = new PacketType(PROTOCOL, SENDER, 0x28, "PlayerInput", "SteerVehicle", "CPacketInput"); + public static final PacketType PONG = new PacketType(PROTOCOL, SENDER, 0x29, "Pong"); + public static final PacketType RECIPE_SETTINGS = new PacketType(PROTOCOL, SENDER, 0x2A, "RecipeBookChangeSettings", "RecipeSettings"); + public static final PacketType RECIPE_DISPLAYED = new PacketType(PROTOCOL, SENDER, 0x2B, "RecipeBookSeenRecipe", "RecipeDisplayed", "CPacketRecipeInfo"); + public static final PacketType ITEM_NAME = new PacketType(PROTOCOL, SENDER, 0x2C, "RenameItem", "ItemName"); + public static final PacketType RESOURCE_PACK_STATUS = new PacketType(PROTOCOL, SENDER, 0x2D, "ResourcePack", "ResourcePackStatus", "CPacketResourcePackStatus"); + public static final PacketType ADVANCEMENTS = new PacketType(PROTOCOL, SENDER, 0x2E, "SeenAdvancements", "Advancements", "CPacketSeenAdvancements"); + public static final PacketType TR_SEL = new PacketType(PROTOCOL, SENDER, 0x2F, "SelectTrade", "TrSel"); + public static final PacketType BEACON = new PacketType(PROTOCOL, SENDER, 0x30, "SetBeacon", "Beacon"); + public static final PacketType HELD_ITEM_SLOT = new PacketType(PROTOCOL, SENDER, 0x31, "SetCarriedItem", "HeldItemSlot", "CPacketHeldItemChange"); + public static final PacketType SET_COMMAND_BLOCK = new PacketType(PROTOCOL, SENDER, 0x32, "SetCommandBlock"); + public static final PacketType SET_COMMAND_MINECART = new PacketType(PROTOCOL, SENDER, 0x33, "SetCommandMinecart"); + public static final PacketType SET_CREATIVE_SLOT = new PacketType(PROTOCOL, SENDER, 0x34, "SetCreativeModeSlot", "SetCreativeSlot", "CPacketCreativeInventoryAction"); + public static final PacketType SET_JIGSAW = new PacketType(PROTOCOL, SENDER, 0x35, "SetJigsawBlock", "SetJigsaw"); + public static final PacketType STRUCT = new PacketType(PROTOCOL, SENDER, 0x36, "SetStructureBlock", "Struct"); + public static final PacketType UPDATE_SIGN = new PacketType(PROTOCOL, SENDER, 0x37, "SignUpdate", "UpdateSign", "CPacketUpdateSign"); + public static final PacketType ARM_ANIMATION = new PacketType(PROTOCOL, SENDER, 0x38, "Swing", "ArmAnimation", "CPacketAnimation"); + public static final PacketType SPECTATE = new PacketType(PROTOCOL, SENDER, 0x39, "TeleportToEntity", "Spectate", "CPacketSpectate"); + public static final PacketType USE_ITEM_ON = new PacketType(PROTOCOL, SENDER, 0x3B, "UseItemOn", "BlockPlace", "CPacketPlayerTryUseItemOnBlock"); + public static final PacketType USE_ITEM = new PacketType(PROTOCOL, SENDER, 0x3A, "UseItem", "CPacketPlayerTryUseItem"); /** * @deprecated Removed in 1.17 diff --git a/src/main/java/com/comphenix/protocol/utility/MinecraftVersion.java b/src/main/java/com/comphenix/protocol/utility/MinecraftVersion.java index c6783f618..58c9516f4 100644 --- a/src/main/java/com/comphenix/protocol/utility/MinecraftVersion.java +++ b/src/main/java/com/comphenix/protocol/utility/MinecraftVersion.java @@ -36,6 +36,11 @@ * @author Kristian */ public final class MinecraftVersion implements Comparable, Serializable { + /** + * Version 1.21.2 - the bundles of bravery drop + */ + public static final MinecraftVersion v1_21_2 = new MinecraftVersion("1.21.2"); + /** * Version 1.21.0 - the tricky trials update */ @@ -149,7 +154,7 @@ public final class MinecraftVersion implements Comparable, Ser /** * The latest release version of minecraft. */ - public static final MinecraftVersion LATEST = v1_21_0; + public static final MinecraftVersion LATEST = v1_21_2; // used when serializing private static final long serialVersionUID = -8695133558996459770L; diff --git a/src/main/java/com/comphenix/protocol/wrappers/EnumWrappers.java b/src/main/java/com/comphenix/protocol/wrappers/EnumWrappers.java index c848d004f..8096dac55 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/EnumWrappers.java +++ b/src/main/java/com/comphenix/protocol/wrappers/EnumWrappers.java @@ -11,10 +11,6 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import org.apache.commons.lang.Validate; -import org.bukkit.ChatColor; -import org.bukkit.GameMode; - import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType.Protocol; import com.comphenix.protocol.ProtocolLogger; @@ -27,6 +23,10 @@ import com.comphenix.protocol.utility.MinecraftReflection; import com.comphenix.protocol.utility.MinecraftVersion; +import org.apache.commons.lang.Validate; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; + /** * Represents a generic enum converter. * @author Kristian @@ -140,6 +140,7 @@ public enum PlayerInfoAction { UPDATE_LISTED, UPDATE_LATENCY, UPDATE_DISPLAY_NAME, + UPDATE_LIST_ORDER, /** * @deprecated Removed in 1.19.3 */ diff --git a/src/main/java/com/comphenix/protocol/wrappers/PlayerInfoData.java b/src/main/java/com/comphenix/protocol/wrappers/PlayerInfoData.java index f339a2f0d..d0ed09914 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/PlayerInfoData.java +++ b/src/main/java/com/comphenix/protocol/wrappers/PlayerInfoData.java @@ -16,12 +16,12 @@ */ package com.comphenix.protocol.wrappers; -import com.comphenix.protocol.wrappers.WrappedProfilePublicKey.WrappedProfileKeyData; import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.UUID; +import javax.annotation.Nullable; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.reflect.EquivalentConverter; @@ -29,8 +29,7 @@ import com.comphenix.protocol.utility.MinecraftReflection; import com.comphenix.protocol.utility.MinecraftVersion; import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode; - -import javax.annotation.Nullable; +import com.comphenix.protocol.wrappers.WrappedProfilePublicKey.WrappedProfileKeyData; /** * Represents an immutable PlayerInfoData in the PLAYER_INFO packet. @@ -41,6 +40,7 @@ public class PlayerInfoData { private final UUID profileId; private final int latency; + private final int listOrder = 0; private final boolean listed; private final NativeGameMode gameMode; private final WrappedGameProfile profile; @@ -202,7 +202,9 @@ public WrappedRemoteChatSessionData getRemoteChatSessionData() { * @return A new converter. */ public static EquivalentConverter getConverter() { - return new EquivalentConverter() { + return new EquivalentConverter<>() { + private static final Class[] EMPTY_CLASS_ARRAY = new Class[0]; + @Override public Object getGeneric(PlayerInfoData specific) { if (constructor == null) { @@ -225,13 +227,17 @@ public Object getGeneric(PlayerInfoData specific) { args.add(EnumWrappers.getGameModeClass()); args.add(MinecraftReflection.getIChatBaseComponentClass()); + if (MinecraftVersion.v1_21_2.atOrAbove()) { + args.add(int.class); + } + if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) { args.add(MinecraftReflection.getRemoteChatSessionDataClass()); } else if (MinecraftVersion.WILD_UPDATE.atOrAbove()) { args.add(MinecraftReflection.getProfilePublicKeyDataClass()); } - constructor = MinecraftReflection.getPlayerInfoDataClass().getConstructor(args.toArray(new Class[0])); + constructor = MinecraftReflection.getPlayerInfoDataClass().getConstructor(args.toArray(EMPTY_CLASS_ARRAY)); } catch (Exception e) { throw new RuntimeException("Cannot find PlayerInfoData constructor.", e); } @@ -242,30 +248,58 @@ public Object getGeneric(PlayerInfoData specific) { try { Object gameMode = EnumWrappers.getGameModeConverter().getGeneric(specific.gameMode); Object displayName = specific.displayName != null ? specific.displayName.handle : null; - Object profile = specific.profile != null ? specific.profile.handle : null; - if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) { - return constructor.newInstance( - specific.profileId, - profile, - specific.listed, - specific.latency, - gameMode, - displayName, - specific.remoteChatSessionData != null ? BukkitConverters.getWrappedRemoteChatSessionDataConverter().getGeneric(specific.remoteChatSessionData) : null - ); + Object remoteChatSessionData = specific.remoteChatSessionData != null ? BukkitConverters.getWrappedRemoteChatSessionDataConverter().getGeneric(specific.remoteChatSessionData) : null; + + Object[] args; + + if (MinecraftVersion.v1_21_2.atOrAbove()) { + args = new Object[] { + specific.profileId, + profile, + specific.listed, + specific.latency, + gameMode, + displayName, + specific.listOrder, + remoteChatSessionData + }; + } else if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) { + args = new Object[] { + specific.profileId, + profile, + specific.listed, + specific.latency, + gameMode, + displayName, + remoteChatSessionData + }; } else if (MinecraftVersion.WILD_UPDATE.atOrAbove()) { - return constructor.newInstance( - profile, - specific.latency, - gameMode, - displayName, - specific.profileKeyData == null ? null : specific.profileKeyData.handle); + args = new Object[] { + profile, + specific.latency, + gameMode, + displayName, + specific.profileKeyData == null ? null : specific.profileKeyData.handle + }; } else if (MinecraftVersion.CAVES_CLIFFS_1.atOrAbove()) { - return constructor.newInstance(profile, specific.latency, gameMode, displayName); + args = new Object[] { + profile, + specific.latency, + gameMode, + displayName + }; } else { - return constructor.newInstance(null, profile, specific.latency, gameMode, displayName); + args = new Object[] { + null, + profile, + specific.latency, + gameMode, + displayName + }; } + + return constructor.newInstance(args); } catch (Exception e) { throw new RuntimeException("Failed to construct PlayerInfoData.", e); } @@ -275,37 +309,37 @@ public Object getGeneric(PlayerInfoData specific) { public PlayerInfoData getSpecific(Object generic) { if (MinecraftReflection.isPlayerInfoData(generic)) { StructureModifier modifier = new StructureModifier<>(generic.getClass(), null, false) - .withTarget(generic); + .withTarget(generic); StructureModifier gameProfiles = modifier.withType( - MinecraftReflection.getGameProfileClass(), BukkitConverters.getWrappedGameProfileConverter()); + MinecraftReflection.getGameProfileClass(), BukkitConverters.getWrappedGameProfileConverter()); WrappedGameProfile gameProfile = gameProfiles.read(0); StructureModifier ints = modifier.withType(int.class); int latency = ints.read(0); StructureModifier gameModes = modifier.withType( - EnumWrappers.getGameModeClass(), EnumWrappers.getGameModeConverter()); + EnumWrappers.getGameModeClass(), EnumWrappers.getGameModeConverter()); NativeGameMode gameMode = gameModes.read(0); StructureModifier displayNames = modifier.withType( - MinecraftReflection.getIChatBaseComponentClass(), BukkitConverters.getWrappedChatComponentConverter()); + MinecraftReflection.getIChatBaseComponentClass(), BukkitConverters.getWrappedChatComponentConverter()); WrappedChatComponent displayName = displayNames.read(0); - if(MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) { + if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) { return new PlayerInfoData(modifier.withType(UUID.class).read(0), - latency, - modifier.withType(boolean.class).read(0), - gameMode, - gameProfile, - displayName, - modifier.withType(MinecraftReflection.getRemoteChatSessionDataClass(), BukkitConverters.getWrappedRemoteChatSessionDataConverter()).read(0) - ); + latency, + modifier.withType(boolean.class).read(0), + gameMode, + gameProfile, + displayName, + modifier.withType(MinecraftReflection.getRemoteChatSessionDataClass(), BukkitConverters.getWrappedRemoteChatSessionDataConverter()).read(0) + ); } WrappedProfileKeyData key = null; if (MinecraftVersion.WILD_UPDATE.atOrAbove()) { StructureModifier keyData = modifier.withType( - MinecraftReflection.getProfilePublicKeyDataClass(), BukkitConverters.getWrappedPublicKeyDataConverter()); + MinecraftReflection.getProfilePublicKeyDataClass(), BukkitConverters.getWrappedPublicKeyDataConverter()); key = keyData.read(0); } diff --git a/src/main/java/com/comphenix/protocol/wrappers/WrappedParticle.java b/src/main/java/com/comphenix/protocol/wrappers/WrappedParticle.java index eeef01b40..e7b7c157f 100644 --- a/src/main/java/com/comphenix/protocol/wrappers/WrappedParticle.java +++ b/src/main/java/com/comphenix/protocol/wrappers/WrappedParticle.java @@ -183,59 +183,80 @@ private static Object getItem(Object handle) { } private static Object getRedstone(Object handle) { - int r, g, b; - float size; + Color color; + float scale; - if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) { - StructureModifier modifier = new StructureModifier<>(handle.getClass()).withTarget(handle); + StructureModifier modifier = new StructureModifier<>(handle.getClass()).withTarget(handle); + + if (MinecraftVersion.v1_21_2.atOrAbove()) { + int rgb = (int) modifier.withType(int.class).read(0); + color = Color.fromRGB(rgb); + scale = (float) modifier.withType(float.class).read(0); + } else if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) { org.joml.Vector3f rgb = (org.joml.Vector3f) modifier.withType(org.joml.Vector3f.class).read(0); - r = (int) (rgb.x() * 255); - g = (int) (rgb.y() * 255); - b = (int) (rgb.z() * 255); - size = (float) modifier.withType(float.class).read(0); + int red = (int) (rgb.x() * 255); + int green = (int) (rgb.y() * 255); + int blue = (int) (rgb.z() * 255); + + color = Color.fromRGB(red, green, blue); + scale = (float) modifier.withType(float.class).read(0); } else if (MinecraftVersion.CAVES_CLIFFS_1.atOrAbove()) { if (VECTOR_3FA == null) { VECTOR_3FA = MinecraftReflection.getLibraryClass("com.mojang.math.Vector3fa"); } - StructureModifier modifier = new StructureModifier<>(handle.getClass()).withTarget(handle); - Object rgb = modifier.withType(VECTOR_3FA).read(0); StructureModifier rgbModifier = new StructureModifier<>(VECTOR_3FA).withTarget(rgb); - r = (int) (rgbModifier.withType(float.class).read(0) * 255); - g = (int) (rgbModifier.withType(float.class).read(1) * 255); - b = (int) (rgbModifier.withType(float.class).read(2) * 255); - size = (float) modifier.withType(float.class).read(0); + int red = (int) (rgbModifier.withType(float.class).read(0) * 255); + int green = (int) (rgbModifier.withType(float.class).read(1) * 255); + int blue = (int) (rgbModifier.withType(float.class).read(2) * 255); + + color = Color.fromRGB(red, green, blue); + scale = (float) modifier.withType(float.class).read(0); } else { - StructureModifier modifier = new StructureModifier<>(handle.getClass()).withTarget(handle).withType(float.class); - r = (int) (modifier.read(0) * 255); - g = (int) (modifier.read(1) * 255); - b = (int) (modifier.read(2) * 255); - size = modifier.read(3); + StructureModifier floatModifier = modifier.withType(float.class); + + int red = (int) (floatModifier.read(0) * 255); + int green = (int) (floatModifier.read(1) * 255); + int blue = (int) (floatModifier.read(2) * 255); + + color = Color.fromRGB(red, green, blue); + scale = floatModifier.read(3); } - return new Particle.DustOptions(Color.fromRGB(r, g, b), size); + return new Particle.DustOptions(color, scale); } private static Object getDustTransition(Object handle) { - int fromR, fromG, fromB, toR, toG, toB; - float size; + Color fromColor, toColor; + float scale; - if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) { + if (MinecraftVersion.v1_21_2.atOrAbove()) { + StructureModifier modifier = new StructureModifier<>(handle.getClass()).withTarget(handle); + int fromRgb = (int) modifier.withType(int.class).read(0); + fromColor = Color.fromRGB(fromRgb); + + int toRgb = (int) modifier.withType(int.class).read(1); + toColor = Color.fromRGB(toRgb); + + scale = (float) modifier.withType(float.class).read(0); + } else if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) { StructureModifier modifier = new StructureModifier<>(handle.getClass()).withTarget(handle); org.joml.Vector3f toRGB = (org.joml.Vector3f) modifier.withType(org.joml.Vector3f.class).read(1); org.joml.Vector3f fromRGB = (org.joml.Vector3f) modifier.withType(org.joml.Vector3f.class).read(0); - size = (float) modifier.withType(float.class).read(0); + scale = (float) modifier.withType(float.class).read(0); - fromR = (int) (fromRGB.x() * 255); - fromG = (int) (fromRGB.y() * 255); - fromB = (int) (fromRGB.z() * 255); + int fromR = (int) (fromRGB.x() * 255); + int fromG = (int) (fromRGB.y() * 255); + int fromB = (int) (fromRGB.z() * 255); + fromColor = Color.fromRGB(fromR, fromG, fromB); - toR = (int) (toRGB.x() * 255); - toG = (int) (toRGB.y() * 255); - toB = (int) (toRGB.z() * 255); + int toR = (int) (toRGB.x() * 255); + int toG = (int) (toRGB.y() * 255); + int toB = (int) (toRGB.z() * 255); + toColor = Color.fromRGB(toR, toG, toB); } else if (MinecraftVersion.CAVES_CLIFFS_1.atOrAbove()) { if (VECTOR_3FA == null) { VECTOR_3FA = MinecraftReflection.getLibraryClass("com.mojang.math.Vector3fa"); @@ -245,37 +266,42 @@ private static Object getDustTransition(Object handle) { Object toRGB = modifier.withType(VECTOR_3FA).read(0); Object fromRGB = modifier.withType(VECTOR_3FA).read(1); - size = (float) modifier.withType(float.class).read(0); + scale = (float) modifier.withType(float.class).read(0); StructureModifier rgbModifier = new StructureModifier<>(VECTOR_3FA).withTarget(fromRGB); StructureModifier rgbModifier2 = new StructureModifier<>(VECTOR_3FA).withTarget(toRGB); - fromR = (int) (rgbModifier.withType(float.class).read(0) * 255); - fromG = (int) (rgbModifier.withType(float.class).read(1) * 255); - fromB = (int) (rgbModifier.withType(float.class).read(2) * 255); + int fromR = (int) (rgbModifier.withType(float.class).read(0) * 255); + int fromG = (int) (rgbModifier.withType(float.class).read(1) * 255); + int fromB = (int) (rgbModifier.withType(float.class).read(2) * 255); + fromColor = Color.fromRGB(fromR, fromG, fromB); - toR = (int) (rgbModifier2.withType(float.class).read(0) * 255); - toG = (int) (rgbModifier2.withType(float.class).read(1) * 255); - toB = (int) (rgbModifier2.withType(float.class).read(2) * 255); + int toR = (int) (rgbModifier2.withType(float.class).read(0) * 255); + int toG = (int) (rgbModifier2.withType(float.class).read(1) * 255); + int toB = (int) (rgbModifier2.withType(float.class).read(2) * 255); + toColor = Color.fromRGB(toR, toG, toB); } else { StructureModifier modifier = new StructureModifier<>(handle.getClass()).withTarget(handle).withType(float.class); - toR = (int) (modifier.read(0) * 255); - toG = (int) (modifier.read(1) * 255); - toB = (int) (modifier.read(2) * 255); - size = modifier.read(3); - fromR = (int) (modifier.read(4) * 255); - fromG = (int) (modifier.read(5) * 255); - fromB = (int) (modifier.read(6) * 255); + int toR = (int) (modifier.read(0) * 255); + int toG = (int) (modifier.read(1) * 255); + int toB = (int) (modifier.read(2) * 255); + toColor = Color.fromRGB(toR, toG, toB); + + scale = modifier.read(3); + + int fromR = (int) (modifier.read(4) * 255); + int fromG = (int) (modifier.read(5) * 255); + int fromB = (int) (modifier.read(6) * 255); + fromColor = Color.fromRGB(fromR, fromG, fromB); } - return new Particle.DustTransition(Color.fromRGB(fromR, fromG, fromB), Color.fromRGB(toR, toG, toB), size); + return new Particle.DustTransition(fromColor, toColor, scale); } public static WrappedParticle create(Particle particle, T data) { ensureMethods(); Object bukkitData = data; - if (data instanceof WrappedBlockData) { - WrappedBlockData blockData = (WrappedBlockData) data; + if (data instanceof WrappedBlockData blockData) { bukkitData = toCraftData.invoke(null, blockData.getHandle()); } diff --git a/src/test/java/com/comphenix/protocol/BukkitInitialization.java b/src/test/java/com/comphenix/protocol/BukkitInitialization.java index 3b3009196..76d2d5d2c 100644 --- a/src/test/java/com/comphenix/protocol/BukkitInitialization.java +++ b/src/test/java/com/comphenix/protocol/BukkitInitialization.java @@ -13,7 +13,8 @@ import com.google.common.base.Preconditions; import com.google.common.util.concurrent.MoreExecutors; import net.minecraft.SharedConstants; -import net.minecraft.commands.CommandDispatcher; +import net.minecraft.commands.CommandDispatcher.ServerType; +import net.minecraft.core.HolderLookup; import net.minecraft.core.IRegistry; import net.minecraft.core.IRegistryCustom; import net.minecraft.core.LayeredRegistryAccess; @@ -24,14 +25,15 @@ import net.minecraft.server.DataPackResources; import net.minecraft.server.DispenserRegistry; import net.minecraft.server.RegistryLayer; -import net.minecraft.server.WorldLoader; import net.minecraft.server.dedicated.DedicatedServer; import net.minecraft.server.level.WorldServer; import net.minecraft.server.packs.EnumResourcePackType; import net.minecraft.server.packs.repository.ResourcePackLoader; import net.minecraft.server.packs.repository.ResourcePackRepository; import net.minecraft.server.packs.repository.ResourcePackSourceVanilla; +import net.minecraft.server.packs.resources.IResourceManager; import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.tags.TagDataPack; import net.minecraft.tags.TagKey; import net.minecraft.world.entity.EntityTypes; import net.minecraft.world.flag.FeatureFlags; @@ -45,18 +47,18 @@ import org.bukkit.NamespacedKey; import org.bukkit.Registry; import org.bukkit.World; -import org.bukkit.craftbukkit.v1_21_R1.CraftLootTable; -import org.bukkit.craftbukkit.v1_21_R1.CraftRegistry; -import org.bukkit.craftbukkit.v1_21_R1.CraftServer; -import org.bukkit.craftbukkit.v1_21_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R1.inventory.CraftItemFactory; -import org.bukkit.craftbukkit.v1_21_R1.tag.CraftBlockTag; -import org.bukkit.craftbukkit.v1_21_R1.tag.CraftEntityTag; -import org.bukkit.craftbukkit.v1_21_R1.tag.CraftFluidTag; -import org.bukkit.craftbukkit.v1_21_R1.tag.CraftItemTag; -import org.bukkit.craftbukkit.v1_21_R1.util.CraftMagicNumbers; -import org.bukkit.craftbukkit.v1_21_R1.util.CraftNamespacedKey; -import org.bukkit.craftbukkit.v1_21_R1.util.Versioning; +import org.bukkit.craftbukkit.v1_21_R2.CraftLootTable; +import org.bukkit.craftbukkit.v1_21_R2.CraftRegistry; +import org.bukkit.craftbukkit.v1_21_R2.CraftServer; +import org.bukkit.craftbukkit.v1_21_R2.CraftWorld; +import org.bukkit.craftbukkit.v1_21_R2.inventory.CraftItemFactory; +import org.bukkit.craftbukkit.v1_21_R2.tag.CraftBlockTag; +import org.bukkit.craftbukkit.v1_21_R2.tag.CraftEntityTag; +import org.bukkit.craftbukkit.v1_21_R2.tag.CraftFluidTag; +import org.bukkit.craftbukkit.v1_21_R2.tag.CraftItemTag; +import org.bukkit.craftbukkit.v1_21_R2.util.CraftMagicNumbers; +import org.bukkit.craftbukkit.v1_21_R2.util.CraftNamespacedKey; +import org.bukkit.craftbukkit.v1_21_R2.util.Versioning; import org.jetbrains.annotations.NotNull; import org.spigotmc.SpigotWorldConfig; @@ -110,30 +112,19 @@ private void initialize() { instance.setPackage(); - // Minecraft Data Init - SharedConstants.a(); // .tryDetectVersion() - DispenserRegistry.a(); // .bootStrap() - - ResourcePackRepository resourcePackRepository = ResourcePackSourceVanilla.c(); // .createVanillaTrustedRepository() - resourcePackRepository.a(); // .reload() - - ResourceManager resourceManager = new ResourceManager( - EnumResourcePackType.b /* SERVER_DATA */, - resourcePackRepository.c() /* getAvailablePacks() */ .stream().map(ResourcePackLoader::f /* openFull() */).collect(Collectors.toList())); - LayeredRegistryAccess layeredRegistryAccess = RegistryLayer.a(); // .createRegistryAccess() - layeredRegistryAccess = WorldLoader.b(resourceManager, layeredRegistryAccess, RegistryLayer.b /* WORLDGEN */, RegistryDataLoader.a /* WORLDGEN_REGISTRIES */); // .loadAndReplaceLayer() - IRegistryCustom.Dimension registryCustom = layeredRegistryAccess.a().d(); // .compositeAccess().freeze() - // IRegistryCustom.Dimension registryCustom = layeredRegistryAccess.a().c(); // .compositeAccess().freeze() - - DataPackResources dataPackResources = DataPackResources.a( - resourceManager, - layeredRegistryAccess, - FeatureFlags.d.a() /* REGISTRY.allFlags() */, - CommandDispatcher.ServerType.b /* DEDICATED */, - 0, - MoreExecutors.directExecutor(), - MoreExecutors.directExecutor() - ).join(); + SharedConstants.a(); + DispenserRegistry.a(); + ResourcePackRepository resourcePackRepository = ResourcePackSourceVanilla.c(); + resourcePackRepository.a(); + IResourceManager resourceManager = new ResourceManager(EnumResourcePackType.b, resourcePackRepository.d().stream().map(ResourcePackLoader::f).collect(Collectors.toList())); + LayeredRegistryAccess layeredregistryaccess = RegistryLayer.a(); + List> list = TagDataPack.a(resourceManager, layeredregistryaccess.a(RegistryLayer.a)); + IRegistryCustom.Dimension frozen1 = layeredregistryaccess.b(RegistryLayer.b); + List> list1 = TagDataPack.a(frozen1, list); + IRegistryCustom.Dimension frozen2 = RegistryDataLoader.a(resourceManager, list1, RegistryDataLoader.a); + LayeredRegistryAccess layers = layeredregistryaccess.a(RegistryLayer.b, frozen2); + IRegistryCustom.Dimension registryCustom = layers.a().e(); + DataPackResources dataPackResources = DataPackResources.a(resourceManager, layers, list, FeatureFlags.f.a(), ServerType.b, 0, MoreExecutors.directExecutor(), MoreExecutors.directExecutor()).join(); dataPackResources.g(); try { @@ -149,7 +140,7 @@ private void initialize() { CraftServer mockedServer = mock(CraftServer.class); DedicatedServer mockedGameServer = mock(DedicatedServer.class); - when(mockedGameServer.bc()/*registryAccess*/).thenReturn(registryCustom); + when(mockedGameServer.ba()/*registryAccess*/).thenReturn(registryCustom); when(mockedServer.getLogger()).thenReturn(java.util.logging.Logger.getLogger("Minecraft")); when(mockedServer.getName()).thenReturn("Mock Server"); @@ -185,28 +176,28 @@ private void initialize() { case org.bukkit.Tag.REGISTRY_BLOCKS -> { Preconditions.checkArgument(clazz == org.bukkit.Material.class, "Block namespace must have block type"); TagKey blockTagKey = TagKey.a(Registries.f, key); - if (BuiltInRegistries.e.b(blockTagKey).isPresent()) { + if (BuiltInRegistries.e.a(blockTagKey).isPresent()) { return new CraftBlockTag(BuiltInRegistries.e, blockTagKey); } } case org.bukkit.Tag.REGISTRY_ITEMS -> { Preconditions.checkArgument(clazz == org.bukkit.Material.class, "Item namespace must have item type"); TagKey itemTagKey = TagKey.a(Registries.K, key); - if (BuiltInRegistries.g.b(itemTagKey).isPresent()) { + if (BuiltInRegistries.g.a(itemTagKey).isPresent()) { return new CraftItemTag(BuiltInRegistries.g, itemTagKey); } } case org.bukkit.Tag.REGISTRY_FLUIDS -> { Preconditions.checkArgument(clazz == org.bukkit.Fluid.class, "Fluid namespace must have fluid type"); TagKey fluidTagKey = TagKey.a(Registries.D, key); - if (BuiltInRegistries.c.b(fluidTagKey).isPresent()) { + if (BuiltInRegistries.c.a(fluidTagKey).isPresent()) { return new CraftFluidTag(BuiltInRegistries.c, fluidTagKey); } } case org.bukkit.Tag.REGISTRY_ENTITY_TYPES -> { Preconditions.checkArgument(clazz == org.bukkit.entity.EntityType.class, "Entity type namespace must have entity type"); TagKey> entityTagKey = TagKey.a(Registries.z, key); - if (BuiltInRegistries.f.b(entityTagKey).isPresent()) { + if (BuiltInRegistries.f.a(entityTagKey).isPresent()) { return new CraftEntityTag(BuiltInRegistries.f, entityTagKey); } } diff --git a/src/test/java/com/comphenix/protocol/events/PacketContainerTest.java b/src/test/java/com/comphenix/protocol/events/PacketContainerTest.java index 96a31daf8..8826101bd 100644 --- a/src/test/java/com/comphenix/protocol/events/PacketContainerTest.java +++ b/src/test/java/com/comphenix/protocol/events/PacketContainerTest.java @@ -182,13 +182,13 @@ public void testGetLongs() { this.testPrimitive(updateTime.getLongs(), 0, (long) 0, (long) 1); } - @Test + // @Test // TODO: Explosion no longer contains floats public void testGetFloat() { PacketContainer explosion = new PacketContainer(PacketType.Play.Server.EXPLOSION); this.testPrimitive(explosion.getFloat(), 0, (float) 0, (float) 0.8); } - @Test + // @Test // TODO: Explosion no longer contains doubles public void testGetDoubles() { PacketContainer explosion = new PacketContainer(PacketType.Play.Server.EXPLOSION); this.testPrimitive(explosion.getDoubles(), 0, (double) 0, 0.8); @@ -318,7 +318,7 @@ public void testEntityTypeModifier() { assertEquals(packet.getEntityTypeModifier().read(0), EntityType.ARROW); } - @Test + // @Test // TODO: explosion no longer contains block position list public void testGetPositionCollectionModifier() { PacketContainer explosionPacket = new PacketContainer(PacketType.Play.Server.EXPLOSION); StructureModifier> positionAccessor = explosionPacket.getBlockPositionCollectionModifier(); diff --git a/src/test/java/com/comphenix/protocol/injector/EntityUtilitiesTest.java b/src/test/java/com/comphenix/protocol/injector/EntityUtilitiesTest.java index c759e1c15..218cdf5da 100644 --- a/src/test/java/com/comphenix/protocol/injector/EntityUtilitiesTest.java +++ b/src/test/java/com/comphenix/protocol/injector/EntityUtilitiesTest.java @@ -5,19 +5,22 @@ import com.comphenix.protocol.BukkitInitialization; import com.comphenix.protocol.reflect.FuzzyReflection; import com.comphenix.protocol.reflect.fuzzy.FuzzyFieldContract; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; + import net.minecraft.server.level.ChunkProviderServer; import net.minecraft.server.level.PlayerChunkMap; import net.minecraft.server.level.PlayerChunkMap.EntityTracker; import net.minecraft.server.level.WorldServer; import net.minecraft.world.entity.Entity; -import org.bukkit.craftbukkit.v1_21_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_21_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_21_R2.CraftWorld; +import org.bukkit.craftbukkit.v1_21_R2.entity.CraftEntity; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; + import static com.comphenix.protocol.utility.TestUtils.setFinalField; + import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -35,7 +38,7 @@ public void testReflection() { when(bukkit.getHandle()).thenReturn(world); ChunkProviderServer provider = mock(ChunkProviderServer.class); - when(world.l()).thenReturn(provider); + when(world.m()).thenReturn(provider); PlayerChunkMap chunkMap = mock(PlayerChunkMap.class); Field chunkMapField = FuzzyReflection.fromClass(ChunkProviderServer.class, true) diff --git a/src/test/java/com/comphenix/protocol/utility/MinecraftReflectionTest.java b/src/test/java/com/comphenix/protocol/utility/MinecraftReflectionTest.java index 4cfd270a1..ee143089a 100644 --- a/src/test/java/com/comphenix/protocol/utility/MinecraftReflectionTest.java +++ b/src/test/java/com/comphenix/protocol/utility/MinecraftReflectionTest.java @@ -13,7 +13,7 @@ import net.minecraft.world.level.block.state.IBlockData; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.craftbukkit.v1_21_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_21_R2.inventory.CraftItemStack; import org.bukkit.entity.Entity; import org.bukkit.inventory.ItemStack; import org.junit.jupiter.api.AfterAll; diff --git a/src/test/java/com/comphenix/protocol/utility/MinecraftReflectionTestUtil.java b/src/test/java/com/comphenix/protocol/utility/MinecraftReflectionTestUtil.java index 77ce0d78a..d90fa9a8b 100644 --- a/src/test/java/com/comphenix/protocol/utility/MinecraftReflectionTestUtil.java +++ b/src/test/java/com/comphenix/protocol/utility/MinecraftReflectionTestUtil.java @@ -3,7 +3,7 @@ public class MinecraftReflectionTestUtil { public static final String RELEASE_TARGET = "1.20.6"; - public static final String PACKAGE_VERSION = "v1_21_R1"; + public static final String PACKAGE_VERSION = "v1_21_R2"; public static final String NMS = "net.minecraft"; public static final String OBC = "org.bukkit.craftbukkit." + PACKAGE_VERSION; diff --git a/src/test/java/com/comphenix/protocol/utility/MinecraftVersionTest.java b/src/test/java/com/comphenix/protocol/utility/MinecraftVersionTest.java index afca89508..c87bc4c58 100644 --- a/src/test/java/com/comphenix/protocol/utility/MinecraftVersionTest.java +++ b/src/test/java/com/comphenix/protocol/utility/MinecraftVersionTest.java @@ -48,7 +48,7 @@ void testComparison() { @Test void testCurrent() { - assertEquals(MinecraftVersion.v1_21_0, MinecraftVersion.getCurrentVersion()); + assertEquals(MinecraftVersion.v1_21_2, MinecraftVersion.getCurrentVersion()); } @Test diff --git a/src/test/java/com/comphenix/protocol/wrappers/ChunkCoordIntPairTest.java b/src/test/java/com/comphenix/protocol/wrappers/ChunkCoordIntPairTest.java index 32013d347..0882cb26f 100644 --- a/src/test/java/com/comphenix/protocol/wrappers/ChunkCoordIntPairTest.java +++ b/src/test/java/com/comphenix/protocol/wrappers/ChunkCoordIntPairTest.java @@ -1,11 +1,12 @@ package com.comphenix.protocol.wrappers; -import static org.junit.jupiter.api.Assertions.assertEquals; - import com.comphenix.protocol.BukkitInitialization; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + public class ChunkCoordIntPairTest { @BeforeAll @@ -25,7 +26,7 @@ public void test() { (net.minecraft.world.level.ChunkCoordIntPair) ChunkCoordIntPair.getConverter(). getGeneric(specific); - assertEquals(1, roundtrip.e); - assertEquals(2, roundtrip.f); + assertEquals(1, roundtrip.h); + assertEquals(2, roundtrip.i); } } diff --git a/src/test/java/com/comphenix/protocol/wrappers/WrappedAttributeTest.java b/src/test/java/com/comphenix/protocol/wrappers/WrappedAttributeTest.java index e388ea0d2..4a532e175 100644 --- a/src/test/java/com/comphenix/protocol/wrappers/WrappedAttributeTest.java +++ b/src/test/java/com/comphenix/protocol/wrappers/WrappedAttributeTest.java @@ -51,7 +51,7 @@ public void setUp() { // Create attribute this.attribute = WrappedAttribute.newBuilder(). - attributeKey("generic.attackDamage"). + attributeKey("attack_damage"). baseValue(2). packet(new PacketContainer(PacketType.Play.Server.UPDATE_ATTRIBUTES)). modifiers(Lists.newArrayList(this.constantModifier, this.doubleModifier)). diff --git a/src/test/java/com/comphenix/protocol/wrappers/WrappedBlockDataTest.java b/src/test/java/com/comphenix/protocol/wrappers/WrappedBlockDataTest.java index c5da56ca2..60e644297 100644 --- a/src/test/java/com/comphenix/protocol/wrappers/WrappedBlockDataTest.java +++ b/src/test/java/com/comphenix/protocol/wrappers/WrappedBlockDataTest.java @@ -19,9 +19,9 @@ import org.bukkit.Material; import org.bukkit.block.BlockFace; import org.bukkit.block.data.type.GlassPane; -import org.bukkit.craftbukkit.v1_21_R1.block.data.CraftBlockData; -import org.bukkit.craftbukkit.v1_21_R1.block.impl.CraftStainedGlassPane; -import org.bukkit.craftbukkit.v1_21_R1.util.CraftMagicNumbers; +import org.bukkit.craftbukkit.v1_21_R2.block.data.CraftBlockData; +import org.bukkit.craftbukkit.v1_21_R2.block.impl.CraftStainedGlassPane; +import org.bukkit.craftbukkit.v1_21_R2.util.CraftMagicNumbers; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -56,7 +56,7 @@ public void testMaterialCreation() { @Test public void testDataCreation() { - IBlockData nmsData = CraftMagicNumbers.getBlock(Material.CYAN_STAINED_GLASS_PANE).o(); + IBlockData nmsData = CraftMagicNumbers.getBlock(Material.CYAN_STAINED_GLASS_PANE).m(); GlassPane data = (GlassPane) CraftBlockData.fromData(nmsData); data.setFace(BlockFace.EAST, true); diff --git a/src/test/java/com/comphenix/protocol/wrappers/WrappedDataWatcherTest.java b/src/test/java/com/comphenix/protocol/wrappers/WrappedDataWatcherTest.java index 39d2a9b2b..cd7c9e297 100644 --- a/src/test/java/com/comphenix/protocol/wrappers/WrappedDataWatcherTest.java +++ b/src/test/java/com/comphenix/protocol/wrappers/WrappedDataWatcherTest.java @@ -28,7 +28,7 @@ import net.minecraft.world.entity.projectile.EntityEgg; import org.bukkit.Material; import org.bukkit.Particle; -import org.bukkit.craftbukkit.v1_21_R1.entity.CraftEgg; +import org.bukkit.craftbukkit.v1_21_R2.entity.CraftEgg; import org.bukkit.entity.Entity; import org.bukkit.inventory.ItemStack; import org.junit.jupiter.api.BeforeAll; @@ -46,7 +46,7 @@ public class WrappedDataWatcherTest { public static void prepare() { BukkitInitialization.initializeAll(); - EntityEgg nmsEgg = new EntityEgg(null, 0, 0, 0); + EntityEgg nmsEgg = new EntityEgg(null, 0, 0, 0, net.minecraft.world.item.ItemStack.j); mockEntity = new CraftEgg(null, nmsEgg); } diff --git a/src/test/java/com/comphenix/protocol/wrappers/WrappedStreamCodecTests.java b/src/test/java/com/comphenix/protocol/wrappers/WrappedStreamCodecTests.java index d5bdca4f9..b05e3f15e 100644 --- a/src/test/java/com/comphenix/protocol/wrappers/WrappedStreamCodecTests.java +++ b/src/test/java/com/comphenix/protocol/wrappers/WrappedStreamCodecTests.java @@ -10,8 +10,8 @@ import net.minecraft.network.protocol.game.PacketPlayOutSetSlot; import net.minecraft.world.EnumHand; import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_21_R1.CraftRegistry; -import org.bukkit.craftbukkit.v1_21_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_21_R2.CraftRegistry; +import org.bukkit.craftbukkit.v1_21_R2.inventory.CraftItemStack; import org.bukkit.inventory.ItemStack; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test;