diff --git a/build.gradle.kts b/build.gradle.kts index e50f7f017..60c7604f1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -222,7 +222,7 @@ testing { options { val options = this as TestNGOptions options.preserveOrder = true - // options.excludeGroups("chunk", "input", "font", "command", "registry", "biome", "version", "fluid", "world", "raycasting", "pixlyzer", "item", "block", "physics", "light", "packet", "container", "item_stack", "signature", "private_key", "interaction", "item_digging", "chunk_renderer", "rendering") + // options.excludeGroups("models", "mesher", "chunk", "input", "font", "command", "registry", "biome", "version", "fluid", "world", "raycasting", "pixlyzer", "item", "block", "physics", "light", "packet", "container", "item_stack", "signature", "private_key", "interaction", "item_digging", "chunk_renderer", "rendering") } } } diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/MinosoftSIT.kt b/src/integration-test/kotlin/de/bixilon/minosoft/MinosoftSIT.kt index 7da860a05..8c60f6e31 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/MinosoftSIT.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/MinosoftSIT.kt @@ -17,8 +17,7 @@ import de.bixilon.kutil.latch.SimpleLatch import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties import de.bixilon.minosoft.data.registries.fallback.FallbackRegistries import de.bixilon.minosoft.data.registries.fallback.tags.FallbackTags -import de.bixilon.minosoft.protocol.packets.factory.PacketTypeRegistry -import de.bixilon.minosoft.protocol.versions.Versions +import de.bixilon.minosoft.protocol.versions.VersionLoader import de.bixilon.minosoft.test.IT import de.bixilon.minosoft.test.ITUtil import de.bixilon.minosoft.util.KUtil @@ -37,7 +36,6 @@ internal object MinosoftSIT { disableGC() Log.log(LogMessageType.OTHER, LogLevels.INFO) { "Setting up integration tests...." } initAssetsManager() - setupPacketRegistry() loadVersionsJson() loadAssetsProperties() loadDefaultRegistries() @@ -62,12 +60,8 @@ internal object MinosoftSIT { Minosoft.MINOSOFT_ASSETS_MANAGER.load() } - fun setupPacketRegistry() { - PacketTypeRegistry.init(null) - } - fun loadVersionsJson() { - Versions.load(SimpleLatch(0)) + VersionLoader.load(SimpleLatch(0)) } fun loadAssetsProperties() { diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/AttackHandlerTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/AttackHandlerTest.kt index ba8c06ab0..9a0a5406d 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/AttackHandlerTest.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/AttackHandlerTest.kt @@ -29,7 +29,7 @@ import de.bixilon.minosoft.protocol.network.connection.play.ConnectionTestUtil.c import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertNoPacket import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertPacket import de.bixilon.minosoft.protocol.packets.c2s.play.entity.interact.EntityAttackC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.SwingArmC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.SwingArmC2SP import org.testng.annotations.Test @Test(groups = ["interaction"]) diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/InteractionManagerTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/InteractionManagerTest.kt index 9ce55f80c..94226dc23 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/InteractionManagerTest.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/InteractionManagerTest.kt @@ -21,9 +21,9 @@ import de.bixilon.minosoft.input.interaction.breaking.BreakHandlerTest.Companion import de.bixilon.minosoft.protocol.network.connection.play.ConnectionTestUtil.createConnection import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertNoPacket import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertPacket -import de.bixilon.minosoft.protocol.packets.c2s.play.PlayerActionC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.entity.interact.EntityAttackC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.SwingArmC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.PlayerActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.SwingArmC2SP import org.testng.annotations.Test @Test(groups = ["interaction"]) diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/breaking/BreakHandlerInputTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/breaking/BreakHandlerInputTest.kt index 18d75cbe5..2f916fde9 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/breaking/BreakHandlerInputTest.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/breaking/BreakHandlerInputTest.kt @@ -19,8 +19,8 @@ import de.bixilon.minosoft.input.interaction.KeyHandlerUtil.awaitTicks import de.bixilon.minosoft.protocol.network.connection.play.ConnectionTestUtil.createConnection import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertNoPacket import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertPacket -import de.bixilon.minosoft.protocol.packets.c2s.play.PlayerActionC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.SwingArmC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.PlayerActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.SwingArmC2SP import org.testng.SkipException import org.testng.annotations.Test import kotlin.system.measureTimeMillis diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/breaking/BreakHandlerTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/breaking/BreakHandlerTest.kt index 2dc1517fc..19f9b1fe5 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/breaking/BreakHandlerTest.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/breaking/BreakHandlerTest.kt @@ -49,8 +49,8 @@ import de.bixilon.minosoft.protocol.network.connection.play.ConnectionTestUtil.c import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertNoPacket import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertPacket import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.c2s.play.PlayerActionC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.SwingArmC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.PlayerActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.SwingArmC2SP import de.bixilon.minosoft.test.ITUtil.todo import org.testng.Assert.assertEquals import org.testng.Assert.assertNull diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/long/LongUseBlockIT.kt b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/long/LongUseBlockIT.kt index c4ebf9175..4bef18d2d 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/long/LongUseBlockIT.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/long/LongUseBlockIT.kt @@ -35,8 +35,8 @@ import de.bixilon.minosoft.physics.ItemUsing import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertNoPacket import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertPacket import de.bixilon.minosoft.protocol.packets.c2s.play.block.BlockInteractC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.PositionRotationC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.SwingArmC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.PositionRotationC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.SwingArmC2SP import de.bixilon.minosoft.test.ITUtil.todo import org.testng.Assert.assertEquals import org.testng.Assert.assertNull diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/long/LongUseEntityIT.kt b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/long/LongUseEntityIT.kt index 35ff7d559..7fb93f62c 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/long/LongUseEntityIT.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/long/LongUseEntityIT.kt @@ -26,7 +26,7 @@ import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.asser import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertPacket import de.bixilon.minosoft.protocol.packets.c2s.play.entity.interact.EntityEmptyInteractC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.entity.interact.EntityInteractPositionC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.PositionRotationC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.PositionRotationC2SP import org.testng.Assert.assertEquals import org.testng.annotations.Test diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/long/LongUseIT.kt b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/long/LongUseIT.kt index 74476c500..cf21d64fa 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/long/LongUseIT.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/long/LongUseIT.kt @@ -28,11 +28,11 @@ import de.bixilon.minosoft.input.interaction.InteractionTestUtil.unsafeRelease import de.bixilon.minosoft.physics.ItemUsing import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertNoPacket import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertPacket -import de.bixilon.minosoft.protocol.packets.c2s.play.HotbarSlotC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.PlayerActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.PositionRotationC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.HotbarSlotC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.PlayerActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.SwingArmC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.item.UseItemC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.PositionRotationC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.SwingArmC2SP import de.bixilon.minosoft.test.ITUtil.todo import org.testng.Assert.* import org.testng.annotations.Test diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/BlockPlaceIT.kt b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/BlockPlaceIT.kt index f9bffd677..8e1d8d2d4 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/BlockPlaceIT.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/BlockPlaceIT.kt @@ -35,8 +35,8 @@ import de.bixilon.minosoft.input.interaction.InteractionTestUtil.unsafeRelease import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertNoPacket import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertPacket import de.bixilon.minosoft.protocol.packets.c2s.play.block.BlockInteractC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.PositionRotationC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.SwingArmC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.PositionRotationC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.SwingArmC2SP import org.testng.SkipException import org.testng.annotations.Test diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/BlockUseIT.kt b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/BlockUseIT.kt index f8316a752..c3cebe068 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/BlockUseIT.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/BlockUseIT.kt @@ -35,8 +35,8 @@ import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.asser import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertOnlyPacket import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertPacket import de.bixilon.minosoft.protocol.packets.c2s.play.block.BlockInteractC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.PositionRotationC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.item.UseItemC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.PositionRotationC2SP import org.testng.annotations.Test @Test(groups = ["interaction"], dependsOnGroups = ["item", "block"]) diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/EntityUseIT.kt b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/EntityUseIT.kt index eff85f77c..693c82402 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/EntityUseIT.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/EntityUseIT.kt @@ -37,8 +37,8 @@ import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.asser import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertPacket import de.bixilon.minosoft.protocol.packets.c2s.play.entity.interact.EntityEmptyInteractC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.entity.interact.EntityInteractPositionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.PositionRotationC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.item.UseItemC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.PositionRotationC2SP import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap import org.testng.annotations.Test diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/ItemUseIT.kt b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/ItemUseIT.kt index ea28cf4f7..64a896b9a 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/ItemUseIT.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/ItemUseIT.kt @@ -37,9 +37,9 @@ import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.asser import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertOnlyPacket import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertPacket import de.bixilon.minosoft.protocol.packets.c2s.play.block.BlockInteractC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.PositionRotationC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.SwingArmC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.item.UseItemC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.PositionRotationC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.SwingArmC2SP import org.testng.Assert.assertEquals import org.testng.annotations.Test diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/OnAirUseIT.kt b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/OnAirUseIT.kt index 2f1dac8ab..5802a0384 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/OnAirUseIT.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/short/OnAirUseIT.kt @@ -21,8 +21,8 @@ import de.bixilon.minosoft.input.interaction.InteractionTestUtil import de.bixilon.minosoft.input.interaction.InteractionTestUtil.unsafePress import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertOnlyPacket import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertPacket +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.PositionRotationC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.item.UseItemC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.PositionRotationC2SP import org.testng.annotations.Test @Test(groups = ["interaction"], dependsOnGroups = ["item", "block"]) diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/use/UseHandlerInputTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/use/UseHandlerInputTest.kt index 925ff1b50..29caa4fde 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/use/UseHandlerInputTest.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/input/interaction/use/UseHandlerInputTest.kt @@ -22,10 +22,10 @@ import de.bixilon.minosoft.input.interaction.KeyHandlerUtil.awaitTicks import de.bixilon.minosoft.protocol.network.connection.play.ConnectionTestUtil import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertNoPacket import de.bixilon.minosoft.protocol.network.connection.play.PacketTestUtil.assertPacket -import de.bixilon.minosoft.protocol.packets.c2s.play.PlayerActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.PositionRotationC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.PlayerActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.SwingArmC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.item.UseItemC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.PositionRotationC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.SwingArmC2SP import org.testng.annotations.Test @Test(groups = ["interaction"], dependsOnGroups = ["item"]) diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/protocol/packets/registry/PacketRegistryTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/packets/registry/PacketRegistryTest.kt new file mode 100644 index 000000000..a2b5664ba --- /dev/null +++ b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/packets/registry/PacketRegistryTest.kt @@ -0,0 +1,86 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.protocol.packets.registry + +import de.bixilon.kutil.exception.Broken +import de.bixilon.minosoft.protocol.network.connection.Connection +import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket +import de.bixilon.minosoft.protocol.packets.s2c.S2CPacket +import de.bixilon.minosoft.protocol.protocol.buffers.InByteBuffer +import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer +import org.testng.Assert.* +import org.testng.annotations.Test + +@Test(groups = ["packet"]) +class PacketRegistryTest { + + + fun `simple packet s2c mapping`() { + val registry = PacketRegistry() + + registry.register("dummy", factory = ::DummyS2CPacket) + + val type = registry["dummy"] + assertNotNull(type) + assertEquals(type!!.name, "dummy") + } + + fun `simple packet c2s mapping`() { + val registry = PacketRegistry() + + registry.register("dummy", DummyC2SPacket::class) + + + val type = registry[DummyC2SPacket::class] + assertNotNull(type) + assertEquals(type.name, "dummy") + } + + fun `register multiple same named c2s packets`() { + val registry = PacketRegistry() + + registry.register("dummy", DummyC2SPacket::class) + registry.register("dummy", Dummy2C2SPacket::class) + + + val type = registry[DummyC2SPacket::class] + val type2 = registry[Dummy2C2SPacket::class] + assertSame(type, type2) + } + + fun `register same packet with different names`() { + val registry = PacketRegistry() + + registry.register("1", DummyC2SPacket::class) + registry.register("2", DummyC2SPacket::class) + + assertSame(registry["1"], registry["2"]) + assertEquals(registry[DummyC2SPacket::class].name, "1") + } + + + private class DummyS2CPacket(buffer: InByteBuffer) : S2CPacket { + + override fun handle(connection: Connection) = Broken() + override fun log(reducedLog: Boolean) = Broken() + } + + private open class DummyC2SPacket : PlayC2SPacket { + + override fun write(buffer: PlayOutByteBuffer) = Unit + override fun log(reducedLog: Boolean) = Broken() + } + + private open class Dummy2C2SPacket : DummyC2SPacket() +} diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/protocol/packets/s2c/play/CommandsS2CPTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/packets/s2c/play/CommandsS2CPTest.kt index 6e581ece6..a91e44e77 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/protocol/packets/s2c/play/CommandsS2CPTest.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/packets/s2c/play/CommandsS2CPTest.kt @@ -18,6 +18,7 @@ import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.minosoft.commands.nodes.CommandNode import de.bixilon.minosoft.commands.nodes.NamedNode import de.bixilon.minosoft.commands.nodes.RootNode +import de.bixilon.minosoft.protocol.packets.s2c.play.chat.CommandsS2CP import org.testng.Assert.assertNotNull import org.testng.annotations.Test diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkS2CPTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkS2CPTest.kt index d2f9e6314..3ecfe1d6a 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkS2CPTest.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkS2CPTest.kt @@ -23,6 +23,7 @@ import de.bixilon.minosoft.data.registries.blocks.types.stone.RockBlock import de.bixilon.minosoft.data.registries.dimension.DimensionProperties import de.bixilon.minosoft.protocol.network.connection.play.ConnectionTestUtil.createConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection +import de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk.ChunkS2CP import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import org.testng.Assert.* import org.testng.annotations.Test diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/protocol/protocol/DefaultPacketMappingTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/protocol/DefaultPacketMappingTest.kt new file mode 100644 index 000000000..f47c8229d --- /dev/null +++ b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/protocol/DefaultPacketMappingTest.kt @@ -0,0 +1,36 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.protocol.protocol + +import de.bixilon.minosoft.protocol.packets.c2s.handshake.HandshakeC2SP +import de.bixilon.minosoft.protocol.packets.registry.DefaultPackets +import de.bixilon.minosoft.protocol.packets.s2c.login.SuccessS2CP +import org.testng.Assert.assertEquals +import org.testng.annotations.Test + +@Test(groups = ["packet"]) +class DefaultPacketMappingTest { + + fun `verify handshake c2s id is 0x00`() { + val type = DefaultPackets[PacketDirections.CLIENT_TO_SERVER][ProtocolStates.HANDSHAKE]!![HandshakeC2SP::class] + val id = DefaultPacketMapping.C2S_PACKET_MAPPING[ProtocolStates.HANDSHAKE, type] + assertEquals(id, 0x00) + } + + fun `verify login success s2c id is 0x02`() { + val type = DefaultPackets[PacketDirections.SERVER_TO_CLIENT][ProtocolStates.LOGIN]!![SuccessS2CP::class] + val id = DefaultPacketMapping.S2C_PACKET_MAPPING[ProtocolStates.LOGIN, type] + assertEquals(id, 0x02) + } +} diff --git a/src/main/java/de/bixilon/minosoft/Minosoft.kt b/src/main/java/de/bixilon/minosoft/Minosoft.kt index d17a853dc..a332353c2 100644 --- a/src/main/java/de/bixilon/minosoft/Minosoft.kt +++ b/src/main/java/de/bixilon/minosoft/Minosoft.kt @@ -14,6 +14,7 @@ package de.bixilon.minosoft import de.bixilon.kutil.concurrent.pool.DefaultThreadPool +import de.bixilon.kutil.concurrent.pool.DefaultThreadPool.async import de.bixilon.kutil.concurrent.pool.ThreadPool import de.bixilon.kutil.concurrent.worker.task.TaskWorker import de.bixilon.kutil.concurrent.worker.task.WorkerTask @@ -50,9 +51,8 @@ import de.bixilon.minosoft.modding.event.master.GlobalEventMaster import de.bixilon.minosoft.modding.loader.LoadingPhases import de.bixilon.minosoft.modding.loader.ModLoader import de.bixilon.minosoft.properties.MinosoftPropertiesLoader -import de.bixilon.minosoft.protocol.packets.factory.PacketTypeRegistry import de.bixilon.minosoft.protocol.protocol.LANServerListener -import de.bixilon.minosoft.protocol.versions.Versions +import de.bixilon.minosoft.protocol.versions.VersionLoader import de.bixilon.minosoft.terminal.AutoConnect import de.bixilon.minosoft.terminal.CommandLineArguments import de.bixilon.minosoft.terminal.RunConfiguration @@ -96,8 +96,7 @@ object Minosoft { taskWorker += WorkerTask(identifier = BootTasks.CLI, priority = ThreadPool.HIGH, executor = CLI::startThread) - taskWorker += WorkerTask(identifier = BootTasks.PACKETS, priority = ThreadPool.HIGH, executor = PacketTypeRegistry::init) - taskWorker += WorkerTask(identifier = BootTasks.VERSIONS, priority = ThreadPool.HIGH, dependencies = arrayOf(BootTasks.PACKETS), executor = Versions::load) + taskWorker += WorkerTask(identifier = BootTasks.VERSIONS, priority = ThreadPool.HIGH, executor = VersionLoader::load) taskWorker += WorkerTask(identifier = BootTasks.PROFILES, priority = ThreadPool.HIGH, dependencies = arrayOf(BootTasks.VERSIONS), executor = GlobalProfileManager::initialize) taskWorker += WorkerTask(identifier = BootTasks.FILE_WATCHER, priority = ThreadPool.HIGH, optional = true, executor = this::startFileWatcherService) @@ -109,8 +108,8 @@ object Minosoft { taskWorker += WorkerTask(identifier = BootTasks.LAN_SERVERS, dependencies = arrayOf(BootTasks.PROFILES), executor = LANServerListener::listen) if (!RunConfiguration.DISABLE_EROS) { + async(ThreadPool.HIGHER) { javafx.scene.text.Font.getDefault() } taskWorker += WorkerTask(identifier = BootTasks.JAVAFX, executor = { JavaFXInitializer.start() }) - DefaultThreadPool += { javafx.scene.text.Font::class.java.forceInit() } taskWorker += WorkerTask(identifier = BootTasks.STARTUP_PROGRESS, executor = { StartingDialog(BOOT_LATCH).show() }, dependencies = arrayOf(BootTasks.LANGUAGE_FILES, BootTasks.JAVAFX)) diff --git a/src/main/java/de/bixilon/minosoft/assets/properties/version/generator/AssetsPropertiesGenerator.kt b/src/main/java/de/bixilon/minosoft/assets/properties/version/generator/AssetsPropertiesGenerator.kt index f21f81615..8a4e2be1c 100644 --- a/src/main/java/de/bixilon/minosoft/assets/properties/version/generator/AssetsPropertiesGenerator.kt +++ b/src/main/java/de/bixilon/minosoft/assets/properties/version/generator/AssetsPropertiesGenerator.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -17,6 +17,8 @@ import de.bixilon.kutil.reflection.ReflectionUtil.forceInit import de.bixilon.minosoft.assets.InvalidAssetException import de.bixilon.minosoft.assets.minecraft.JarAssetsManager import de.bixilon.minosoft.config.profile.profiles.resources.ResourcesProfileManager +import de.bixilon.minosoft.protocol.packets.registry.PacketMapping +import de.bixilon.minosoft.protocol.protocol.PacketDirections import de.bixilon.minosoft.protocol.versions.Version import de.bixilon.minosoft.protocol.versions.VersionTypes import de.bixilon.minosoft.util.logging.Log @@ -36,7 +38,8 @@ object AssetsPropertiesGenerator { profile.verify = false val (versionId, clientJarHash) = args - val assetsManager = JarAssetsManager("829c3804401b0727f70f73d4415e162400cbe57b", clientJarHash, profile, Version(versionId, -1, -1, VersionTypes.APRIL_FOOL, emptyMap(), emptyMap())) + val version = Version(versionId, -1, -1, VersionTypes.APRIL_FOOL, PacketMapping(PacketDirections.SERVER_TO_CLIENT), PacketMapping(PacketDirections.CLIENT_TO_SERVER)) + val assetsManager = JarAssetsManager("829c3804401b0727f70f73d4415e162400cbe57b", clientJarHash, profile, version) try { assetsManager.load() } catch (exception: InvalidAssetException) { diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/player/local/MovementPacketSender.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/player/local/MovementPacketSender.kt index 9d9cdad8a..9295223f3 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/player/local/MovementPacketSender.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/player/local/MovementPacketSender.kt @@ -21,9 +21,13 @@ import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY import de.bixilon.minosoft.physics.entities.living.player.local.LocalPlayerPhysics import de.bixilon.minosoft.protocol.packets.c2s.play.entity.EntityActionC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.* -import de.bixilon.minosoft.protocol.packets.c2s.play.move.vehicle.MoveVehicleC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.vehicle.VehicleInputC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.GroundChangeC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.PositionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.PositionRotationC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.RotationC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.vehicle.MoveVehicleC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.vehicle.VehicleInputC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.ToggleFlyC2SP class MovementPacketSender( private val physics: LocalPlayerPhysics, diff --git a/src/main/java/de/bixilon/minosoft/data/registries/misc/event/world/handler/win/WinGameHandler.kt b/src/main/java/de/bixilon/minosoft/data/registries/misc/event/world/handler/win/WinGameHandler.kt index 23f84486a..4fe7ce7fe 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/misc/event/world/handler/win/WinGameHandler.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/misc/event/world/handler/win/WinGameHandler.kt @@ -16,7 +16,7 @@ package de.bixilon.minosoft.data.registries.misc.event.world.handler.win import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.data.registries.misc.event.game.GameEventHandler import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.c2s.play.ClientActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.ClientActionC2SP import de.bixilon.minosoft.util.KUtil.toResourceLocation object WinGameHandler : GameEventHandler { diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/ServerListController.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/ServerListController.kt index 8dbdd0c43..95a4ea219 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/ServerListController.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/ServerListController.kt @@ -44,11 +44,11 @@ import de.bixilon.minosoft.gui.eros.modding.invoker.JavaFXEventListener import de.bixilon.minosoft.gui.eros.util.JavaFXUtil import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.ctext import de.bixilon.minosoft.modding.event.events.KickEvent -import de.bixilon.minosoft.modding.event.events.LoginKickEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates.Companion.disconnected import de.bixilon.minosoft.protocol.network.connection.status.StatusConnection +import de.bixilon.minosoft.protocol.protocol.ProtocolStates import de.bixilon.minosoft.util.DNSUtil import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.delegate.JavaFXDelegate.observeFX @@ -163,20 +163,17 @@ class ServerListController : EmbeddedJavaFXController(), Refreshable { } connection.events.register(JavaFXEventListener.of { event -> - KickDialog( - title = "minosoft:connection.kick.title".toResourceLocation(), - header = "minosoft:connection.kick.header".toResourceLocation(), - description = TranslatableComponents.CONNECTION_KICK_DESCRIPTION(server, account), - reason = event.reason, - ).show() - }) - connection.events.register(JavaFXEventListener.of { event -> - KickDialog( + (if (connection.network.state == ProtocolStates.LOGIN) KickDialog( title = "minosoft:connection.login_kick.title".toResourceLocation(), header = "minosoft:connection.login_kick.header".toResourceLocation(), description = TranslatableComponents.CONNECTION_LOGIN_KICK_DESCRIPTION(server, account), reason = event.reason, - ).show() + ) else KickDialog( + title = "minosoft:connection.kick.title".toResourceLocation(), + header = "minosoft:connection.kick.header".toResourceLocation(), + description = TranslatableComponents.CONNECTION_KICK_DESCRIPTION(server, account), + reason = event.reason, + )).show() }) val latch = CallbackLatch(1) val assetsDialog = VerifyAssetsDialog(latch = latch).apply { show() } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/CreditsScreen.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/CreditsScreen.kt index 02c136ce6..8e4fab27c 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/CreditsScreen.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/CreditsScreen.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -23,7 +23,7 @@ import de.bixilon.minosoft.gui.rendering.gui.elements.text.TextElement import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexOptions import de.bixilon.minosoft.modding.event.listener.CallbackEventListener.Companion.listen -import de.bixilon.minosoft.protocol.packets.c2s.play.ClientActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.ClientActionC2SP @Deprecated("ToDo") class CreditsScreen( diff --git a/src/main/java/de/bixilon/minosoft/input/interaction/DropHandler.kt b/src/main/java/de/bixilon/minosoft/input/interaction/DropHandler.kt index 7edd4d49b..205e14ff9 100644 --- a/src/main/java/de/bixilon/minosoft/input/interaction/DropHandler.kt +++ b/src/main/java/de/bixilon/minosoft/input/interaction/DropHandler.kt @@ -14,7 +14,7 @@ package de.bixilon.minosoft.input.interaction import de.bixilon.kutil.rate.RateLimiter -import de.bixilon.minosoft.protocol.packets.c2s.play.PlayerActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.PlayerActionC2SP class DropHandler( private val interactions: InteractionManager, diff --git a/src/main/java/de/bixilon/minosoft/input/interaction/HotbarHandler.kt b/src/main/java/de/bixilon/minosoft/input/interaction/HotbarHandler.kt index b77314a42..adafa1a66 100644 --- a/src/main/java/de/bixilon/minosoft/input/interaction/HotbarHandler.kt +++ b/src/main/java/de/bixilon/minosoft/input/interaction/HotbarHandler.kt @@ -17,8 +17,8 @@ import de.bixilon.kutil.collections.CollectionUtil.synchronizedSetOf import de.bixilon.kutil.rate.RateLimiter import de.bixilon.minosoft.data.abilities.Gamemodes import de.bixilon.minosoft.data.container.equipment.EquipmentSlots -import de.bixilon.minosoft.protocol.packets.c2s.play.HotbarSlotC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.PlayerActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.HotbarSlotC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.PlayerActionC2SP class HotbarHandler( val interactions: InteractionManager, diff --git a/src/main/java/de/bixilon/minosoft/input/interaction/InteractionManager.kt b/src/main/java/de/bixilon/minosoft/input/interaction/InteractionManager.kt index 7103815ea..ddeb56312 100644 --- a/src/main/java/de/bixilon/minosoft/input/interaction/InteractionManager.kt +++ b/src/main/java/de/bixilon/minosoft/input/interaction/InteractionManager.kt @@ -24,7 +24,7 @@ import de.bixilon.minosoft.data.registries.item.items.Item import de.bixilon.minosoft.input.interaction.InteractionUtil.canInteract import de.bixilon.minosoft.input.interaction.breaking.BreakHandler import de.bixilon.minosoft.input.interaction.use.UseHandler -import de.bixilon.minosoft.protocol.packets.c2s.play.move.SwingArmC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.SwingArmC2SP import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition class InteractionManager(val camera: ConnectionCamera) : Tickable { diff --git a/src/main/java/de/bixilon/minosoft/input/interaction/breaking/creative/CreativeBreaker.kt b/src/main/java/de/bixilon/minosoft/input/interaction/breaking/creative/CreativeBreaker.kt index db5f0f09c..fe906abbe 100644 --- a/src/main/java/de/bixilon/minosoft/input/interaction/breaking/creative/CreativeBreaker.kt +++ b/src/main/java/de/bixilon/minosoft/input/interaction/breaking/creative/CreativeBreaker.kt @@ -16,7 +16,7 @@ package de.bixilon.minosoft.input.interaction.breaking.creative import de.bixilon.minosoft.camera.target.targets.BlockTarget import de.bixilon.minosoft.data.entities.entities.player.Hands import de.bixilon.minosoft.input.interaction.breaking.BreakHandler -import de.bixilon.minosoft.protocol.packets.c2s.play.PlayerActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.PlayerActionC2SP class CreativeBreaker( private val breaking: BreakHandler, diff --git a/src/main/java/de/bixilon/minosoft/input/interaction/breaking/survival/SurvivalDigger.kt b/src/main/java/de/bixilon/minosoft/input/interaction/breaking/survival/SurvivalDigger.kt index b695af018..72bc21565 100644 --- a/src/main/java/de/bixilon/minosoft/input/interaction/breaking/survival/SurvivalDigger.kt +++ b/src/main/java/de/bixilon/minosoft/input/interaction/breaking/survival/SurvivalDigger.kt @@ -25,7 +25,7 @@ import de.bixilon.minosoft.data.registries.fluid.fluids.WaterFluid import de.bixilon.minosoft.data.registries.item.items.tool.MiningTool import de.bixilon.minosoft.data.registries.item.items.tool.properties.requirement.ToolRequirement import de.bixilon.minosoft.input.interaction.breaking.BreakHandler -import de.bixilon.minosoft.protocol.packets.c2s.play.PlayerActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.PlayerActionC2SP class SurvivalDigger( private val breaking: BreakHandler, diff --git a/src/main/java/de/bixilon/minosoft/input/interaction/use/LongUseHandler.kt b/src/main/java/de/bixilon/minosoft/input/interaction/use/LongUseHandler.kt index 160086aea..1db74acbd 100644 --- a/src/main/java/de/bixilon/minosoft/input/interaction/use/LongUseHandler.kt +++ b/src/main/java/de/bixilon/minosoft/input/interaction/use/LongUseHandler.kt @@ -18,7 +18,7 @@ import de.bixilon.minosoft.data.entities.entities.player.Hands import de.bixilon.minosoft.data.registries.item.handler.item.LongItemUseHandler import de.bixilon.minosoft.data.registries.item.handler.item.LongUseResults import de.bixilon.minosoft.physics.ItemUsing -import de.bixilon.minosoft.protocol.packets.c2s.play.PlayerActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.PlayerActionC2SP class LongUseHandler( private val interactionHandler: UseHandler, diff --git a/src/main/java/de/bixilon/minosoft/input/interaction/use/UseHandler.kt b/src/main/java/de/bixilon/minosoft/input/interaction/use/UseHandler.kt index 74a910bcc..f0c00ee06 100644 --- a/src/main/java/de/bixilon/minosoft/input/interaction/use/UseHandler.kt +++ b/src/main/java/de/bixilon/minosoft/input/interaction/use/UseHandler.kt @@ -19,8 +19,8 @@ import de.bixilon.minosoft.data.entities.entities.player.Hands import de.bixilon.minosoft.input.interaction.InteractionManager import de.bixilon.minosoft.input.interaction.KeyHandler import de.bixilon.minosoft.protocol.packets.c2s.play.block.BlockInteractC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.PositionRotationC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.item.UseItemC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.PositionRotationC2SP import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_15W31A class UseHandler( diff --git a/src/main/java/de/bixilon/minosoft/main/BootTasks.kt b/src/main/java/de/bixilon/minosoft/main/BootTasks.kt index 65bbba6f1..c30d8cf13 100644 --- a/src/main/java/de/bixilon/minosoft/main/BootTasks.kt +++ b/src/main/java/de/bixilon/minosoft/main/BootTasks.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -16,7 +16,6 @@ package de.bixilon.minosoft.main enum class BootTasks { PROFILES, LANGUAGE_FILES, - PACKETS, VERSIONS, ASSETS_PROPERTIES, DEFAULT_REGISTRIES, diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/EntitySpawnEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/EntitySpawnEvent.kt index a67d7b68d..1cda77bc2 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/EntitySpawnEvent.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/EntitySpawnEvent.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -15,7 +15,6 @@ package de.bixilon.minosoft.modding.event.events import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.s2c.play.entity.EntityPlayerS2CP import de.bixilon.minosoft.protocol.packets.s2c.play.entity.spawn.* @Deprecated("Observables") diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/EntitySpectateEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/EntitySpectateEvent.kt index 5057dbf60..2e85f3a2f 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/EntitySpectateEvent.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/EntitySpectateEvent.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -15,7 +15,7 @@ package de.bixilon.minosoft.modding.event.events import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.s2c.play.CameraS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.entity.player.CameraS2CP /** * Fired when the player should spectate an entity diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/ExplosionEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/ExplosionEvent.kt index b18fa9f7e..7ddd17f1a 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/ExplosionEvent.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/ExplosionEvent.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -17,7 +17,7 @@ import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.s2c.play.ExplosionS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.world.ExplosionS2CP class ExplosionEvent( connection: PlayConnection, diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/KickEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/KickEvent.kt index 0f1a207aa..437cf7358 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/KickEvent.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/KickEvent.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -15,12 +15,8 @@ package de.bixilon.minosoft.modding.event.events import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.s2c.play.KickS2CP open class KickEvent( connection: PlayConnection, val reason: ChatComponent, -) : PlayConnectionEvent(connection) { - - constructor(connection: PlayConnection, packet: KickS2CP) : this(connection, packet.reason) -} +) : PlayConnectionEvent(connection) diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/LoginKickEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/LoginKickEvent.kt deleted file mode 100644 index 8129c479d..000000000 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/LoginKickEvent.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Minosoft - * Copyright (C) 2020-2023 Moritz Zwerger - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ -package de.bixilon.minosoft.modding.event.events - -import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.s2c.login.KickS2CP - -@Deprecated("check connection state") -class LoginKickEvent( - connection: PlayConnection, - val reason: ChatComponent, -) : PlayConnectionEvent(connection) { - - constructor(connection: PlayConnection, packet: KickS2CP) : this(connection, packet.reason) -} diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/ParticleSpawnEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/ParticleSpawnEvent.kt index 741bdb2ed..3f72876e0 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/ParticleSpawnEvent.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/ParticleSpawnEvent.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -17,7 +17,7 @@ import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.minosoft.data.registries.particle.data.ParticleData import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.s2c.play.ParticleS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.world.ParticleS2CP class ParticleSpawnEvent( connection: PlayConnection, diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/util/ConnectionUtil.kt b/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/util/ConnectionUtil.kt index 71a7bb47b..9dbc58ddf 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/util/ConnectionUtil.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/util/ConnectionUtil.kt @@ -30,10 +30,10 @@ import de.bixilon.minosoft.modding.event.events.chat.ChatMessageSendEvent import de.bixilon.minosoft.modding.event.events.container.ContainerCloseEvent import de.bixilon.minosoft.protocol.ProtocolUtil.encodeNetwork import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.c2s.play.ClientActionC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.chat.ChatMessageC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.chat.CommandC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.chat.SignedChatMessageC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.ClientActionC2SP import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/PacketBufferUnderflowException.kt b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/PacketBufferUnderflowException.kt index 3c4c57d25..83bd16147 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/PacketBufferUnderflowException.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/PacketBufferUnderflowException.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -13,10 +13,10 @@ package de.bixilon.minosoft.protocol.network.network.client.netty.exceptions -import de.bixilon.minosoft.protocol.packets.factory.S2CPacketType +import de.bixilon.minosoft.protocol.packets.registry.PacketType class PacketBufferUnderflowException( - val type: S2CPacketType, + val type: PacketType, val size: Int, val available: Int, ) : NetworkException() { diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/PacketNotAvailableException.kt b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/PacketNotAvailableException.kt index 8076fdc3d..d4636cdc8 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/PacketNotAvailableException.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/PacketNotAvailableException.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -13,14 +13,14 @@ package de.bixilon.minosoft.protocol.network.network.client.netty.exceptions -import de.bixilon.minosoft.protocol.versions.Version -import de.bixilon.minosoft.protocol.packets.factory.C2SPacketType +import de.bixilon.minosoft.protocol.packets.registry.PacketType import de.bixilon.minosoft.protocol.protocol.ProtocolStates +import de.bixilon.minosoft.protocol.versions.Version class PacketNotAvailableException( - val type: C2SPacketType, + val type: PacketType, val state: ProtocolStates, val version: Version?, ) : NetworkException() { - override val message: String = "type=$type, state=$state, version=$version" + override val message: String = "name=${type.name}, state=$state, version=$version" } diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/WrongProtocolStateException.kt b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/PacketNotFoundException.kt similarity index 75% rename from src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/WrongProtocolStateException.kt rename to src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/PacketNotFoundException.kt index 06bdad965..34b9d457b 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/WrongProtocolStateException.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/PacketNotFoundException.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -13,11 +13,10 @@ package de.bixilon.minosoft.protocol.network.network.client.netty.exceptions -import de.bixilon.minosoft.protocol.protocol.ProtocolStates +import kotlin.reflect.KClass -class WrongProtocolStateException( - val required: ProtocolStates, - val current: ProtocolStates, +class PacketNotFoundException( + val clazz: KClass<*>, ) : NetworkException() { - override val message: String = "required=$required, current=$current" + override val message: String = "No packet is registered with class $clazz" } diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/implementation/S2CPacketNotImplementedException.kt b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/implementation/PacketNotImplementedException.kt similarity index 81% rename from src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/implementation/S2CPacketNotImplementedException.kt rename to src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/implementation/PacketNotImplementedException.kt index ff517e68a..601f48db4 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/implementation/S2CPacketNotImplementedException.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/implementation/PacketNotImplementedException.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -13,15 +13,14 @@ package de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.implementation -import de.bixilon.kutil.primitive.IntUtil.toHex -import de.bixilon.minosoft.protocol.versions.Version import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.NetworkException import de.bixilon.minosoft.protocol.protocol.ProtocolStates +import de.bixilon.minosoft.protocol.versions.Version -class S2CPacketNotImplementedException( - val packetId: Int, +class PacketNotImplementedException( + val name: String, val state: ProtocolStates, val version: Version?, ) : NetworkException() { - override val message: String = "packetId=0x${packetId.toHex(0)}, state=$state, version=$version" + override val message: String = "name=$name, state=$state, version=$version" } diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/unknown/UnknownPacketException.kt b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/unknown/UnknownPacketException.kt index ddb2eaa86..ac7144b83 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/unknown/UnknownPacketException.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/exceptions/unknown/UnknownPacketException.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -15,7 +15,7 @@ package de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.unk import de.bixilon.kutil.reflection.ReflectionUtil.realName import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.NetworkException -import de.bixilon.minosoft.protocol.packets.Packet +import de.bixilon.minosoft.protocol.packets.types.Packet class UnknownPacketException( val clazz: Class, diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/ClientPacketHandler.kt b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/ClientPacketHandler.kt index 483b8d841..584b40c3d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/ClientPacketHandler.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/ClientPacketHandler.kt @@ -26,7 +26,7 @@ import de.bixilon.minosoft.protocol.network.network.client.netty.NettyClient import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.NetworkException import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.PacketHandleException import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.WrongConnectionException -import de.bixilon.minosoft.protocol.packets.factory.S2CPacketType +import de.bixilon.minosoft.protocol.packets.registry.PacketType import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.packets.s2c.S2CPacket import de.bixilon.minosoft.protocol.packets.s2c.StatusS2CPacket @@ -48,18 +48,23 @@ class ClientPacketHandler( } } - private fun tryHandle(context: ChannelHandlerContext, type: S2CPacketType, packet: S2CPacket) { + private fun handleError(context: ChannelHandlerContext, type: PacketType, error: Throwable) { + if (type.extra != null) { + type.extra.onError(error, connection) + } + context.fireExceptionCaught(error) + } + + private fun tryHandle(context: ChannelHandlerContext, type: PacketType, packet: S2CPacket) { if (!client.connected) { return } try { handle(packet) } catch (exception: NetworkException) { - type.onError(exception, connection) - context.fireExceptionCaught(exception) + handleError(context, type, exception) } catch (error: Throwable) { - type.onError(error, connection) - context.fireExceptionCaught(PacketHandleException(error)) + handleError(context, type, PacketHandleException(error)) } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/QueuedS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/QueuedS2CP.kt index c9654e726..f2b4b127c 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/QueuedS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/QueuedS2CP.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -13,10 +13,10 @@ package de.bixilon.minosoft.protocol.network.network.client.netty.pipeline -import de.bixilon.minosoft.protocol.packets.factory.S2CPacketType +import de.bixilon.minosoft.protocol.packets.registry.PacketType import de.bixilon.minosoft.protocol.packets.s2c.S2CPacket data class QueuedS2CP( - val type: S2CPacketType, + val type: PacketType, val packet: T, ) diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/encoding/PacketDecoder.kt b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/encoding/PacketDecoder.kt index de36c7cdd..180c5e2eb 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/encoding/PacketDecoder.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/encoding/PacketDecoder.kt @@ -14,19 +14,15 @@ package de.bixilon.minosoft.protocol.network.network.client.netty.pipeline.encoding import de.bixilon.kutil.cast.CastUtil.unsafeCast -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.network.client.netty.NettyClient import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.NetworkException -import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.PacketBufferUnderflowException import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.PacketReadException import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.ciritical.UnknownPacketIdException -import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.implementation.S2CPacketNotImplementedException +import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.implementation.PacketNotImplementedException import de.bixilon.minosoft.protocol.network.network.client.netty.pipeline.QueuedS2CP -import de.bixilon.minosoft.protocol.packets.factory.S2CPacketType import de.bixilon.minosoft.protocol.packets.s2c.S2CPacket -import de.bixilon.minosoft.protocol.protocol.Protocol +import de.bixilon.minosoft.protocol.protocol.DefaultPacketMapping import de.bixilon.minosoft.protocol.protocol.buffers.InByteBuffer -import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.protocol.versions.Version import io.netty.channel.ChannelHandlerContext import io.netty.handler.codec.MessageToMessageDecoder @@ -44,43 +40,31 @@ class PacketDecoder( val state = client.state - val packetType = version?.s2cPackets?.get(state)?.getKey(packetId) ?: Protocol.S2C_PACKET_MAPPING[state]?.getKey(packetId) ?: throw UnknownPacketIdException(packetId, state, version) - if (packetType.clazz == S2CPacket::class.java) { - throw S2CPacketNotImplementedException(packetId, state, version) - } - if (packetType.canSkip(client.connection)) { + val type = version?.s2c?.get(state, packetId) ?: DefaultPacketMapping.S2C_PACKET_MAPPING[state, packetId] ?: throw UnknownPacketIdException(packetId, state, version) + + if (type.extra != null && type.extra.skip(client.connection)) { return } val packet = try { - readPacket(packetType, data) + type.create(data, client.connection).unsafeCast() + } catch (error: PacketNotImplementedException) { + error.printStackTrace() + return } catch (exception: NetworkException) { - packetType.onError(exception, client.connection) + type.extra?.onError(exception, client.connection) throw exception } catch (error: Throwable) { var realError = error if (error is InvocationTargetException) { error.cause?.let { realError = it } } - packetType.onError(realError, client.connection) + type.extra?.onError(realError, client.connection) throw PacketReadException(realError) } - out += QueuedS2CP(packetType, packet) - } - - private fun readPacket(type: S2CPacketType, data: ByteArray): S2CPacket { - val buffer: InByteBuffer = if (client.connection is PlayConnection) { - PlayInByteBuffer(data, client.connection) - } else { - InByteBuffer(data) - } - val packet = type.factory?.createPacket(buffer) ?: throw IllegalStateException("Packet factory is null?") - if (buffer.pointer < buffer.size) { - throw PacketBufferUnderflowException(type, buffer.size, buffer.size - buffer.pointer) - } - return packet.unsafeCast() + out += QueuedS2CP(type, packet) } diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/encoding/PacketEncoder.kt b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/encoding/PacketEncoder.kt index 018e05023..b1fa33922 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/encoding/PacketEncoder.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/pipeline/encoding/PacketEncoder.kt @@ -13,17 +13,18 @@ package de.bixilon.minosoft.protocol.network.network.client.netty.pipeline.encoding -import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.network.client.netty.NettyClient import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.PacketNotAvailableException import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.WrongConnectionException -import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.WrongProtocolStateException import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.unknown.UnknownPacketException import de.bixilon.minosoft.protocol.packets.c2s.C2SPacket import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.PacketTypeRegistry -import de.bixilon.minosoft.protocol.protocol.Protocol +import de.bixilon.minosoft.protocol.packets.registry.DefaultPackets +import de.bixilon.minosoft.protocol.packets.registry.PacketMapping +import de.bixilon.minosoft.protocol.packets.registry.PacketType +import de.bixilon.minosoft.protocol.protocol.DefaultPacketMapping +import de.bixilon.minosoft.protocol.protocol.ProtocolStates import de.bixilon.minosoft.protocol.protocol.buffers.OutByteBuffer import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.protocol.versions.Version @@ -35,27 +36,54 @@ class PacketEncoder( ) : MessageToMessageEncoder() { private val version: Version? = client.connection.version + private fun PlayC2SPacket.write(): OutByteBuffer { + if (client.connection !is PlayConnection) throw WrongConnectionException(PlayConnection::class.java, client.connection::class.java) + val buffer = PlayOutByteBuffer(client.connection) + write(buffer) + + return buffer + } + + private fun C2SPacket.write(): OutByteBuffer { + if (this is PlayC2SPacket) { + return this.write() + } + val buffer = OutByteBuffer() + write(buffer) + + return buffer + } + + @JvmName("getVersionPacketId") + private fun Version?.getPacketId(state: ProtocolStates, type: PacketType): Int { + if (this == null) return PacketMapping.INVALID_ID + return c2s[state, type] + } + + private fun getPacketId(version: Version?, state: ProtocolStates, type: PacketType): Int { + var id = version.getPacketId(state, type) + if (id != PacketMapping.INVALID_ID) { + return id + } + + id = DefaultPacketMapping.C2S_PACKET_MAPPING[state, type] + if (id != PacketMapping.INVALID_ID) { + return id + } + + throw PacketNotAvailableException(type, state, version) + } + override fun encode(context: ChannelHandlerContext, packet: C2SPacket, out: MutableList) { val state = client.state - val packetData: OutByteBuffer - when (packet) { - is PlayC2SPacket -> { - packetData = PlayOutByteBuffer(client.connection.nullCast() ?: throw WrongConnectionException(PlayConnection::class.java, client.connection::class.java)) - packet.write(packetData) - } - else -> { - packetData = OutByteBuffer() - packet.write(packetData) - } - } - val packetType = PacketTypeRegistry.getC2S(packet::class.java) ?: throw UnknownPacketException(packet::class.java) - if (packetType.state != state) { - throw WrongProtocolStateException(packetType.state, state) - } - val packetId = version?.c2sPackets?.get(state)?.get(packetType) ?: Protocol.C2S_PACKET_MAPPING[state]?.get(packetType) ?: throw PacketNotAvailableException(packetType, state, version) + + val type = DefaultPackets.C2S[state]?.get(packet::class) ?: throw UnknownPacketException(packet::class.java) + val id = getPacketId(version, state, type) + + val packetData = packet.write() val data = OutByteBuffer() - data.writeVarInt(packetId) + data.writeVarInt(id) data.writeBareByteArray(packetData.toArray()) out += data.toArray() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/C2SPacket.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/C2SPacket.kt index baa53cfd1..6204ee5f1 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/C2SPacket.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/C2SPacket.kt @@ -12,7 +12,7 @@ */ package de.bixilon.minosoft.protocol.packets.c2s -import de.bixilon.minosoft.protocol.packets.Packet +import de.bixilon.minosoft.protocol.packets.types.Packet import de.bixilon.minosoft.protocol.protocol.buffers.OutByteBuffer /** diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/handshake/HandshakeC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/handshake/HandshakeC2SP.kt index 3b36c5bc1..6afcbec1b 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/handshake/HandshakeC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/handshake/HandshakeC2SP.kt @@ -14,15 +14,12 @@ package de.bixilon.minosoft.protocol.packets.c2s.handshake import de.bixilon.minosoft.protocol.address.ServerAddress import de.bixilon.minosoft.protocol.packets.c2s.C2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition -import de.bixilon.minosoft.protocol.protocol.ProtocolStates import de.bixilon.minosoft.protocol.protocol.buffers.OutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(state = ProtocolStates.HANDSHAKE) class HandshakeC2SP( val address: ServerAddress, val action: Actions = Actions.STATUS, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/login/ChannelC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/login/ChannelC2SP.kt index 4a733d506..3347254bb 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/login/ChannelC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/login/ChannelC2SP.kt @@ -13,14 +13,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.login import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.protocol.ProtocolStates import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(state = ProtocolStates.LOGIN) class ChannelC2SP( val messageId: Int, val data: ByteArray?, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/login/EncryptionC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/login/EncryptionC2SP.kt index 598847b88..12e1456ac 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/login/EncryptionC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/login/EncryptionC2SP.kt @@ -15,8 +15,6 @@ package de.bixilon.minosoft.protocol.packets.c2s.login import de.bixilon.kutil.base64.Base64Util.toBase64 import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.protocol.ProtocolStates import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.protocol.protocol.encryption.EncryptionSignatureData @@ -24,7 +22,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(state = ProtocolStates.LOGIN) class EncryptionC2SP private constructor( val secret: ByteArray, val nonce: Any, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/login/StartC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/login/StartC2SP.kt index a1c953898..b494673d8 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/login/StartC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/login/StartC2SP.kt @@ -15,8 +15,6 @@ package de.bixilon.minosoft.protocol.packets.c2s.login import de.bixilon.minosoft.data.entities.entities.player.local.LocalPlayerEntity import de.bixilon.minosoft.protocol.PlayerPublicKey import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.protocol.ProtocolStates import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log @@ -24,7 +22,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.util.* -@LoadPacket(state = ProtocolStates.LOGIN) class StartC2SP( val username: String, val sessionId: UUID, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ChannelC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ChannelC2SP.kt index 571bad594..3ba037647 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ChannelC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ChannelC2SP.kt @@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.packets.c2s.play import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.OutByteBuffer import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer @@ -22,7 +21,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ChannelC2SP( val channel: ResourceLocation, val data: ByteArray, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/HeartbeatC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/HeartbeatC2SP.kt index 60f9d8183..41b2fb9e5 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/HeartbeatC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/HeartbeatC2SP.kt @@ -13,14 +13,12 @@ package de.bixilon.minosoft.protocol.packets.c2s.play import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class HeartbeatC2SP( val id: Long, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/PongC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/PongC2SP.kt index 1b9cbebda..fe66ef6d1 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/PongC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/PongC2SP.kt @@ -14,13 +14,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class PongC2SP(val payload: Int) : PlayC2SPacket { override fun write(buffer: PlayOutByteBuffer) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ResourcepackC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ResourcepackC2SP.kt index efc072767..d0ecdf68e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ResourcepackC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ResourcepackC2SP.kt @@ -13,14 +13,12 @@ package de.bixilon.minosoft.protocol.packets.c2s.play import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ResourcepackC2SP( val hash: String, val status: ResourcePackStates, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/SessionDataC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/SessionDataC2SP.kt index a5768b02a..6f309d15e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/SessionDataC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/SessionDataC2SP.kt @@ -14,14 +14,12 @@ package de.bixilon.minosoft.protocol.packets.c2s.play import de.bixilon.minosoft.protocol.PlayerPublicKey import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.util.* -@LoadPacket class SessionDataC2SP( val sessionId: UUID, val publicKey: PlayerPublicKey, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/SettingsC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/SettingsC2SP.kt index 3d2a18ddd..b2d6bd33f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/SettingsC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/SettingsC2SP.kt @@ -18,14 +18,12 @@ import de.bixilon.minosoft.data.entities.entities.player.Arms import de.bixilon.minosoft.data.entities.entities.player.SkinParts import de.bixilon.minosoft.data.world.difficulty.Difficulties import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class SettingsC2SP( val locale: String, var chatColors: Boolean, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/TradeC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/TradeC2SP.kt index 52a6502e3..93d629cbf 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/TradeC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/TradeC2SP.kt @@ -13,13 +13,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class TradeC2SP( val id: Int, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/advancement/tab/AdvancementCloseTabC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/advancement/tab/AdvancementCloseTabC2SP.kt index 5d9477c5f..9555dc25d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/advancement/tab/AdvancementCloseTabC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/advancement/tab/AdvancementCloseTabC2SP.kt @@ -13,12 +13,10 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.advancement.tab -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class AdvancementCloseTabC2SP : AdvancementTabC2SP(Action.CLOSE_TAB) { override fun log(reducedLog: Boolean) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/advancement/tab/AdvancementOpenTabC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/advancement/tab/AdvancementOpenTabC2SP.kt index 56cb88e39..d250d6040 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/advancement/tab/AdvancementOpenTabC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/advancement/tab/AdvancementOpenTabC2SP.kt @@ -13,13 +13,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.advancement.tab -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class AdvancementOpenTabC2SP( val tabName: String, ) : AdvancementTabC2SP(Action.OPEN_TAB) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/AnvilItemNameC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/AnvilItemNameC2SP.kt index 4742b91c6..b2907099a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/AnvilItemNameC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/AnvilItemNameC2SP.kt @@ -13,13 +13,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.block import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class AnvilItemNameC2SP( val name: String, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/BeaconEffectC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/BeaconEffectC2SP.kt index dcddecf5c..38f4d279e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/BeaconEffectC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/BeaconEffectC2SP.kt @@ -15,14 +15,12 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.block import de.bixilon.minosoft.data.registries.effects.StatusEffectType import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class BeaconEffectC2SP( val primaryEffect: Int?, val secondaryEffect: Int?, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/BlockInteractC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/BlockInteractC2SP.kt index c56b6173f..900929304 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/BlockInteractC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/BlockInteractC2SP.kt @@ -18,7 +18,6 @@ import de.bixilon.minosoft.data.container.stack.ItemStack import de.bixilon.minosoft.data.direction.Directions import de.bixilon.minosoft.data.entities.entities.player.Hands import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_15W31A import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer @@ -26,7 +25,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket data class BlockInteractC2SP( val position: Vec3i?, val direction: Directions?, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/BlockNbtC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/BlockNbtC2SP.kt index 55b428676..d5c08a4c8 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/BlockNbtC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/BlockNbtC2SP.kt @@ -15,13 +15,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.block import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class BlockNbtC2SP( val transactionId: Int, val blockPosition: Vec3i, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/CommandBlockC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/CommandBlockC2SP.kt index 0e0726c63..36f75a69d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/CommandBlockC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/CommandBlockC2SP.kt @@ -16,13 +16,11 @@ import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class CommandBlockC2SP( val position: Vec3i, val command: String, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/GenerateStructureC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/GenerateStructureC2SP.kt index 007a3c467..08d534621 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/GenerateStructureC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/GenerateStructureC2SP.kt @@ -14,14 +14,12 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.block import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class GenerateStructureC2SP( val position: Vec3i, val levels: Int, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/JigsawBlockC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/JigsawBlockC2SP.kt index 47c5b482e..389352f05 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/JigsawBlockC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/JigsawBlockC2SP.kt @@ -14,14 +14,12 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.block import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class JigsawBlockC2SP( val position: Vec3i, val targetPool: String, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/MinecartCommandBlockC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/MinecartCommandBlockC2SP.kt index 94b7cb2e1..f0c362228 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/MinecartCommandBlockC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/MinecartCommandBlockC2SP.kt @@ -13,13 +13,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.block import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class MinecartCommandBlockC2SP( val entityId: Int, val command: String, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/SignTextC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/SignTextC2SP.kt index 7430427f4..05715e8fe 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/SignTextC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/SignTextC2SP.kt @@ -17,14 +17,12 @@ import de.bixilon.minosoft.data.entities.block.sign.SignBlockEntity import de.bixilon.minosoft.data.entities.block.sign.SignSides import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class SignTextC2SP( val position: Vec3i, val side: SignSides, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/StructureBlockC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/StructureBlockC2SP.kt index 7f9ce7376..80d5605f4 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/StructureBlockC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/block/StructureBlockC2SP.kt @@ -16,13 +16,11 @@ import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class StructureBlockC2SP( val position: Vec3i, val action: StructureBlockActions, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/ChatMessageC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/ChatMessageC2SP.kt index f6e52fafc..59f006bca 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/ChatMessageC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/ChatMessageC2SP.kt @@ -13,13 +13,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.chat import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class ChatMessageC2SP( val message: String, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ChatPreviewC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/ChatPreviewC2SP.kt similarity index 91% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ChatPreviewC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/ChatPreviewC2SP.kt index 66ab24a6d..2cf71a843 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ChatPreviewC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/ChatPreviewC2SP.kt @@ -10,16 +10,14 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s.play +package de.bixilon.minosoft.protocol.packets.c2s.play.chat import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ChatPreviewC2SP( val id: Int, val query: String, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/CommandC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/CommandC2SP.kt index db25e2705..dc2c5405e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/CommandC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/CommandC2SP.kt @@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.chat import de.bixilon.minosoft.data.chat.signature.Acknowledgement import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log @@ -22,7 +21,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.time.Instant -@LoadPacket(threadSafe = false) class CommandC2SP( val command: String, val time: Instant = Instant.now(), diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/CommandSuggestionsC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/CommandSuggestionsC2SP.kt index b6165f614..b6def7d8e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/CommandSuggestionsC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/CommandSuggestionsC2SP.kt @@ -14,14 +14,12 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.chat import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class CommandSuggestionsC2SP( val text: String, val assumeCommand: Boolean, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/LegacyMessageAcknowledgementC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/LegacyMessageAcknowledgementC2SP.kt index 081f17ba9..8cc38e8e0 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/LegacyMessageAcknowledgementC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/LegacyMessageAcknowledgementC2SP.kt @@ -14,13 +14,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.chat import de.bixilon.minosoft.data.chat.signature.Acknowledgement import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class LegacyMessageAcknowledgementC2SP( val acknowledgement: Acknowledgement, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/MessageAcknowledgementC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/MessageAcknowledgementC2SP.kt index 30ffe8ab8..8798016ff 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/MessageAcknowledgementC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/MessageAcknowledgementC2SP.kt @@ -13,13 +13,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.chat import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class MessageAcknowledgementC2SP( val offset: Int, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/SignedChatMessageC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/SignedChatMessageC2SP.kt index 11c367773..9a2434f51 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/SignedChatMessageC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/chat/SignedChatMessageC2SP.kt @@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.chat import de.bixilon.minosoft.data.chat.signature.Acknowledgement import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.KUtil @@ -23,7 +22,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.time.Instant -@LoadPacket(threadSafe = false) class SignedChatMessageC2SP( val message: ByteArray, val time: Instant = Instant.now(), diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/CloseContainerC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/CloseContainerC2SP.kt index 69d5e0b6a..b7c8025a7 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/CloseContainerC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/CloseContainerC2SP.kt @@ -13,13 +13,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.container import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class CloseContainerC2SP( val containerId: Int, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/ContainerActionC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/ContainerActionC2SP.kt index 49c7c0832..9a7de7abd 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/ContainerActionC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/ContainerActionC2SP.kt @@ -13,13 +13,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.container import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket @Deprecated("Unknown purpose???") class ContainerActionC2SP( val containerId: Int, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/ContainerButtonC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/ContainerButtonC2SP.kt index 78b85a53a..10d716ccc 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/ContainerButtonC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/ContainerButtonC2SP.kt @@ -13,13 +13,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.container import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ContainerButtonC2SP( private val containerId: Int, private val buttonId: Int, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/ContainerClickC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/ContainerClickC2SP.kt index 2f90111b0..39e637ce6 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/ContainerClickC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/container/ContainerClickC2SP.kt @@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.container import de.bixilon.minosoft.data.container.stack.ItemStack import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_17_1_PRE1 import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log @@ -22,7 +21,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import it.unimi.dsi.fastutil.ints.Int2ObjectMap -@LoadPacket data class ContainerClickC2SP( val containerId: Int, val revision: Int, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/difficulty/DifficultyC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/difficulty/DifficultyC2SP.kt index 5bce0ef22..822b4fbeb 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/difficulty/DifficultyC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/difficulty/DifficultyC2SP.kt @@ -15,13 +15,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.difficulty import de.bixilon.minosoft.data.world.difficulty.Difficulties import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class DifficultyC2SP( val difficulty: Difficulties, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/difficulty/LockDifficultyC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/difficulty/LockDifficultyC2SP.kt index 442cc852b..77a86dfeb 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/difficulty/LockDifficultyC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/difficulty/LockDifficultyC2SP.kt @@ -14,13 +14,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.difficulty import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class LockDifficultyC2SP( val lock: Boolean, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/EntityActionC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/EntityActionC2SP.kt index e70e049f5..d74f8bc86 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/EntityActionC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/EntityActionC2SP.kt @@ -17,14 +17,12 @@ import de.bixilon.kutil.enums.ValuesEnum import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class EntityActionC2SP( val entityId: Int, val action: EntityActions, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/EntityNbtC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/EntityNbtC2SP.kt index 33701e2bb..dc7227dfb 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/EntityNbtC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/EntityNbtC2SP.kt @@ -13,13 +13,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.entity import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class EntityNbtC2SP( val transactionId: Int, val entityId: Int, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/EntitySpectateC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/EntitySpectateC2SP.kt index b67525292..110971f0a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/EntitySpectateC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/EntitySpectateC2SP.kt @@ -13,7 +13,6 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.entity import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels @@ -23,7 +22,6 @@ import java.util.* /** * Teleports our self in spectator mode to an entity */ -@LoadPacket class EntitySpectateC2SP( val uuid: UUID, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/interact/EntityAttackC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/interact/EntityAttackC2SP.kt index b73dadfce..d689f41bd 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/interact/EntityAttackC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/interact/EntityAttackC2SP.kt @@ -15,14 +15,12 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.entity.interact import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class EntityAttackC2SP( entityId: Int, override val sneaking: Boolean, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/interact/EntityEmptyInteractC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/interact/EntityEmptyInteractC2SP.kt index 72de66720..4dd1d20c0 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/interact/EntityEmptyInteractC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/interact/EntityEmptyInteractC2SP.kt @@ -16,14 +16,12 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.entity.interact import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.entities.entities.player.Hands import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class EntityEmptyInteractC2SP( entityId: Int, val hand: Hands, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/interact/EntityInteractPositionC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/interact/EntityInteractPositionC2SP.kt index 17090bd7c..361b45868 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/interact/EntityInteractPositionC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/interact/EntityInteractPositionC2SP.kt @@ -17,14 +17,12 @@ import de.bixilon.kotlinglm.vec3.Vec3 import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.entities.entities.player.Hands import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class EntityInteractPositionC2SP( entityId: Int, val position: Vec3, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/ConfirmTeleportC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/ConfirmTeleportC2SP.kt similarity index 91% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/ConfirmTeleportC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/ConfirmTeleportC2SP.kt index af143b2db..8f7d10245 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/ConfirmTeleportC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/ConfirmTeleportC2SP.kt @@ -10,16 +10,14 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s.play.move +package de.bixilon.minosoft.protocol.packets.c2s.play.entity.move import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ConfirmTeleportC2SP( val teleportId: Int, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/GroundChangeC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/GroundChangeC2SP.kt similarity index 91% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/GroundChangeC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/GroundChangeC2SP.kt index 08369571b..f5e5ba731 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/GroundChangeC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/GroundChangeC2SP.kt @@ -10,16 +10,14 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s.play.move +package de.bixilon.minosoft.protocol.packets.c2s.play.entity.move import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class GroundChangeC2SP( val onGround: Boolean, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/PositionC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/PositionC2SP.kt similarity index 93% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/PositionC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/PositionC2SP.kt index c344570ef..53334b53a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/PositionC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/PositionC2SP.kt @@ -10,18 +10,16 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s.play.move +package de.bixilon.minosoft.protocol.packets.c2s.play.entity.move import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class PositionC2SP( val position: Vec3d, val onGround: Boolean, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/PositionRotationC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/PositionRotationC2SP.kt similarity index 93% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/PositionRotationC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/PositionRotationC2SP.kt index d20b6edd1..9c6ddcd51 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/PositionRotationC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/PositionRotationC2SP.kt @@ -10,19 +10,17 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s.play.move +package de.bixilon.minosoft.protocol.packets.c2s.play.entity.move import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.minosoft.data.entities.EntityRotation import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class PositionRotationC2SP( val position: Vec3d, val rotation: EntityRotation, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/RotationC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/RotationC2SP.kt similarity index 92% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/RotationC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/RotationC2SP.kt index b90331270..5d94823a9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/RotationC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/RotationC2SP.kt @@ -10,17 +10,15 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s.play.move +package de.bixilon.minosoft.protocol.packets.c2s.play.entity.move import de.bixilon.minosoft.data.entities.EntityRotation import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class RotationC2SP( val rotation: EntityRotation, val onGround: Boolean, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/vehicle/MoveVehicleC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/vehicle/MoveVehicleC2SP.kt similarity index 91% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/vehicle/MoveVehicleC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/vehicle/MoveVehicleC2SP.kt index 9bdc135a4..5901975f6 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/vehicle/MoveVehicleC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/vehicle/MoveVehicleC2SP.kt @@ -10,18 +10,16 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s.play.move.vehicle +package de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.vehicle import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.minosoft.data.entities.EntityRotation import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class MoveVehicleC2SP( val position: Vec3d, val rotation: EntityRotation, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/vehicle/SteerBoatC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/vehicle/SteerBoatC2SP.kt similarity index 91% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/vehicle/SteerBoatC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/vehicle/SteerBoatC2SP.kt index 23cc09afc..19331c86e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/vehicle/SteerBoatC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/vehicle/SteerBoatC2SP.kt @@ -10,16 +10,14 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s.play.move.vehicle +package de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.vehicle import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class SteerBoatC2SP( val leftPaddle: Boolean, val rightPaddle: Boolean, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/vehicle/VehicleInputC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/vehicle/VehicleInputC2SP.kt similarity index 93% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/vehicle/VehicleInputC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/vehicle/VehicleInputC2SP.kt index ab2880b0c..e324d0a64 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/vehicle/VehicleInputC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/move/vehicle/VehicleInputC2SP.kt @@ -10,17 +10,15 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s.play.move.vehicle +package de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.vehicle import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class VehicleInputC2SP( val sideways: Float, val forward: Float, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ClientActionC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/player/ClientActionC2SP.kt similarity index 94% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ClientActionC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/player/ClientActionC2SP.kt index 9153ee40e..c96ef2b58 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ClientActionC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/player/ClientActionC2SP.kt @@ -10,19 +10,17 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s.play +package de.bixilon.minosoft.protocol.packets.c2s.play.entity.player import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ClientActionC2SP( val action: ClientActions, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/HotbarSlotC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/player/HotbarSlotC2SP.kt similarity index 91% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/HotbarSlotC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/player/HotbarSlotC2SP.kt index 95e23c376..4570f17f3 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/HotbarSlotC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/player/HotbarSlotC2SP.kt @@ -10,16 +10,14 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s.play +package de.bixilon.minosoft.protocol.packets.c2s.play.entity.player import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class HotbarSlotC2SP(val slot: Int) : PlayC2SPacket { override fun write(buffer: PlayOutByteBuffer) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/PlayerActionC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/player/PlayerActionC2SP.kt similarity index 95% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/PlayerActionC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/player/PlayerActionC2SP.kt index a07025c1f..26a6ba783 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/PlayerActionC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/player/PlayerActionC2SP.kt @@ -10,7 +10,7 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s.play +package de.bixilon.minosoft.protocol.packets.c2s.play.entity.player import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.kutil.enums.EnumUtil @@ -18,14 +18,12 @@ import de.bixilon.kutil.enums.ValuesEnum import de.bixilon.minosoft.data.direction.Directions import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.EMPTY import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class PlayerActionC2SP( val action: Actions, val position: Vec3i = Vec3i.EMPTY, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/SwingArmC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/player/SwingArmC2SP.kt similarity index 92% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/SwingArmC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/player/SwingArmC2SP.kt index d31c66c28..a6c0389af 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/SwingArmC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/player/SwingArmC2SP.kt @@ -10,18 +10,16 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s.play.move +package de.bixilon.minosoft.protocol.packets.c2s.play.entity.player import de.bixilon.minosoft.data.entities.entities.player.Hands import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class SwingArmC2SP( val arm: Hands, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/ToggleFlyC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/player/ToggleFlyC2SP.kt similarity index 93% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/ToggleFlyC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/player/ToggleFlyC2SP.kt index b1aba8724..7d8ef8196 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/move/ToggleFlyC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/entity/player/ToggleFlyC2SP.kt @@ -10,18 +10,16 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s.play.move +package de.bixilon.minosoft.protocol.packets.c2s.play.entity.player import de.bixilon.minosoft.data.entities.entities.player.local.Abilities import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ToggleFlyC2SP( val abilities: Abilities, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/BookC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/item/BookC2SP.kt similarity index 93% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/BookC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/item/BookC2SP.kt index 76f01edc0..e1af0fece 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/BookC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/item/BookC2SP.kt @@ -11,17 +11,15 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s.play +package de.bixilon.minosoft.protocol.packets.c2s.play.item import de.bixilon.minosoft.data.entities.entities.player.Hands import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class BookC2SP( val hand: Hands, val pages: Array, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/ItemPickC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/item/ItemPickC2SP.kt similarity index 91% rename from src/main/java/de/bixilon/minosoft/protocol/packets/c2s/ItemPickC2SP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/item/ItemPickC2SP.kt index a9a6fbddf..b1a334d01 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/ItemPickC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/item/ItemPickC2SP.kt @@ -11,15 +11,14 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.c2s +package de.bixilon.minosoft.protocol.packets.c2s.play.item -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket +import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ItemPickC2SP( val slot: Int, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/item/ItemStackCreateC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/item/ItemStackCreateC2SP.kt index 1ca16f3bb..5552e3a06 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/item/ItemStackCreateC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/item/ItemStackCreateC2SP.kt @@ -14,13 +14,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.item import de.bixilon.minosoft.data.container.stack.ItemStack import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ItemStackCreateC2SP( val slot: Int, val createdItem: ItemStack, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/item/UseItemC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/item/UseItemC2SP.kt index 431c43459..555d955af 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/item/UseItemC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/item/UseItemC2SP.kt @@ -14,14 +14,12 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.item import de.bixilon.minosoft.data.entities.entities.player.Hands import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket data class UseItemC2SP( val hand: Hands, val sequence: Int = 1, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/CraftingRecipeC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/CraftingRecipeC2SP.kt index a9cf56346..8fec2f26d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/CraftingRecipeC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/CraftingRecipeC2SP.kt @@ -13,13 +13,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.recipe import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class CraftingRecipeC2SP( val containerId: Byte, val recipeId: Int, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/DisplayedRecipeC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/DisplayedRecipeC2SP.kt index ce2228129..82abec834 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/DisplayedRecipeC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/DisplayedRecipeC2SP.kt @@ -13,14 +13,12 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.recipe import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.recipes.Recipe import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class DisplayedRecipeC2SP( val recipe: Recipe, ) : PlayC2SPacket { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/RecipeBookC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/RecipeBookC2SP.kt index 4b066d741..c51edd141 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/RecipeBookC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/RecipeBookC2SP.kt @@ -13,13 +13,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.recipe import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class RecipeBookC2SP( val book: RecipeBooks, val bookOpen: Boolean, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/book/DisplayRecipeC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/book/DisplayRecipeC2SP.kt index 237c95ff9..64729faba 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/book/DisplayRecipeC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/book/DisplayRecipeC2SP.kt @@ -13,13 +13,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.recipe.book -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class DisplayRecipeC2SP( val recipeId: Int, ) : RecipeBookStateC2SP(Action.DISPLAY_RECIPE) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/book/RecipeBookStatesC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/book/RecipeBookStatesC2SP.kt index 824ffa312..775739e27 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/book/RecipeBookStatesC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/recipe/book/RecipeBookStatesC2SP.kt @@ -13,14 +13,12 @@ package de.bixilon.minosoft.protocol.packets.c2s.play.recipe.book -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayOutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class RecipeBookStatesC2SP( val craftingBookOpen: Boolean, val craftingFilter: Boolean, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/status/PingC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/status/PingC2SP.kt index ead75089d..4be0c9a58 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/status/PingC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/status/PingC2SP.kt @@ -13,14 +13,11 @@ package de.bixilon.minosoft.protocol.packets.c2s.status import de.bixilon.minosoft.protocol.packets.c2s.C2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.protocol.ProtocolStates import de.bixilon.minosoft.protocol.protocol.buffers.OutByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(state = ProtocolStates.STATUS) class PingC2SP(val payload: Long) : C2SPacket { override fun write(buffer: OutByteBuffer) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/status/StatusRequestC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/status/StatusRequestC2SP.kt index f370269f8..f8ff5e6df 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/status/StatusRequestC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/status/StatusRequestC2SP.kt @@ -13,13 +13,10 @@ package de.bixilon.minosoft.protocol.packets.c2s.status import de.bixilon.minosoft.protocol.packets.c2s.C2SPacket -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.protocol.ProtocolStates import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(state = ProtocolStates.STATUS) class StatusRequestC2SP : C2SPacket { override fun log(reducedLog: Boolean) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/AbstractPacketType.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/factory/AbstractPacketType.kt deleted file mode 100644 index afff7b61f..000000000 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/AbstractPacketType.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.protocol.packets.factory - -interface AbstractPacketType { - val direction: PacketDirection - val threadSafe: Boolean - val lowPriority: Boolean -} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/C2SPacketType.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/factory/C2SPacketType.kt deleted file mode 100644 index 226316495..000000000 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/C2SPacketType.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Minosoft - * Copyright (C) 2020-2023 Moritz Zwerger - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.protocol.packets.factory - -import de.bixilon.minosoft.protocol.packets.c2s.C2SPacket -import de.bixilon.minosoft.protocol.protocol.ProtocolStates - -class C2SPacketType( - val state: ProtocolStates, - val clazz: Class, - val annotation: LoadPacket?, - override val threadSafe: Boolean = annotation!!.threadSafe, - override val lowPriority: Boolean = annotation!!.lowPriority, -) : AbstractPacketType { - override val direction = PacketDirection.CLIENT_TO_SERVER - - override fun toString(): String { - return clazz.toString() - } - - companion object { - val EMPTY = { C2SPacketType(ProtocolStates.HANDSHAKE, C2SPacket::class.java, null, threadSafe = false, lowPriority = false) } - } -} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/LoadPacket.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/factory/LoadPacket.kt deleted file mode 100644 index bcd5421e0..000000000 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/LoadPacket.kt +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.protocol.packets.factory - -import de.bixilon.minosoft.protocol.protocol.ProtocolStates - -@Target(AnnotationTarget.CLASS) -@Retention(AnnotationRetention.RUNTIME) -annotation class LoadPacket( - val state: ProtocolStates = ProtocolStates.PLAY, - val name: String = "", - val threadSafe: Boolean = true, - val parent: Boolean = false, - val lowPriority: Boolean = false, -) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/PacketTypeRegistry.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/factory/PacketTypeRegistry.kt deleted file mode 100644 index 37b24ebc7..000000000 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/PacketTypeRegistry.kt +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Minosoft - * Copyright (C) 2020-2023 Moritz Zwerger - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.protocol.packets.factory - -import com.google.common.reflect.ClassPath -import de.bixilon.kutil.cast.CastUtil.nullCast -import de.bixilon.kutil.cast.CastUtil.unsafeCast -import de.bixilon.kutil.collections.CollectionUtil.synchronizedMapOf -import de.bixilon.kutil.collections.map.SynchronizedMap -import de.bixilon.kutil.concurrent.worker.unconditional.UnconditionalWorker -import de.bixilon.kutil.latch.AbstractLatch -import de.bixilon.kutil.reflection.KotlinReflection.kClass -import de.bixilon.kutil.reflection.ReflectionUtil.realName -import de.bixilon.kutil.string.StringUtil.toSnakeCase -import de.bixilon.minosoft.protocol.PacketErrorHandler -import de.bixilon.minosoft.protocol.PacketSkipper -import de.bixilon.minosoft.protocol.packets.Packet -import de.bixilon.minosoft.protocol.packets.PacketsRoot -import de.bixilon.minosoft.protocol.packets.c2s.C2SPacket -import de.bixilon.minosoft.protocol.packets.factory.factories.PacketFactory -import de.bixilon.minosoft.protocol.packets.factory.factories.ReflectionFactory -import de.bixilon.minosoft.protocol.packets.s2c.S2CPacket -import de.bixilon.minosoft.protocol.protocol.ProtocolStates -import de.bixilon.minosoft.util.logging.Log -import de.bixilon.minosoft.util.logging.LogLevels -import de.bixilon.minosoft.util.logging.LogMessageType -import kotlin.reflect.full.companionObjectInstance - -object PacketTypeRegistry { - private var initialized = false - private lateinit var S2C_CLASS_MAP: Map, S2CPacketType> - private lateinit var S2C_STATE_MAP: Map> - private lateinit var C2S_CLASS_MAP: Map, C2SPacketType> - private lateinit var C2S_STATE_MAP: Map> - - - fun getS2C(clazz: Class): S2CPacketType? { - return S2C_CLASS_MAP[getPacketMapClass(clazz)] - } - - fun getS2C(state: ProtocolStates, name: String): S2CPacketType? { - return S2C_STATE_MAP[state]?.get(name) - } - - fun getC2S(clazz: Class): C2SPacketType? { - return C2S_CLASS_MAP[getPacketMapClass(clazz)] - } - - fun getC2S(state: ProtocolStates, name: String): C2SPacketType? { - return C2S_STATE_MAP[state]?.get(name) - } - - private fun getPacketMapClass(clazz: Class): Class? { - if (!clazz.isAnnotationPresent(LoadPacket::class.java)) { - return null - } - val annotation = clazz.getAnnotation(LoadPacket::class.java) - - if (annotation.parent) { - val parent = clazz.superclass.unsafeCast>() - if (parent == Packet::class.java || parent == S2CPacket::class.java || parent == C2SPacket::class.java) { - return clazz - } - return parent.unsafeCast() - } - return clazz - } - - - fun init(latch: AbstractLatch?) { - Log.log(LogMessageType.OTHER, LogLevels.VERBOSE) { "Initializing packets..." } - val classLoader = Thread.currentThread().contextClassLoader - - val s2cClassMap: SynchronizedMap, S2CPacketType> = synchronizedMapOf() - val s2cStateMap: SynchronizedMap> = synchronizedMapOf() - val c2sClassMap: SynchronizedMap, C2SPacketType> = synchronizedMapOf() - val c2sStateMap: SynchronizedMap> = synchronizedMapOf() - - val worker = UnconditionalWorker() - for (info in ClassPath.from(classLoader).getTopLevelClassesRecursive(PacketsRoot::class.java.packageName)) { - worker += { loadClass(s2cClassMap, s2cStateMap, c2sClassMap, c2sStateMap, info) } - } - worker.work(latch) - this.S2C_CLASS_MAP = s2cClassMap - this.S2C_STATE_MAP = s2cStateMap - this.C2S_CLASS_MAP = c2sClassMap - this.C2S_STATE_MAP = c2sStateMap - - initialized = true - Log.log(LogMessageType.OTHER, LogLevels.VERBOSE) { "Packets initialized!" } - } - - private fun loadClass( - s2cClassMap: SynchronizedMap, S2CPacketType>, - s2cStateMap: SynchronizedMap>, - c2sClassMap: SynchronizedMap, C2SPacketType>, - c2sStateMap: SynchronizedMap>, - info: ClassPath.ClassInfo, - ) { - val clazz = info.load() - if (!clazz.isAnnotationPresent(LoadPacket::class.java)) { - return - } - if (!Packet::class.java.isAssignableFrom(clazz) && !PacketFactory::class.java.isAssignableFrom(clazz)) { - return - } - val kClass = clazz.kClass - val objectInstance: Any? = kClass.objectInstance ?: kClass.companionObjectInstance - val annotation = clazz.getAnnotation(LoadPacket::class.java) - val errorHandler = if (objectInstance is PacketErrorHandler) objectInstance else null - val packetSkipper = if (objectInstance is PacketSkipper) objectInstance else null - - val direction = when { - objectInstance is PacketFactory -> objectInstance.direction - C2SPacket::class.java.isAssignableFrom(clazz) -> PacketDirection.CLIENT_TO_SERVER - S2CPacket::class.java.isAssignableFrom(clazz) -> PacketDirection.SERVER_TO_CLIENT - else -> throw IllegalArgumentException("${clazz.realName}: Can not determinate direction!") - } - - val factory = when { - direction == PacketDirection.CLIENT_TO_SERVER -> null // They have data constructors only (yet) - objectInstance is PacketFactory -> objectInstance - else -> ReflectionFactory(clazz.unsafeCast>(), direction, annotation.state) - } - - val name = clazz.getPacketName(annotation) - - val parentClass = getPacketMapClass(clazz.unsafeCast()) - - if (direction == PacketDirection.SERVER_TO_CLIENT) { - val s2cClass = clazz.unsafeCast>() - val type = S2CPacketType(annotation.state, s2cClass, errorHandler, packetSkipper, annotation, factory) - s2cClassMap[s2cClass] = type - s2cStateMap.synchronizedGetOrPut(annotation.state) { mutableMapOf() }.put(name, type)?.let { throw IllegalStateException("Packet already mapped: $it (name=$name)") } - if (parentClass != null && parentClass != s2cClass) { - val parentKClass = parentClass.kClass - val parentObject = parentKClass.objectInstance ?: parentKClass.companionObjectInstance - val parentErrorHandler = parentObject.nullCast() - val parentPacketSkipper = parentObject.nullCast() - s2cClassMap[parentClass.unsafeCast()] = S2CPacketType(annotation.state, parentClass.unsafeCast(), parentErrorHandler, parentPacketSkipper, annotation) - s2cStateMap[annotation.state]!!.putIfAbsent(parentClass.getPacketName(null), type) - } - } else { - val c2sClass = clazz.unsafeCast>() - val type = C2SPacketType(annotation.state, c2sClass, annotation) - c2sClassMap[c2sClass] = type - c2sStateMap.synchronizedGetOrPut(annotation.state) { mutableMapOf() }.put(name, type)?.let { throw IllegalStateException("Packet already mapped: $it (name=$name)") } - if (parentClass != null && parentClass != c2sClass) { - val parentType = c2sClassMap.synchronizedGetOrPut(parentClass.unsafeCast()) { C2SPacketType(annotation.state, parentClass.unsafeCast(), annotation) } - c2sClassMap[parentClass.unsafeCast()] = parentType - c2sStateMap[annotation.state]!!.putIfAbsent(parentClass.getPacketName(null), parentType) - } - } - } - - - fun Class<*>.getPacketName(annotation: LoadPacket?): String { - var name = annotation?.name - if (name == null || name.isBlank()) { - name = simpleName.removePrefix("Base").removeSuffix("S2CP").removeSuffix("C2SP").removeSuffix("C2SF").removeSuffix("S2CF").toSnakeCase() - } - return name - } -} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/S2CPacketType.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/factory/S2CPacketType.kt deleted file mode 100644 index 6e4d84f18..000000000 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/S2CPacketType.kt +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Minosoft - * Copyright (C) 2020-2023 Moritz Zwerger - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.protocol.packets.factory - -import de.bixilon.minosoft.protocol.PacketErrorHandler -import de.bixilon.minosoft.protocol.PacketSkipper -import de.bixilon.minosoft.protocol.network.connection.Connection -import de.bixilon.minosoft.protocol.packets.factory.factories.PacketFactory -import de.bixilon.minosoft.protocol.packets.s2c.S2CPacket -import de.bixilon.minosoft.protocol.protocol.ProtocolStates - -class S2CPacketType( - val state: ProtocolStates, - val clazz: Class, - private val packetErrorHandler: PacketErrorHandler?, - private val packetSkipper: PacketSkipper?, - val annotation: LoadPacket?, - val factory: PacketFactory? = null, - override val threadSafe: Boolean = annotation!!.threadSafe, - override val lowPriority: Boolean = annotation!!.lowPriority, -) : AbstractPacketType, PacketErrorHandler, PacketSkipper { - override val direction = PacketDirection.SERVER_TO_CLIENT - - - override fun onError(error: Throwable, connection: Connection) { - packetErrorHandler?.onError(error, connection) - } - - override fun canSkip(connection: Connection): Boolean { - return packetSkipper?.canSkip(connection) ?: false - } - - override fun toString(): String { - return clazz.toString() - } - - - companion object { - val EMPTY = { S2CPacketType(ProtocolStates.HANDSHAKE, S2CPacket::class.java, null, null, null, threadSafe = false, lowPriority = false) } - } -} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/factories/ReflectionFactory.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/factory/factories/ReflectionFactory.kt deleted file mode 100644 index 9b200bb02..000000000 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/factories/ReflectionFactory.kt +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Minosoft - * Copyright (C) 2020-2023 Moritz Zwerger - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.protocol.packets.factory.factories - -import de.bixilon.minosoft.protocol.packets.Packet -import de.bixilon.minosoft.protocol.packets.factory.PacketDirection -import de.bixilon.minosoft.protocol.protocol.ProtocolStates -import de.bixilon.minosoft.protocol.protocol.buffers.InByteBuffer -import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer - -class ReflectionFactory( - clazz: Class, - override val direction: PacketDirection, - state: ProtocolStates, -) : PacketFactory { - private val constructor = if (state == ProtocolStates.PLAY || state == ProtocolStates.LOGIN) { - clazz.getConstructor(PlayInByteBuffer::class.java) - } else { - clazz.getConstructor(InByteBuffer::class.java) - } - - override fun createPacket(buffer: InByteBuffer): T { - return constructor.newInstance(buffer) - } -} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/registry/DefaultPackets.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/registry/DefaultPackets.kt new file mode 100644 index 000000000..b8ba7f4a2 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/registry/DefaultPackets.kt @@ -0,0 +1,373 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.protocol.packets.registry + +import de.bixilon.minosoft.protocol.packets.c2s.handshake.HandshakeC2SP +import de.bixilon.minosoft.protocol.packets.c2s.login.ChannelC2SP +import de.bixilon.minosoft.protocol.packets.c2s.login.EncryptionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.login.StartC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.* +import de.bixilon.minosoft.protocol.packets.c2s.play.advancement.tab.AdvancementCloseTabC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.advancement.tab.AdvancementOpenTabC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.block.* +import de.bixilon.minosoft.protocol.packets.c2s.play.chat.* +import de.bixilon.minosoft.protocol.packets.c2s.play.container.CloseContainerC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.container.ContainerActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.container.ContainerButtonC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.container.ContainerClickC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.difficulty.DifficultyC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.difficulty.LockDifficultyC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.EntityActionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.EntityNbtC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.EntitySpectateC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.interact.EntityAttackC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.interact.EntityEmptyInteractC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.interact.EntityInteractPositionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.* +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.vehicle.MoveVehicleC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.vehicle.SteerBoatC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.vehicle.VehicleInputC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.* +import de.bixilon.minosoft.protocol.packets.c2s.play.item.BookC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.item.ItemPickC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.item.ItemStackCreateC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.item.UseItemC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.recipe.CraftingRecipeC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.recipe.DisplayedRecipeC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.recipe.RecipeBookC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.recipe.book.DisplayRecipeC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.recipe.book.RecipeBookStatesC2SP +import de.bixilon.minosoft.protocol.packets.c2s.status.PingC2SP +import de.bixilon.minosoft.protocol.packets.c2s.status.StatusRequestC2SP +import de.bixilon.minosoft.protocol.packets.s2c.general.CompressionS2CP +import de.bixilon.minosoft.protocol.packets.s2c.general.KickS2CP +import de.bixilon.minosoft.protocol.packets.s2c.login.ChannelS2CP +import de.bixilon.minosoft.protocol.packets.s2c.login.EncryptionS2CP +import de.bixilon.minosoft.protocol.packets.s2c.login.SuccessS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.* +import de.bixilon.minosoft.protocol.packets.s2c.play.advancement.AdvancementTabS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.advancement.AdvancementsS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.block.* +import de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk.* +import de.bixilon.minosoft.protocol.packets.s2c.play.border.* +import de.bixilon.minosoft.protocol.packets.s2c.play.bossbar.BossbarS2CF +import de.bixilon.minosoft.protocol.packets.s2c.play.chat.* +import de.bixilon.minosoft.protocol.packets.s2c.play.combat.CombatEventS2CF +import de.bixilon.minosoft.protocol.packets.s2c.play.combat.EndCombatEventS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.combat.EnterCombatEventS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.combat.KillCombatEventS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.container.* +import de.bixilon.minosoft.protocol.packets.s2c.play.entity.* +import de.bixilon.minosoft.protocol.packets.s2c.play.entity.effect.EntityEffectS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.entity.effect.EntityRemoveEffectS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.entity.move.* +import de.bixilon.minosoft.protocol.packets.s2c.play.entity.passenger.EntityAttachS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.entity.passenger.EntityPassengerS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.entity.player.* +import de.bixilon.minosoft.protocol.packets.s2c.play.entity.spawn.* +import de.bixilon.minosoft.protocol.packets.s2c.play.item.BookS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.item.CompassPositionS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.item.CraftingRecipeS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.item.ItemCooldownS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.map.MapS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.map.legacy.LegacyMapS2CF +import de.bixilon.minosoft.protocol.packets.s2c.play.recipes.RecipesS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.recipes.UnlockRecipesS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.scoreboard.ObjectivePositionS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.scoreboard.objective.ObjectiveS2CF +import de.bixilon.minosoft.protocol.packets.s2c.play.scoreboard.score.ScoreboardScoreS2CF +import de.bixilon.minosoft.protocol.packets.s2c.play.scoreboard.teams.TeamsS2CF +import de.bixilon.minosoft.protocol.packets.s2c.play.sign.SignEditorS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.sign.SignTextS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.sound.EntitySoundS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.sound.NamedSoundS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.sound.SoundEventS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.sound.StopSoundS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.tab.LegacyTabListS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.tab.TabListRemoveS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.tab.TabListS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.tab.TabListTextS2CP +import de.bixilon.minosoft.protocol.packets.s2c.play.title.* +import de.bixilon.minosoft.protocol.packets.s2c.play.world.* +import de.bixilon.minosoft.protocol.packets.s2c.status.PongS2CP +import de.bixilon.minosoft.protocol.packets.s2c.status.StatusS2CP +import de.bixilon.minosoft.protocol.protocol.PacketDirections +import de.bixilon.minosoft.protocol.protocol.ProtocolStates + +object DefaultPackets { + val C2S = mapOf( + ProtocolStates.HANDSHAKE to PacketRegistry(threadSafe = false, extra = PacketExtraHandler.Disconnect).apply { + register("handshake", HandshakeC2SP::class) + }, + ProtocolStates.STATUS to PacketRegistry(threadSafe = false, extra = PacketExtraHandler.Disconnect).apply { + register("ping", PingC2SP::class) + register("status_request", StatusRequestC2SP::class) + }, + ProtocolStates.LOGIN to PacketRegistry(threadSafe = false, extra = PacketExtraHandler.Disconnect).apply { + register("channel", ChannelC2SP::class) + register("encryption", EncryptionC2SP::class) + register("start", StartC2SP::class) + }, + ProtocolStates.PLAY to PacketRegistry(threadSafe = true).apply { + register("advancement_tab", AdvancementCloseTabC2SP::class) + register("advancement_tab", AdvancementOpenTabC2SP::class) + + register("anvil_item_name", AnvilItemNameC2SP::class) + register("beacon_effect", BeaconEffectC2SP::class) + register("block_interact", BlockInteractC2SP::class) + register("block_nbt", BlockNbtC2SP::class) + register("command_block", CommandBlockC2SP::class) + register("generate_structure", GenerateStructureC2SP::class) + register("jigsaw_block", JigsawBlockC2SP::class) + register("minecart_command_block", MinecartCommandBlockC2SP::class) + register("sign_text", SignTextC2SP::class) + register("structure_block", StructureBlockC2SP::class) + + register("chat_message", ChatMessageC2SP::class, threadSafe = false) + register("chat_preview", ChatPreviewC2SP::class, threadSafe = false) + register("command", CommandC2SP::class, threadSafe = false) + register("command_suggestions", CommandSuggestionsC2SP::class, threadSafe = false) + register("legacy_message_acknowledgement", LegacyMessageAcknowledgementC2SP::class, threadSafe = false) + register("message_acknowledgement", MessageAcknowledgementC2SP::class, threadSafe = false) + register("signed_chat_message", SignedChatMessageC2SP::class, threadSafe = false) + + register("close_container", CloseContainerC2SP::class) + register("container_action", ContainerActionC2SP::class) + register("container_button", ContainerButtonC2SP::class) + register("container_click", ContainerClickC2SP::class) + + register("difficulty", DifficultyC2SP::class) + register("lock_difficulty", LockDifficultyC2SP::class) + + register("entity_attack", EntityAttackC2SP::class); register("entity_interact", EntityAttackC2SP::class) + register("entity_empty_interact", EntityEmptyInteractC2SP::class); register("entity_interact", EntityEmptyInteractC2SP::class) + register("entity_interact_position", EntityInteractPositionC2SP::class); register("entity_interact", EntityInteractPositionC2SP::class) + + register("move_vehicle", MoveVehicleC2SP::class) + register("steer_boat", SteerBoatC2SP::class) + register("vehicle_input", VehicleInputC2SP::class) + + register("confirm_teleport", ConfirmTeleportC2SP::class) + register("ground_change", GroundChangeC2SP::class) + register("position", PositionC2SP::class) + register("position_rotation", PositionRotationC2SP::class) + register("rotation", RotationC2SP::class) + + register("client_action", ClientActionC2SP::class) + register("hotbar_slot", HotbarSlotC2SP::class) + register("player_action", PlayerActionC2SP::class) + register("swing_arm", SwingArmC2SP::class) + register("toggle_fly", ToggleFlyC2SP::class) + + register("entity_action", EntityActionC2SP::class) + register("entity_nbt", EntityNbtC2SP::class) + register("entity_spectate", EntitySpectateC2SP::class) + + register("book", BookC2SP::class) + register("item_pick", ItemPickC2SP::class) + register("item_stack_create", ItemStackCreateC2SP::class) + register("use_item", UseItemC2SP::class) + + register("display_recipe", DisplayRecipeC2SP::class) + register("recipe_book_states", RecipeBookStatesC2SP::class) + + register("crafting_recipe", CraftingRecipeC2SP::class) + register("displayed_recipe", DisplayedRecipeC2SP::class) + register("recipe_book", RecipeBookC2SP::class) + + register("channel", de.bixilon.minosoft.protocol.packets.c2s.play.ChannelC2SP::class, threadSafe = false) + register("heartbeat", HeartbeatC2SP::class) + register("pong", PongC2SP::class) + register("resourcepack", ResourcepackC2SP::class) + register("session_data", SessionDataC2SP::class) + register("settings", SettingsC2SP::class) + register("trade", TradeC2SP::class) + }, + ) + + val S2C = mapOf( + ProtocolStates.STATUS to PacketRegistry(threadSafe = false, extra = PacketExtraHandler.Disconnect).apply { + register("pong", PongS2CP::class, ::PongS2CP) + register("status", StatusS2CP::class, ::StatusS2CP) + }, + ProtocolStates.LOGIN to PacketRegistry(threadSafe = false, extra = PacketExtraHandler.Disconnect).apply { + registerPlay("channel", ::ChannelS2CP, ChannelS2CP::class) + registerPlay("compression", ::CompressionS2CP, CompressionS2CP::class) + registerPlay("encryption", ::EncryptionS2CP, EncryptionS2CP::class) + registerPlay("kick", ::KickS2CP, KickS2CP::class) + registerPlay("success", ::SuccessS2CP, SuccessS2CP::class) + }, + ProtocolStates.PLAY to PacketRegistry(threadSafe = true).apply { + registerPlay("advancements", ::AdvancementsS2CP, threadSafe = false) + registerPlay("advancement_tab", ::AdvancementTabS2CP, threadSafe = false) + + registerPlay("block_action", ::BlockActionS2CP, threadSafe = false) + registerPlay("block_break_animation", ::BlockBreakAnimationS2CP) + registerPlay("block_break", ::BlockBreakS2CP, threadSafe = false) + registerPlay("block_data", ::BlockDataS2CP, threadSafe = false) + registerPlay("block", ::BlockS2CP, threadSafe = false) + registerPlay("blocks", ::BlocksS2CP, threadSafe = false) + registerPlay("legacy_block_break", ::LegacyBlockBreakS2CP, threadSafe = false) + + registerPlay("chunk_biome", ::ChunkBiomeS2CP, lowPriority = true) + registerPlay("chunk_center", ::ChunkCenterS2CP) + registerPlay("chunk_light", ::ChunkLightS2CP, lowPriority = true) + registerPlay("chunk", ::ChunkS2CP, lowPriority = true) + registerPlay("chunks", ::ChunksS2CP, lowPriority = true) + registerPlay("simulation_distance", ::SimulationDistanceS2CP) + registerPlay("unload_chunk", ::UnloadChunkS2CP, threadSafe = false) + registerPlay("view_distance", ::ViewDistanceS2CP) + + registerPlay("center_world_border", ::CenterWorldBorderS2CP, threadSafe = false) + registerPlay("initialize_world_border", ::InitializeWorldBorderS2CP, threadSafe = false) + registerPlay("interpolate_world_border", ::InterpolateWorldBorderS2CP, threadSafe = false) + registerPlay("size_world_border", ::SizeWorldBorderS2CP, threadSafe = false) + registerPlay("warn_blocks_world_border", ::WarnBlocksWorldBorderS2CP, threadSafe = false) + registerPlay("warn_time_world_border", ::WarnTimeWorldBorderS2CP, threadSafe = false) + registerPlay("world_border", WorldBorderS2CF, threadSafe = false) + + registerPlay("bossbar", BossbarS2CF, threadSafe = false) + + registerPlay("chat_message", ::ChatMessageS2CP, threadSafe = false) + registerPlay("chat_preview", ::ChatPreviewS2CP, threadSafe = false) + registerPlay("chat_suggestions", ::ChatSuggestionsS2CP, threadSafe = false) + registerPlay("commands", ::CommandsS2CP, threadSafe = false) + registerPlay("command_suggestions", ::CommandSuggestionsS2CP, threadSafe = false) + registerPlay("hide_message", ::HideMessageS2CP) + registerPlay("message_header", ::MessageHeaderS2CP, threadSafe = false) + registerPlay("signed_chat_message", ::SignedChatMessageS2CP, threadSafe = false) + registerPlay("temporary_chat_preview", ::TemporaryChatPreviewS2CP) + registerPlay("unsigned_chat_message", ::UnsignedChatMessageS2CP, threadSafe = false) + + registerPlay("combat_event", CombatEventS2CF) + registerPlay("end_combat_event", ::EndCombatEventS2CP) + registerPlay("enter_combat_event", ::EnterCombatEventS2CP) + registerPlay("kill_combat_event", ::KillCombatEventS2CP) + + registerPlay("close_container", ::CloseContainerS2CP, threadSafe = false) + registerPlay("container_action", ::ContainerActionS2CP, threadSafe = false) + registerPlay("container_item", ::ContainerItemS2CP, threadSafe = false) + registerPlay("container_items", ::ContainerItemsS2CP, threadSafe = false) + registerPlay("container_properties", ::ContainerPropertiesS2CP, threadSafe = false) + registerPlay("open_container", ::OpenContainerS2CP, threadSafe = false) + registerPlay("open_entity_container", ::OpenEntityContainerS2CP, threadSafe = false) + + registerPlay("entity_effect", ::EntityEffectS2CP, threadSafe = false) + registerPlay("entity_remove_effect", ::EntityRemoveEffectS2CP, threadSafe = false) + registerPlay("empty_move", ::EmptyMoveS2CP, threadSafe = false) + registerPlay("head_rotation", ::HeadRotationS2CP, threadSafe = false) + registerPlay("movement_rotation", ::MovementRotationS2CP, threadSafe = false) + registerPlay("move_vehicle", ::MoveVehicleS2CP, threadSafe = false) + registerPlay("player_face", ::PlayerFaceS2CP, threadSafe = false) + registerPlay("position_rotation", ::PositionRotationS2CP, threadSafe = false) + registerPlay("relative_move", ::RelativeMoveS2CP, threadSafe = false) + registerPlay("rotation", ::RotationS2CP, threadSafe = false) + registerPlay("teleport", ::TeleportS2CP, threadSafe = false) + registerPlay("velocity", ::VelocityS2CP, threadSafe = false) + + registerPlay("entity_attach", ::EntityAttachS2CP, threadSafe = false) + registerPlay("entity_passenger", ::EntityPassengerS2CP, threadSafe = false) + + registerPlay("camera", ::CameraS2CP, threadSafe = false) + registerPlay("experience", ::ExperienceS2CP, threadSafe = false) + registerPlay("health", ::HealthS2CP, threadSafe = false) + registerPlay("hotbar_slot", ::HotbarSlotS2CP, threadSafe = false) + registerPlay("player_abilities", ::PlayerAbilitiesS2CP, threadSafe = false) + + registerPlay("entity_destroy", ::EntityDestroyS2CP, threadSafe = false) + registerPlay("entity_experience_orb", ::EntityExperienceOrbS2CP, threadSafe = false) + registerPlay("entity_mob_spawn", ::EntityMobSpawnS2CP, threadSafe = false) + registerPlay("entity_object_spawn", ::EntityObjectSpawnS2CP, threadSafe = false) + registerPlay("entity_painting", ::EntityPaintingS2CP, threadSafe = false) + registerPlay("entity_player", ::EntityPlayerS2CP, threadSafe = false) + registerPlay("global_entity_spawn", ::GlobalEntitySpawnS2CP, threadSafe = false) + + registerPlay("damage_tilt", ::DamageTiltS2CP) + registerPlay("entity_animation", ::EntityAnimationS2CP) + registerPlay("entity_attributes", ::EntityAttributesS2CP, threadSafe = false) + registerPlay("entity_collect", ::EntityCollectS2CP) + registerPlay("entity_damage", ::EntityDamageS2CP) + registerPlay("entity_data", ::EntityDataS2CP, threadSafe = false) + registerPlay("entity_equipment", ::EntityEquipmentS2CP, threadSafe = false) + registerPlay("entity_event", ::EntityEventS2CP, threadSafe = false) + registerPlay("entity_sleep", ::EntitySleepS2CP) + + registerPlay("book", ::BookS2CP) + registerPlay("compass_position", ::CompassPositionS2CP) + registerPlay("crafting_recipe", ::CraftingRecipeS2CP) + registerPlay("item_cooldown", ::ItemCooldownS2CP, threadSafe = false) + + registerPlay("legacy_map", LegacyMapS2CF, threadSafe = false) + registerPlay("map", ::MapS2CP) + + registerPlay("recipes", ::RecipesS2CP) + registerPlay("unlock_recipes", ::UnlockRecipesS2CP) + + registerPlay("objective", ObjectiveS2CF, threadSafe = false) + registerPlay("scoreboard_score", ScoreboardScoreS2CF, threadSafe = false) + registerPlay("teams", TeamsS2CF, threadSafe = false) + registerPlay("objective_position", ::ObjectivePositionS2CP, threadSafe = false) + + registerPlay("sign_editor", ::SignEditorS2CP) + registerPlay("sign_text", ::SignTextS2CP, threadSafe = false) + + registerPlay("entity_sound", ::EntitySoundS2CP) + registerPlay("named_sound", ::NamedSoundS2CP) + registerPlay("sound_event", ::SoundEventS2CP) + registerPlay("stop_sound", ::StopSoundS2CP) + + registerPlay("legacy_tab_list", ::LegacyTabListS2CP, threadSafe = false) + registerPlay("tab_list_remove", ::TabListRemoveS2CP, threadSafe = false) + registerPlay("tab_list", ::TabListS2CP, threadSafe = false) + registerPlay("tab_list_text", ::TabListTextS2CP, threadSafe = false) + + registerPlay("clear_title", ClearTitleS2CF, threadSafe = false) + registerPlay("hotbar_text", ::HotbarTextS2CP, threadSafe = false) + registerPlay("subtitle", ::SubtitleS2CP, threadSafe = false) + registerPlay("title", TitleS2CF, threadSafe = false) + registerPlay("title_text", ::TitleTextS2CP, threadSafe = false) + registerPlay("title_times", ::TitleTimesS2CP, threadSafe = false) + + registerPlay("difficulty", ::DifficultyS2CP) + registerPlay("explosion", ::ExplosionS2CP, lowPriority = true) + registerPlay("particle", ::ParticleS2CP) + registerPlay("time", ::TimeS2CP) + registerPlay("vibration", ::VibrationS2CP) + registerPlay("villager_trades", ::VillagerTradesS2CP) + registerPlay("world_event", ::WorldEventS2CP) + + registerPlay("bundle", ::BundleS2CP, threadSafe = false) + registerPlay("channel", { de.bixilon.minosoft.protocol.packets.s2c.play.ChannelS2CP(it) }, threadSafe = false) + registerPlay("features", ::FeaturesS2CP, threadSafe = false) + registerPlay("game_event", ::GameEventS2CP, threadSafe = false) + registerPlay("heartbeat", ::HeartbeatS2CP) + registerPlay("initialize", ::InitializeS2CP, threadSafe = false) + registerPlay("nbt_response", ::NbtResponseS2CP) + registerPlay("ping", ::PingS2CP) + registerPlay("play_status", ::PlayStatusS2CP) + registerPlay("resourcepack", ::ResourcepackS2CP) + registerPlay("respawn", ::RespawnS2CP, threadSafe = false) + registerPlay("statistics", ::StatisticsS2CP) + registerPlay("tags", ::TagsS2CP) + + registerPlay("kick", ::KickS2CP, threadSafe = false) + registerPlay("compression", ::CompressionS2CP, threadSafe = false) + }, + ) + + operator fun get(direction: PacketDirections) = when (direction) { + PacketDirections.CLIENT_TO_SERVER -> C2S + PacketDirections.SERVER_TO_CLIENT -> S2C + } +} diff --git a/src/main/java/de/bixilon/minosoft/protocol/PacketErrorHandler.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/registry/PacketExtraHandler.kt similarity index 64% rename from src/main/java/de/bixilon/minosoft/protocol/PacketErrorHandler.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/registry/PacketExtraHandler.kt index e3ad7d0f2..829c2bba9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/PacketErrorHandler.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/registry/PacketExtraHandler.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -11,11 +11,20 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol +package de.bixilon.minosoft.protocol.packets.registry import de.bixilon.minosoft.protocol.network.connection.Connection -interface PacketErrorHandler { +interface PacketExtraHandler { + fun skip(connection: Connection): Boolean = false + fun onError(error: Throwable, connection: Connection) = Unit - fun onError(error: Throwable, connection: Connection) + + object Disconnect : PacketExtraHandler { + + override fun onError(error: Throwable, connection: Connection) { + connection.error = error + connection.disconnect() + } + } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/registry/PacketMapping.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/registry/PacketMapping.kt new file mode 100644 index 000000000..598034307 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/registry/PacketMapping.kt @@ -0,0 +1,73 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.protocol.packets.registry + +import de.bixilon.kutil.primitive.IntUtil.toHex +import de.bixilon.minosoft.protocol.packets.types.Packet +import de.bixilon.minosoft.protocol.protocol.PacketDirections +import de.bixilon.minosoft.protocol.protocol.ProtocolStates +import it.unimi.dsi.fastutil.ints.Int2ObjectMap +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap +import it.unimi.dsi.fastutil.objects.Object2IntMap +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap +import java.util.* +import kotlin.reflect.KClass + +class PacketMapping(val direction: PacketDirections) { + private val packets: MutableMap = EnumMap(ProtocolStates::class.java) + + operator fun get(state: ProtocolStates, id: Int): PacketType? { + return packets[state]?.get(id) + } + + operator fun get(state: ProtocolStates, type: PacketType): Int { + val mapping = packets[state] ?: return INVALID_ID + return mapping[type] + } + + fun register(state: ProtocolStates, type: PacketType, id: Int) { + val mapping = packets.getOrPut(state) { StatePacketMapping() } + mapping.register(type, id) + } + + fun register(state: ProtocolStates, clazz: KClass, id: Int) { + register(state, DefaultPackets[direction][state]!![clazz], id) + } + + private inner class StatePacketMapping { + val type: Int2ObjectMap = Int2ObjectOpenHashMap() + val id: Object2IntMap = Object2IntOpenHashMap() + + init { + id.defaultReturnValue(INVALID_ID) + } + + operator fun get(type: PacketType): Int { + return this.id.getInt(type) + } + + operator fun get(id: Int): PacketType? { + return this.type.get(id) + } + + fun register(type: PacketType, id: Int) { + if (this.type.put(id, type) != null) throw IllegalArgumentException("Packet id duplicated: 0x${id.toHex()} (name=${type.name})") + if (this.id.put(type, id) != INVALID_ID) throw IllegalArgumentException("Packet type duplicated: $type") + } + } + + companion object { + const val INVALID_ID = -1 + } +} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/registry/PacketRegistry.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/registry/PacketRegistry.kt new file mode 100644 index 000000000..a3fc8c8f5 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/registry/PacketRegistry.kt @@ -0,0 +1,77 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.protocol.packets.registry + +import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.observer.ObserveUtil.jClass +import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.PacketNotFoundException +import de.bixilon.minosoft.protocol.packets.registry.factory.PacketFactory +import de.bixilon.minosoft.protocol.packets.registry.factory.PlayPacketFactory +import de.bixilon.minosoft.protocol.packets.types.Packet +import kotlin.jvm.internal.Reflection +import kotlin.reflect.KClass + +open class PacketRegistry( + val threadSafe: Boolean = true, + val extra: PacketExtraHandler? = null, +) { + private val name: MutableMap = hashMapOf() + private val clazz: MutableMap, PacketType> = hashMapOf() + + + fun register(name: String, clazz: KClass? = null, factory: PacketFactory? = null, threadSafe: Boolean = this.threadSafe, lowPriority: Boolean = false, extra: PacketExtraHandler? = this.extra): PacketRegistry { + /* + 3 cases: + - packet not registered before -> create packet type + - packet registered before (loop all parent classes and get packet type, store with current klass) + - packet is registered before (set factory) + */ + val nameType = this.name[name] + val type = clazz?.let { register(clazz) { nameType ?: PacketType(name, threadSafe, lowPriority, extra, null) } } ?: PacketType(name, threadSafe, lowPriority, extra, null) + + if (factory != null) { + if (type.factory != null) throw IllegalStateException("Ambiguous packet factory: $name") + type.factory = factory + } + + if (nameType == null) { + this.name[name] = type + } + + return this + } + + fun registerPlay(name: String, factory: PlayPacketFactory? = null, clazz: KClass? = null, threadSafe: Boolean = this.threadSafe, lowPriority: Boolean = false, extra: PacketExtraHandler? = this.extra): PacketRegistry { + return register(name, clazz, factory, threadSafe, lowPriority, extra) + } + + private fun register(clazz: KClass<*>, type: () -> PacketType): PacketType { + if (clazz == Any::class) return type.invoke() + this.clazz[clazz]?.let { return it } + + val superclass = Reflection.createKotlinClass(clazz.jClass.superclass) + val type = register(superclass, type) + this.clazz[clazz.unsafeCast()] = type + + return type + } + + operator fun get(clazz: KClass): PacketType { + return this.clazz[clazz] ?: throw PacketNotFoundException(clazz) + } + + operator fun get(name: String): PacketType? { + return this.name[name] + } +} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/registry/PacketType.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/registry/PacketType.kt new file mode 100644 index 000000000..d51b99c5e --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/registry/PacketType.kt @@ -0,0 +1,45 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.protocol.packets.registry + +import de.bixilon.minosoft.protocol.network.connection.Connection +import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection +import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.PacketBufferUnderflowException +import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.implementation.PacketNotImplementedException +import de.bixilon.minosoft.protocol.packets.registry.factory.PacketFactory +import de.bixilon.minosoft.protocol.packets.types.Packet +import de.bixilon.minosoft.protocol.protocol.buffers.InByteBuffer +import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer + +class PacketType( + val name: String, + val threadSafe: Boolean, + val lowPriority: Boolean, + val extra: PacketExtraHandler?, + var factory: PacketFactory?, +) { + + fun create(data: ByteArray, connection: Connection): Packet { + val factory = this.factory ?: throw PacketNotImplementedException(name, connection.network.state, connection.version) + + val buffer = if (connection is PlayConnection) PlayInByteBuffer(data, connection) else InByteBuffer(data) + val packet = factory.create(buffer) + + if (buffer.pointer < buffer.size) { + throw PacketBufferUnderflowException(this, buffer.size, buffer.size - buffer.pointer) + } + + return packet + } +} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/factories/PacketFactory.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/registry/factory/PacketFactory.kt similarity index 74% rename from src/main/java/de/bixilon/minosoft/protocol/packets/factory/factories/PacketFactory.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/registry/factory/PacketFactory.kt index 3a3351236..5c104950a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/factories/PacketFactory.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/registry/factory/PacketFactory.kt @@ -10,15 +10,12 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ +package de.bixilon.minosoft.protocol.packets.registry.factory -package de.bixilon.minosoft.protocol.packets.factory.factories - -import de.bixilon.minosoft.protocol.packets.Packet -import de.bixilon.minosoft.protocol.packets.factory.PacketDirection +import de.bixilon.minosoft.protocol.packets.types.Packet import de.bixilon.minosoft.protocol.protocol.buffers.InByteBuffer -interface PacketFactory { - val direction: PacketDirection +fun interface PacketFactory { - fun createPacket(buffer: InByteBuffer): Packet + fun create(buffer: InByteBuffer): Packet } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/factories/PlayPacketFactory.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/registry/factory/PlayPacketFactory.kt similarity index 69% rename from src/main/java/de/bixilon/minosoft/protocol/packets/factory/factories/PlayPacketFactory.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/registry/factory/PlayPacketFactory.kt index a70a49aed..6755fd218 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/factories/PlayPacketFactory.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/registry/factory/PlayPacketFactory.kt @@ -10,17 +10,17 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ +package de.bixilon.minosoft.protocol.packets.registry.factory -package de.bixilon.minosoft.protocol.packets.factory.factories - -import de.bixilon.kutil.cast.CastUtil.unsafeCast -import de.bixilon.minosoft.protocol.packets.Packet +import de.bixilon.minosoft.protocol.packets.types.Packet import de.bixilon.minosoft.protocol.protocol.buffers.InByteBuffer import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer -interface PlayPacketFactory : PacketFactory { +fun interface PlayPacketFactory : PacketFactory { + override fun create(buffer: InByteBuffer): Packet { + if (buffer !is PlayInByteBuffer) throw IllegalStateException("Must be a PlayInByteBuffer") + return create(buffer) + } - override fun createPacket(buffer: InByteBuffer) = createPacket(buffer.unsafeCast()) - - fun createPacket(buffer: PlayInByteBuffer): Packet + fun create(buffer: PlayInByteBuffer): Packet } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/PlayS2CPacket.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/PlayS2CPacket.kt index fdc826e48..44a21448c 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/PlayS2CPacket.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/PlayS2CPacket.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2021 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -12,11 +12,19 @@ */ package de.bixilon.minosoft.protocol.packets.s2c +import de.bixilon.minosoft.protocol.network.connection.Connection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection +import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.WrongConnectionException interface PlayS2CPacket : S2CPacket { fun handle(connection: PlayConnection) = Unit fun check(connection: PlayConnection) = Unit + + override fun handle(connection: Connection) { + if (connection !is PlayConnection) throw WrongConnectionException(PlayConnection::class.java, connection::class.java) + check(connection) + handle(connection) + } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/S2CPacket.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/S2CPacket.kt index 062b7ee5d..daacf3e64 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/S2CPacket.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/S2CPacket.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2021 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -12,6 +12,7 @@ */ package de.bixilon.minosoft.protocol.packets.s2c -import de.bixilon.minosoft.protocol.packets.Packet +import de.bixilon.minosoft.protocol.packets.types.HandleablePacket +import de.bixilon.minosoft.protocol.packets.types.Packet -interface S2CPacket : Packet +interface S2CPacket : Packet, HandleablePacket diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/StatusS2CPacket.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/StatusS2CPacket.kt index 88bcc1b8f..514d09bb3 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/StatusS2CPacket.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/StatusS2CPacket.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2021 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -12,11 +12,22 @@ */ package de.bixilon.minosoft.protocol.packets.s2c +import de.bixilon.minosoft.protocol.network.connection.Connection +import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.status.StatusConnection +import de.bixilon.minosoft.protocol.network.network.client.netty.exceptions.WrongConnectionException +import de.bixilon.minosoft.protocol.packets.types.HandleablePacket -interface StatusS2CPacket : S2CPacket { +interface StatusS2CPacket : S2CPacket, HandleablePacket { fun handle(connection: StatusConnection) = Unit fun check(connection: StatusConnection) = Unit + + + override fun handle(connection: Connection) { + if (connection !is StatusConnection) throw WrongConnectionException(PlayConnection::class.java, connection::class.java) + check(connection) + handle(connection) + } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/CompressionS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/general/CompressionS2CP.kt similarity index 72% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/CompressionS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/general/CompressionS2CP.kt index b3975c230..2b2d66b96 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/CompressionS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/general/CompressionS2CP.kt @@ -10,19 +10,22 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.login +package de.bixilon.minosoft.protocol.packets.s2c.general -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.packets.s2c.interfaces.CompressionS2CP -import de.bixilon.minosoft.protocol.protocol.ProtocolStates +import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection +import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(state = ProtocolStates.LOGIN, threadSafe = false) -class CompressionS2CP(buffer: PlayInByteBuffer) : CompressionS2CP { - override val threshold: Int = buffer.readVarInt() +class CompressionS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { + val threshold: Int = buffer.readVarInt() + + + override fun handle(connection: PlayConnection) { + connection.network.compressionThreshold = threshold + } override fun log(reducedLog: Boolean) { Log.log(LogMessageType.NETWORK_IN, level = LogLevels.VERBOSE) { "Compression (threshold=$threshold)" } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/KickS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/general/KickS2CP.kt similarity index 81% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/KickS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/general/KickS2CP.kt index d51db1f35..30d2f3031 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/KickS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/general/KickS2CP.kt @@ -10,20 +10,19 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.general import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.modding.event.events.KickEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket +import de.bixilon.minosoft.protocol.protocol.ProtocolStates import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class KickS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val reason: ChatComponent = buffer.readChatComponent() @@ -31,14 +30,18 @@ class KickS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { if (!connection.network.connected) { return // already disconnected, maybe timed out? } - connection.events.fire(KickEvent(connection, this)) + connection.events.fire(KickEvent(connection, reason)) // got kicked connection.network.disconnect() - connection.state = PlayConnectionStates.KICKED + if (connection.network.state == ProtocolStates.LOGIN) { + connection.state = PlayConnectionStates.ERROR + } else { + connection.state = PlayConnectionStates.KICKED + } Log.log(LogMessageType.NETWORK, LogLevels.WARN) { "Kicked from ${connection.address}: $reason" } } override fun log(reducedLog: Boolean) { - Log.log(LogMessageType.NETWORK_IN, level = LogLevels.VERBOSE) { "Kick (reason=$reason)" } + Log.log(LogMessageType.NETWORK_IN, level = LogLevels.VERBOSE) { "Login kick (reason=$reason)" } } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/interfaces/CompressionS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/interfaces/CompressionS2CP.kt deleted file mode 100644 index df439004d..000000000 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/interfaces/CompressionS2CP.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ -package de.bixilon.minosoft.protocol.packets.s2c.interfaces - -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket - -interface CompressionS2CP : PlayS2CPacket { - val threshold: Int - - override fun handle(connection: PlayConnection) { - connection.network.compressionThreshold = threshold - } -} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/ChannelS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/ChannelS2CP.kt index 389a85eb1..15ccefe63 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/ChannelS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/ChannelS2CP.kt @@ -13,15 +13,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.login import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket -import de.bixilon.minosoft.protocol.protocol.ProtocolStates import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(state = ProtocolStates.LOGIN, threadSafe = false) class ChannelS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val messageId = buffer.readVarInt() val channel = buffer.readResourceLocation() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/EncryptionS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/EncryptionS2CP.kt index 7690a8439..95cc59860 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/EncryptionS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/EncryptionS2CP.kt @@ -14,13 +14,9 @@ package de.bixilon.minosoft.protocol.packets.s2c.login import com.google.common.primitives.Longs import de.bixilon.kutil.base64.Base64Util.toBase64 -import de.bixilon.minosoft.protocol.PacketErrorHandler -import de.bixilon.minosoft.protocol.network.connection.Connection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.packets.c2s.login.EncryptionC2SP -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket -import de.bixilon.minosoft.protocol.protocol.ProtocolStates import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.protocol.protocol.encryption.CryptManager import de.bixilon.minosoft.protocol.protocol.encryption.EncryptionSignatureData @@ -31,7 +27,6 @@ import java.math.BigInteger import java.security.SecureRandom import javax.crypto.Cipher -@LoadPacket(state = ProtocolStates.LOGIN, threadSafe = false) class EncryptionS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val serverId: String = buffer.readString() val publicKey: ByteArray = buffer.readByteArray() @@ -72,11 +67,4 @@ class EncryptionS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { override fun log(reducedLog: Boolean) { Log.log(LogMessageType.NETWORK_IN, level = LogLevels.VERBOSE) { "Encryption request (serverId=$serverId, publicKey=${publicKey.toBase64()}, nonce=${nonce.toBase64()})" } } - - companion object : PacketErrorHandler { - override fun onError(error: Throwable, connection: Connection) { - connection.error = error - connection.network.disconnect() - } - } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/KickS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/KickS2CP.kt deleted file mode 100644 index 8247094af..000000000 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/KickS2CP.kt +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Minosoft - * Copyright (C) 2020-2023 Moritz Zwerger - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ -package de.bixilon.minosoft.protocol.packets.s2c.login - -import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.modding.event.events.LoginKickEvent -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket -import de.bixilon.minosoft.protocol.protocol.ProtocolStates -import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer -import de.bixilon.minosoft.util.logging.Log -import de.bixilon.minosoft.util.logging.LogLevels -import de.bixilon.minosoft.util.logging.LogMessageType - -@LoadPacket(state = ProtocolStates.LOGIN, threadSafe = false) -class KickS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { - val reason: ChatComponent = buffer.readChatComponent() - - override fun handle(connection: PlayConnection) { - connection.events.fire(LoginKickEvent(connection, this)) - Log.log(LogMessageType.NETWORK, level = LogLevels.WARN) { "Kicked from ${connection.address}: $reason" } - connection.network.disconnect() - connection.state = PlayConnectionStates.ERROR - } - - override fun log(reducedLog: Boolean) { - Log.log(LogMessageType.NETWORK_IN, level = LogLevels.VERBOSE) { "Login kick (reason=$reason)" } - } -} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/SuccessS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/SuccessS2CP.kt index 35a214f2e..3c4d4b78f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/SuccessS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/login/SuccessS2CP.kt @@ -16,7 +16,6 @@ import de.bixilon.kutil.primitive.BooleanUtil.decide import de.bixilon.minosoft.data.entities.entities.player.properties.PlayerProperties import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolStates import de.bixilon.minosoft.protocol.protocol.ProtocolVersions @@ -26,7 +25,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.util.* -@LoadPacket(state = ProtocolStates.LOGIN, threadSafe = false) class SuccessS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val uuid: UUID = (buffer.versionId < ProtocolVersions.V_20W12A).decide({ buffer.readUUIDString() }, { buffer.readUUID() }) val name: String = buffer.readString() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/BundleS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/BundleS2CP.kt index c2db21bf8..b9221e669 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/BundleS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/BundleS2CP.kt @@ -13,14 +13,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class BundleS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { override fun log(reducedLog: Boolean) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ChannelS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ChannelS2CP.kt index d8da46177..8a012cd3c 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ChannelS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ChannelS2CP.kt @@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -22,7 +21,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ChannelS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val channel: ResourceLocation = buffer.readResourceLocation() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/CompressionS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/CompressionS2CP.kt deleted file mode 100644 index 74720a202..000000000 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/CompressionS2CP.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Minosoft - * Copyright (C) 2020-2023 Moritz Zwerger - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ -package de.bixilon.minosoft.protocol.packets.s2c.play - -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.packets.s2c.interfaces.CompressionS2CP -import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer -import de.bixilon.minosoft.util.logging.Log -import de.bixilon.minosoft.util.logging.LogLevels -import de.bixilon.minosoft.util.logging.LogMessageType - -@LoadPacket(threadSafe = false) -class CompressionS2CP(buffer: PlayInByteBuffer) : CompressionS2CP { - override val threshold: Int = buffer.readVarInt() - - override fun log(reducedLog: Boolean) { - Log.log(LogMessageType.NETWORK_IN, level = LogLevels.VERBOSE) { "Compression set (threshold=$threshold)" } - } -} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/FeaturesS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/FeaturesS2CP.kt index 1dd7e7b41..764a7abaf 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/FeaturesS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/FeaturesS2CP.kt @@ -12,14 +12,12 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.play -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class FeaturesS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val features = buffer.readArray { buffer.readResourceLocation() }.toSet() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/GameEventS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/GameEventS2CP.kt index 5ce03380f..398ab7bf5 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/GameEventS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/GameEventS2CP.kt @@ -15,14 +15,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play import de.bixilon.minosoft.data.registries.misc.event.game.DefaultGameEventHandlers import de.bixilon.minosoft.modding.event.events.GameEventChangeEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class GameEventS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val event = buffer.connection.registries.gameEvent[buffer.readUnsignedByte()] val data: Float = buffer.readFloat() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/HeartbeatS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/HeartbeatS2CP.kt index d9815da16..b7d489443 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/HeartbeatS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/HeartbeatS2CP.kt @@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.packets.c2s.play.HeartbeatC2SP -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -23,7 +22,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class HeartbeatS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { var id: Long = when { buffer.versionId < ProtocolVersions.V_14W31A -> { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/InitializeS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/InitializeS2CP.kt index 08721a92f..af2e703ff 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/InitializeS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/InitializeS2CP.kt @@ -24,12 +24,9 @@ import de.bixilon.minosoft.data.world.biome.accessor.NoiseBiomeAccessor import de.bixilon.minosoft.data.world.difficulty.Difficulties import de.bixilon.minosoft.modding.event.events.DimensionChangeEvent import de.bixilon.minosoft.modding.event.events.EntitySpawnEvent -import de.bixilon.minosoft.protocol.PacketErrorHandler -import de.bixilon.minosoft.protocol.network.connection.Connection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates import de.bixilon.minosoft.protocol.network.connection.play.channel.vanila.BrandHandler.sendBrand -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_20W27A @@ -38,7 +35,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class InitializeS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int val isHardcore: Boolean @@ -188,6 +184,7 @@ class InitializeS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { Log.log(LogMessageType.NETWORK_IN, level = LogLevels.VERBOSE) { "Initialize (entityId=$entityId, gamemode=$gamemode, dimension=$dimension, difficulty=$difficulty, hardcore=$isHardcore, viewDistance=$viewDistance)" } } + /* companion object : PacketErrorHandler { override fun onError(error: Throwable, connection: Connection) { @@ -195,4 +192,6 @@ class InitializeS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { connection.network.disconnect() } } + + */ } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/NbtResponseS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/NbtResponseS2CP.kt index 37be77471..c8e8121d5 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/NbtResponseS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/NbtResponseS2CP.kt @@ -13,14 +13,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play import de.bixilon.kutil.json.JsonUtil.asJsonObject -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class NbtResponseS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val transactionId: Int = buffer.readVarInt() val nbt: Map = buffer.readNBT().asJsonObject() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PingS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PingS2CP.kt index f7a1ca1ba..78afc6472 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PingS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PingS2CP.kt @@ -15,14 +15,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.packets.c2s.play.PongC2SP -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class PingS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val payload = buffer.readInt() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PlayStatusS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PlayStatusS2CP.kt index a862ae245..de7bc2ae9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PlayStatusS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PlayStatusS2CP.kt @@ -13,7 +13,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play import de.bixilon.kutil.image.ImageEncodingUtil.toFavicon -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -21,7 +20,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class PlayStatusS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val motd = if (buffer.versionId >= ProtocolVersions.V_23W07A) buffer.readChatComponent() else buffer.readOptional { buffer.readChatComponent() } val favicon = if (buffer.versionId >= ProtocolVersions.V_23W07A) buffer.readOptional { buffer.readByteArray() } else buffer.readOptional { buffer.readString().toFavicon() } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ResourcepackS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ResourcepackS2CP.kt index f00646511..16b23c486 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ResourcepackS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ResourcepackS2CP.kt @@ -18,7 +18,6 @@ import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.modding.event.events.ResourcePackRequestEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.packets.c2s.play.ResourcepackC2SP -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -26,7 +25,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ResourcepackS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val url: String = buffer.readString().apply { toURL().checkWeb() } val hash: String = buffer.readString() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/RespawnS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/RespawnS2CP.kt index c4358616f..94f272551 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/RespawnS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/RespawnS2CP.kt @@ -22,7 +22,6 @@ import de.bixilon.minosoft.data.world.difficulty.Difficulties import de.bixilon.minosoft.modding.event.events.DimensionChangeEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -30,7 +29,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class RespawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { var dimension: DimensionProperties private set diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/StatisticsS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/StatisticsS2CP.kt index b442ddb73..92f522264 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/StatisticsS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/StatisticsS2CP.kt @@ -15,7 +15,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play import de.bixilon.minosoft.data.registries.statistics.Statistic import de.bixilon.minosoft.data.registries.statistics.StatisticUnits -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_17W47A import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -23,7 +22,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class StatisticsS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val statistics: Map> diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/TagsS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/TagsS2CP.kt index bb48f7f71..914dccb30 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/TagsS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/TagsS2CP.kt @@ -21,7 +21,6 @@ import de.bixilon.minosoft.data.registries.item.items.Item import de.bixilon.minosoft.data.registries.registries.registry.Registry import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -38,7 +37,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet -@LoadPacket class TagsS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val tags: TagManager diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/advancement/AdvancementTabS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/advancement/AdvancementTabS2CP.kt index 207542166..fd8709e55 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/advancement/AdvancementTabS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/advancement/AdvancementTabS2CP.kt @@ -13,14 +13,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.advancement -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class AdvancementTabS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val tab = buffer.readOptional { buffer.readResourceLocation() } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/advancement/AdvancementsS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/advancement/AdvancementsS2CP.kt index c56d813f1..3da244214 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/advancement/AdvancementsS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/advancement/AdvancementsS2CP.kt @@ -19,7 +19,6 @@ import de.bixilon.minosoft.advancements.AdvancementDisplay import de.bixilon.minosoft.advancements.AdvancementFrames import de.bixilon.minosoft.advancements.AdvancementProgress import de.bixilon.minosoft.data.registries.identified.ResourceLocation -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_23W18A import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -27,7 +26,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class AdvancementsS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val reset = buffer.readBoolean() val advancements: Map diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockActionS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockActionS2CP.kt index 8f75b2f6a..ca7952f3a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockActionS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockActionS2CP.kt @@ -16,7 +16,6 @@ import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.minosoft.data.entities.block.BlockActionEntity import de.bixilon.minosoft.data.registries.blocks.types.Block import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -24,7 +23,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class BlockActionS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val position: Vec3i = if (buffer.versionId < ProtocolVersions.V_14W03B) { buffer.readShortBlockPosition() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockBreakAnimationS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockBreakAnimationS2CP.kt index 4915a2041..b458efc08 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockBreakAnimationS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockBreakAnimationS2CP.kt @@ -15,7 +15,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.block import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.minosoft.modding.event.events.BlockBreakAnimationEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -23,7 +22,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class BlockBreakAnimationS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { /** * Entity id of the entity who is breaking the block diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockBreakS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockBreakS2CP.kt index 5e4b1faf0..1f8ef8aa4 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockBreakS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockBreakS2CP.kt @@ -12,14 +12,12 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.play.block -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class BlockBreakS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val sequence = buffer.readVarInt() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockDataS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockDataS2CP.kt index 2204258c6..3e1b9684c 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockDataS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockDataS2CP.kt @@ -19,7 +19,6 @@ import de.bixilon.minosoft.data.world.chunk.update.block.SingleBlockDataUpdate import de.bixilon.minosoft.data.world.positions.ChunkPositionUtil.chunkPosition import de.bixilon.minosoft.data.world.positions.ChunkPositionUtil.inChunkPosition import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_21W37A @@ -28,7 +27,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class BlockDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val position: Vec3i = if (buffer.versionId < ProtocolVersions.V_14W03B) { buffer.readShortBlockPosition() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockS2CP.kt index 6acabf79d..9128d629e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockS2CP.kt @@ -17,7 +17,6 @@ import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.minosoft.data.registries.blocks.state.BlockState import de.bixilon.minosoft.input.interaction.breaking.executor.SequencedExecutor import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -25,7 +24,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class BlockS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val position: Vec3i val state: BlockState? diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlocksS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlocksS2CP.kt index 5c3c4af35..ecf1ff354 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlocksS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlocksS2CP.kt @@ -19,7 +19,6 @@ import de.bixilon.kutil.array.ArrayUtil.cast import de.bixilon.minosoft.data.world.chunk.update.block.ChunkLocalBlockUpdate import de.bixilon.minosoft.data.world.positions.ChunkPosition import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.protocol.protocol.ProtocolVersions @@ -28,7 +27,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class BlocksS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val chunkPosition: ChunkPosition val update: Array diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/LegacyBlockBreakS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/LegacyBlockBreakS2CP.kt index d252125a0..417b7bcc3 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/LegacyBlockBreakS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/LegacyBlockBreakS2CP.kt @@ -16,15 +16,13 @@ import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.minosoft.data.registries.blocks.state.BlockState import de.bixilon.minosoft.input.interaction.breaking.executor.LegacyExecutor import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.c2s.play.PlayerActionC2SP.Actions -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.PlayerActionC2SP.Actions import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class LegacyBlockBreakS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val position: Vec3i = buffer.readBlockPosition() val state: BlockState? = buffer.connection.registries.blockState.getOrNull(buffer.readVarInt()) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkAction.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkAction.kt similarity index 92% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkAction.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkAction.kt index 262854423..d69316de4 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkAction.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkAction.kt @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play.chunk +package de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk enum class ChunkAction { UPDATE, diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkBiomeS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkBiomeS2CP.kt similarity index 92% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkBiomeS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkBiomeS2CP.kt index 14503251a..cb590143f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkBiomeS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkBiomeS2CP.kt @@ -10,17 +10,15 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play.chunk +package de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk import de.bixilon.kotlinglm.vec2.Vec2i -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ChunkBiomeS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val data = buffer.readArray { ChunkBiomeData(buffer.readLongChunkPosition(), buffer.readByteArray()) } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkCenterS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkCenterS2CP.kt similarity index 91% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkCenterS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkCenterS2CP.kt index 622ac0016..18244e87d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkCenterS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkCenterS2CP.kt @@ -10,17 +10,15 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play.chunk +package de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk import de.bixilon.minosoft.data.world.positions.ChunkPosition -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ChunkCenterS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { private val position = ChunkPosition(buffer.readVarInt(), buffer.readVarInt()) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkLightS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkLightS2CP.kt similarity index 84% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkLightS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkLightS2CP.kt index b77307892..d734ac900 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkLightS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkLightS2CP.kt @@ -10,16 +10,15 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play.chunk +package de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk import de.bixilon.kotlinglm.vec2.Vec2i import de.bixilon.minosoft.config.StaticConfiguration import de.bixilon.minosoft.data.world.chunk.chunk.ChunkPrototype -import de.bixilon.minosoft.protocol.PacketSkipper import de.bixilon.minosoft.protocol.network.connection.Connection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket +import de.bixilon.minosoft.protocol.packets.registry.PacketExtraHandler import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -28,9 +27,7 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(lowPriority = true) -// @JvmOverloads for reflection by packet registry -class ChunkLightS2CP @JvmOverloads constructor( +class ChunkLightS2CP( buffer: PlayInByteBuffer, val position: Vec2i = Vec2i(buffer.readVarInt(), buffer.readVarInt()), ) : PlayS2CPacket { @@ -62,10 +59,8 @@ class ChunkLightS2CP @JvmOverloads constructor( connection.world.chunks[position] = this.prototype } - companion object : PacketSkipper { + companion object : PacketExtraHandler { - override fun canSkip(connection: Connection): Boolean { - return StaticConfiguration.IGNORE_SERVER_LIGHT - } + override fun skip(connection: Connection) = StaticConfiguration.IGNORE_SERVER_LIGHT } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkS2CP.kt similarity index 98% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkS2CP.kt index e7b07297f..a3f812779 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkS2CP.kt @@ -10,7 +10,7 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play.chunk +package de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk import de.bixilon.kotlinglm.vec2.Vec2i import de.bixilon.kotlinglm.vec3.Vec3i @@ -29,7 +29,6 @@ import de.bixilon.minosoft.datafixer.rls.BlockEntityFixer.fix import de.bixilon.minosoft.gui.rendering.util.VecUtil.of import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.EMPTY import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.protocol.protocol.ProtocolVersions @@ -52,7 +51,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.util.* -@LoadPacket(lowPriority = true) class ChunkS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val position: Vec2i val prototype: ChunkPrototype = ChunkPrototype() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunksS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunksS2CP.kt similarity index 96% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunksS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunksS2CP.kt index a98adbaac..9ef0d7ccc 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunksS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunksS2CP.kt @@ -10,13 +10,12 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play.chunk +package de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk import de.bixilon.kotlinglm.vec2.Vec2i import de.bixilon.kutil.compression.zlib.ZlibUtil.decompress import de.bixilon.minosoft.data.world.chunk.chunk.ChunkPrototype import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -26,7 +25,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.util.* -@LoadPacket(lowPriority = true) class ChunksS2CP : PlayS2CPacket { val chunks: MutableMap = mutableMapOf() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/SimulationDistanceS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/SimulationDistanceS2CP.kt similarity index 92% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/SimulationDistanceS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/SimulationDistanceS2CP.kt index 28e075e83..49e4115fa 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/SimulationDistanceS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/SimulationDistanceS2CP.kt @@ -10,17 +10,15 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class SimulationDistanceS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val simulationDistance: Int = buffer.readVarInt() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/UnloadChunkS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/UnloadChunkS2CP.kt similarity index 92% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/UnloadChunkS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/UnloadChunkS2CP.kt index 4a39aec81..22e98c080 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/UnloadChunkS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/UnloadChunkS2CP.kt @@ -10,18 +10,16 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play.chunk +package de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk import de.bixilon.minosoft.data.world.positions.ChunkPosition import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class UnloadChunkS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val position: ChunkPosition = buffer.readChunkPosition() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ViewDistanceS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ViewDistanceS2CP.kt similarity index 92% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ViewDistanceS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ViewDistanceS2CP.kt index 9058bf6b5..bda215ca0 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ViewDistanceS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ViewDistanceS2CP.kt @@ -10,17 +10,15 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play.chunk +package de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ViewDistanceS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val viewDistance: Int = buffer.readVarInt() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/CenterWorldBorderS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/CenterWorldBorderS2CP.kt index 446a7f885..2e6b1d3fe 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/CenterWorldBorderS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/CenterWorldBorderS2CP.kt @@ -14,13 +14,11 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.border import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class CenterWorldBorderS2CP(buffer: PlayInByteBuffer) : WorldBorderS2CP { val center = buffer.readVec2d() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/InitializeWorldBorderS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/InitializeWorldBorderS2CP.kt index d5dc7d5e3..cf8e9740a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/InitializeWorldBorderS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/InitializeWorldBorderS2CP.kt @@ -14,13 +14,11 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.border import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class InitializeWorldBorderS2CP(buffer: PlayInByteBuffer) : WorldBorderS2CP { val center = buffer.readVec2d() val oldRadius = buffer.readDouble() / 2.0 diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/InterpolateWorldBorderS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/InterpolateWorldBorderS2CP.kt index 4fae6aa21..940d414ab 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/InterpolateWorldBorderS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/InterpolateWorldBorderS2CP.kt @@ -14,13 +14,11 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.border import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class InterpolateWorldBorderS2CP(buffer: PlayInByteBuffer) : WorldBorderS2CP { val oldRadius = buffer.readDouble() / 2.0 val newRadius = buffer.readDouble() / 2.0 diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/SizeWorldBorderS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/SizeWorldBorderS2CP.kt index 97f27c065..fb54aa7b2 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/SizeWorldBorderS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/SizeWorldBorderS2CP.kt @@ -15,13 +15,11 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.border import de.bixilon.minosoft.data.world.border.area.StaticBorderArea import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class SizeWorldBorderS2CP(buffer: PlayInByteBuffer) : WorldBorderS2CP { val radius = buffer.readDouble() / 2.0 diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/WarnBlocksWorldBorderS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/WarnBlocksWorldBorderS2CP.kt index 57805d275..3662f5be9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/WarnBlocksWorldBorderS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/WarnBlocksWorldBorderS2CP.kt @@ -14,13 +14,11 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.border import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class WarnBlocksWorldBorderS2CP(buffer: PlayInByteBuffer) : WorldBorderS2CP { val warningBlocks = buffer.readVarInt() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/WarnTimeWorldBorderS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/WarnTimeWorldBorderS2CP.kt index 0dd82640d..668c94798 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/WarnTimeWorldBorderS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/WarnTimeWorldBorderS2CP.kt @@ -14,14 +14,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.border import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class WarnTimeWorldBorderS2CP(buffer: PlayInByteBuffer) : WorldBorderS2CP { val warningTime = buffer.readVarInt() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/WorldBorderS2CF.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/WorldBorderS2CF.kt index 28fe08cce..d3dd4db1b 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/WorldBorderS2CF.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/border/WorldBorderS2CF.kt @@ -15,18 +15,14 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.border import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.packets.factory.PacketDirection -import de.bixilon.minosoft.protocol.packets.factory.factories.PlayPacketFactory +import de.bixilon.minosoft.protocol.packets.registry.factory.PlayPacketFactory import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer -@LoadPacket object WorldBorderS2CF : PlayPacketFactory { - override val direction = PacketDirection.SERVER_TO_CLIENT // this function was signed by Maximilian Rosenmüller // and that means A LOT! - override fun createPacket(buffer: PlayInByteBuffer): WorldBorderS2CP { + override fun create(buffer: PlayInByteBuffer): WorldBorderS2CP { return when (WorldBorderActions[buffer.readVarInt()]) { WorldBorderActions.SET_SIZE -> SizeWorldBorderS2CP(buffer) WorldBorderActions.INTERPOLATE_SIZE -> InterpolateWorldBorderS2CP(buffer) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/bossbar/BossbarS2CF.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/bossbar/BossbarS2CF.kt index c1e74c299..604ed60a4 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/bossbar/BossbarS2CF.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/bossbar/BossbarS2CF.kt @@ -15,16 +15,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.bossbar import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.packets.factory.PacketDirection -import de.bixilon.minosoft.protocol.packets.factory.factories.PlayPacketFactory +import de.bixilon.minosoft.protocol.packets.registry.factory.PlayPacketFactory import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer -@LoadPacket(threadSafe = false) object BossbarS2CF : PlayPacketFactory { - override val direction = PacketDirection.SERVER_TO_CLIENT - override fun createPacket(buffer: PlayInByteBuffer): BossbarS2CP { + override fun create(buffer: PlayInByteBuffer): BossbarS2CP { val uuid = buffer.readUUID() return when (BossbarActions[buffer.readVarInt()]) { BossbarActions.ADD -> AddBossbarS2CP(uuid, buffer) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/ChatMessageS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/ChatMessageS2CP.kt index d8e0f7fb4..bdc2fe69a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/ChatMessageS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/ChatMessageS2CP.kt @@ -21,7 +21,6 @@ import de.bixilon.minosoft.data.registries.chat.ChatMessageType import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.modding.event.events.chat.ChatMessageEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.protocol.protocol.ProtocolVersions @@ -32,7 +31,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.util.* -@LoadPacket(threadSafe = false) class ChatMessageS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val text: ChatComponent = buffer.readChatComponent() var type: ChatMessageType = buffer.connection.registries.messageType[DefaultMessageTypes.CHAT]!! diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ChatPreviewS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/ChatPreviewS2CP.kt similarity index 91% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ChatPreviewS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/ChatPreviewS2CP.kt index 5b14f7d9d..0b087a20a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ChatPreviewS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/ChatPreviewS2CP.kt @@ -10,16 +10,14 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.chat -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ChatPreviewS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val id = buffer.readInt() val preview = buffer.readOptional { buffer.readChatComponent() } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/ChatSuggestionsS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/ChatSuggestionsS2CP.kt index 5fb01700c..95287921e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/ChatSuggestionsS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/ChatSuggestionsS2CP.kt @@ -14,14 +14,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.chat import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ChatSuggestionsS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val action = Actions[buffer.readVarInt()] val matches = buffer.readArray { buffer.readString() } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/CommandSuggestionsS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/CommandSuggestionsS2CP.kt index ef5ec8a59..b61f9a1b5 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/CommandSuggestionsS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/CommandSuggestionsS2CP.kt @@ -12,7 +12,6 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.play.chat -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -20,7 +19,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class CommandSuggestionsS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { var matches: Array = when { buffer.versionId < ProtocolVersions.V_14W33A -> { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/CommandsS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/CommandsS2CP.kt similarity index 96% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/CommandsS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/CommandsS2CP.kt index 6ed49357d..44292c0e7 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/CommandsS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/CommandsS2CP.kt @@ -10,7 +10,7 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.chat import de.bixilon.kutil.bit.BitByte.isBitMask import de.bixilon.kutil.cast.CastUtil.nullCast @@ -25,7 +25,6 @@ import de.bixilon.minosoft.commands.parser.factory.ArgumentParserFactories import de.bixilon.minosoft.commands.parser.minosoft.dummy.DummyParser import de.bixilon.minosoft.commands.suggestion.factory.SuggestionFactories import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -33,7 +32,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = true) class CommandsS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val nodes = buffer.readArray { buffer.readCommandNode() }.build() val rootNode = nodes[buffer.readVarInt()].nullCast() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/HideMessageS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/HideMessageS2CP.kt index 732a0c10d..de673ad02 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/HideMessageS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/HideMessageS2CP.kt @@ -12,7 +12,6 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.play.chat -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -20,7 +19,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class HideMessageS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val id = if (buffer.versionId >= ProtocolVersions.V_22W42A) buffer.readVarInt() - 1 else -1 val signature = if (buffer.versionId < ProtocolVersions.V_22W42A || id >= 0) buffer.readSignatureData() else null diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/MessageHeaderS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/MessageHeaderS2CP.kt index 691a064d1..41e261002 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/MessageHeaderS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/MessageHeaderS2CP.kt @@ -12,14 +12,12 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.play.chat -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class MessageHeaderS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val header = buffer.readMessageHeader() val signature = buffer.readByteArray() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/SignedChatMessageS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/SignedChatMessageS2CP.kt index d0eb24e3d..71649fc9e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/SignedChatMessageS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/SignedChatMessageS2CP.kt @@ -24,7 +24,6 @@ import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.data.text.TextComponent import de.bixilon.minosoft.modding.event.events.chat.ChatMessageEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ChatMessageSender import de.bixilon.minosoft.protocol.protocol.ProtocolVersions @@ -35,7 +34,6 @@ import de.bixilon.minosoft.util.logging.LogMessageType import java.time.Instant import java.util.* -@LoadPacket(threadSafe = false) class SignedChatMessageS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val message = buffer.readSignedMessage() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/TemporaryChatPreview.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/TemporaryChatPreviewS2CP.kt similarity index 86% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/TemporaryChatPreview.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/TemporaryChatPreviewS2CP.kt index b2dc66964..7b27f12ef 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/TemporaryChatPreview.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/TemporaryChatPreviewS2CP.kt @@ -10,17 +10,15 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.chat -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket -class TemporaryChatPreview(buffer: PlayInByteBuffer) : PlayS2CPacket { +class TemporaryChatPreviewS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val enabled = buffer.readBoolean() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/UnsignedChatMessageS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/UnsignedChatMessageS2CP.kt index 38b0bf373..6ec2d2c1c 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/UnsignedChatMessageS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/UnsignedChatMessageS2CP.kt @@ -17,14 +17,12 @@ import de.bixilon.minosoft.data.registries.chat.ChatParameter import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.modding.event.events.chat.ChatMessageEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class UnsignedChatMessageS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val text: ChatComponent = buffer.readChatComponent() val type = buffer.readRegistryItem(buffer.connection.registries.messageType) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/CombatEventS2CF.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/CombatEventS2CF.kt index 01291efc3..f0dadb4e6 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/CombatEventS2CF.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/CombatEventS2CF.kt @@ -15,16 +15,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.combat import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.packets.factory.PacketDirection -import de.bixilon.minosoft.protocol.packets.factory.factories.PlayPacketFactory +import de.bixilon.minosoft.protocol.packets.registry.factory.PlayPacketFactory import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer -@LoadPacket object CombatEventS2CF : PlayPacketFactory { - override val direction = PacketDirection.SERVER_TO_CLIENT - override fun createPacket(buffer: PlayInByteBuffer): CombatEventS2CP { + override fun create(buffer: PlayInByteBuffer): CombatEventS2CP { return when (CombatEvents[buffer.readVarInt()]) { CombatEvents.ENTER_COMBAT -> EnterCombatEventS2CP(buffer) CombatEvents.END_COMBAT -> EndCombatEventS2CP(buffer) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/EndCombatEventS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/EndCombatEventS2CP.kt index b8ded1dd1..d1c88f294 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/EndCombatEventS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/EndCombatEventS2CP.kt @@ -13,14 +13,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.combat -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_20_PRE3 import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class EndCombatEventS2CP(buffer: PlayInByteBuffer) : CombatEventS2CP { val duration = buffer.readVarInt() val entityId = if (buffer.versionId >= V_1_20_PRE3) -1 else buffer.readInt() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/EnterCombatEventS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/EnterCombatEventS2CP.kt index 526eccb54..bf6737ae0 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/EnterCombatEventS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/EnterCombatEventS2CP.kt @@ -13,13 +13,11 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.combat -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class EnterCombatEventS2CP(buffer: PlayInByteBuffer) : CombatEventS2CP { override fun log(reducedLog: Boolean) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/KillCombatEventS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/KillCombatEventS2CP.kt index cea0c697a..fc8d0b65b 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/KillCombatEventS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/combat/KillCombatEventS2CP.kt @@ -13,14 +13,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.combat -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_20_PRE3 import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true) class KillCombatEventS2CP(buffer: PlayInByteBuffer) : CombatEventS2CP { val deadEntityId = buffer.readVarInt() val killerEntityId = if (buffer.versionId >= V_1_20_PRE3) -1 else buffer.readInt() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/CloseContainerS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/CloseContainerS2CP.kt index f21f7d063..7c51e2a02 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/CloseContainerS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/CloseContainerS2CP.kt @@ -14,14 +14,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.container import de.bixilon.minosoft.data.container.types.PlayerInventory import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class CloseContainerS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val containerId: Int = buffer.readUnsignedByte() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerActionS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerActionS2CP.kt index 543e8e265..f81000c27 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerActionS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerActionS2CP.kt @@ -13,14 +13,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.container import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ContainerActionS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val containerId = buffer.readUnsignedByte() val actionId = buffer.readUnsignedShort() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerItemS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerItemS2CP.kt index efef5c104..d14ddd9cf 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerItemS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerItemS2CP.kt @@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.container import de.bixilon.minosoft.data.container.IncompleteContainer import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_17_1_PRE1 import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -22,7 +21,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ContainerItemS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val containerId = buffer.readUnsignedByte() val revision: Int = if (buffer.versionId >= V_1_17_1_PRE1) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerItemsS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerItemsS2CP.kt index 4e61e08b9..234b96db2 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerItemsS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerItemsS2CP.kt @@ -16,7 +16,6 @@ import de.bixilon.minosoft.data.container.Container import de.bixilon.minosoft.data.container.IncompleteContainer import de.bixilon.minosoft.data.container.stack.ItemStack import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_17_1_PRE1 import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -25,7 +24,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.util.* -@LoadPacket class ContainerItemsS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val containerId = buffer.readUnsignedByte() val revision: Int = if (buffer.versionId >= V_1_17_1_PRE1) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerPropertiesS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerPropertiesS2CP.kt index 3721b8e82..3089b54e5 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerPropertiesS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/ContainerPropertiesS2CP.kt @@ -13,14 +13,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.container import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class ContainerPropertiesS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val containerId = buffer.readUnsignedByte() val property = buffer.readUnsignedShort() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/OpenContainerS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/OpenContainerS2CP.kt index 9eef37959..309a3c9a9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/OpenContainerS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/OpenContainerS2CP.kt @@ -18,7 +18,6 @@ import de.bixilon.minosoft.data.registries.containers.ContainerType import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.modding.event.events.container.ContainerOpenEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_14W03B import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_19W11A @@ -28,7 +27,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class OpenContainerS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val containerId = if (buffer.versionId <= V_1_14) { // ToDo: This is completely guessed, it has changed between 1.13 and 1.14, same as #L38 buffer.readUnsignedByte() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/OpenHorseContainerS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/OpenEntityContainerS2CP.kt similarity index 84% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/OpenHorseContainerS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/OpenEntityContainerS2CP.kt index 981f7f989..e1875e8d9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/OpenHorseContainerS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/container/OpenEntityContainerS2CP.kt @@ -10,18 +10,16 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.container import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket -class OpenHorseContainerS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { +class OpenEntityContainerS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val containerId = buffer.readUnsignedByte() val slotCount: Int = buffer.readVarInt() val entityId: Int = buffer.readInt() @@ -34,6 +32,6 @@ class OpenHorseContainerS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { } override fun log(reducedLog: Boolean) { - Log.log(LogMessageType.NETWORK_IN, LogLevels.VERBOSE) { "Open horse container (containerId=$containerId, slotCount=$slotCount, entityId=$entityId)" } + Log.log(LogMessageType.NETWORK_IN, LogLevels.VERBOSE) { "Open entity container (containerId=$containerId, slotCount=$slotCount, entityId=$entityId)" } } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/DamageTiltS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/DamageTiltS2CP.kt similarity index 93% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/DamageTiltS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/DamageTiltS2CP.kt index e4c2bd592..60d4a488d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/DamageTiltS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/DamageTiltS2CP.kt @@ -11,19 +11,17 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.entity import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.minosoft.gui.rendering.entity.models.DamageableModel import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class DamageTiltS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readVarInt() val yaw = buffer.readFloat() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityAnimationS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityAnimationS2CP.kt index f150a02dd..4367131a7 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityAnimationS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityAnimationS2CP.kt @@ -14,14 +14,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.entity import de.bixilon.minosoft.data.entities.EntityAnimations import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class EntityAnimationS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readVarInt() val animation: EntityAnimations = buffer.readEnum(buffer.connection.registries.entityAnimation)!! diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityAttributesS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityAttributesS2CP.kt index 1e83d26e5..45c36c009 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityAttributesS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityAttributesS2CP.kt @@ -21,7 +21,6 @@ import de.bixilon.minosoft.data.registries.effects.attributes.container.Attribut import de.bixilon.minosoft.data.registries.effects.attributes.container.AttributeModifier import de.bixilon.minosoft.datafixer.rls.EntityAttributeFixer.fix import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_14W04A import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_21W08A @@ -31,7 +30,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.util.* -@LoadPacket(threadSafe = false) class EntityAttributesS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readEntityId() val attributes: Map diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityCollectS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityCollectS2CP.kt index 4b6c46de9..c21b4c2d9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityCollectS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityCollectS2CP.kt @@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.entity import de.bixilon.minosoft.modding.event.events.CollectItemAnimationEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -22,7 +21,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class EntityCollectS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val itemEntityId: Int = buffer.readEntityId() var collectorEntityId: Int = if (buffer.versionId < ProtocolVersions.V_14W04A) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityDamageS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityDamageS2CP.kt index b3dd61cf5..3bad80bc2 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityDamageS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityDamageS2CP.kt @@ -13,14 +13,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.entity import de.bixilon.minosoft.data.registries.entities.damage.DamageType -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class EntityDamageS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readVarInt() val type: DamageType = buffer.readRegistryItem(buffer.connection.registries.damageType) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityDataS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityDataS2CP.kt index 9e1641947..ebb6c3a20 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityDataS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityDataS2CP.kt @@ -13,7 +13,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.entity import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log @@ -21,7 +20,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap -@LoadPacket(threadSafe = false) class EntityDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId = buffer.readEntityId() val data: Int2ObjectOpenHashMap = buffer.readEntityData() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityEquipmentS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityEquipmentS2CP.kt index 5c64ee27a..a75e3a712 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityEquipmentS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityEquipmentS2CP.kt @@ -17,7 +17,6 @@ import de.bixilon.minosoft.data.container.equipment.EquipmentSlots import de.bixilon.minosoft.data.container.stack.ItemStack import de.bixilon.minosoft.data.entities.entities.LivingEntity import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -25,7 +24,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class EntityEquipmentS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readEntityId() val equipment: Map diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityStatusS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityEventS2CP.kt similarity index 89% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityStatusS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityEventS2CP.kt index d69584e7f..bc7a05c26 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityStatusS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityEventS2CP.kt @@ -17,16 +17,13 @@ import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.entities.event.EntityEvent import de.bixilon.minosoft.data.entities.event.EntityEvents import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket -@Deprecated("Will be renamed to EntityEventS2CP") -class EntityStatusS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { +class EntityEventS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { private val entityId: Int = buffer.readInt() private val eventId: Int = buffer.readUnsignedByte() @@ -41,6 +38,6 @@ class EntityStatusS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { } override fun log(reducedLog: Boolean) { - Log.log(LogMessageType.NETWORK_IN, level = LogLevels.VERBOSE) { "Entity status (entityId=$entityId, event=$eventId)" } + Log.log(LogMessageType.NETWORK_IN, level = LogLevels.VERBOSE) { "Entity event (entityId=$entityId, event=$eventId)" } } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntitySleepS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntitySleepS2CP.kt index a09a763ca..59ea19a01 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntitySleepS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntitySleepS2CP.kt @@ -13,7 +13,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.entity import de.bixilon.kotlinglm.vec3.Vec3i -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -21,7 +20,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class EntitySleepS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readInt() val blockPosition: Vec3i = if (buffer.versionId < ProtocolVersions.V_14W04A) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/effect/EntityEffectS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/effect/EntityEffectS2CP.kt index e5b04044c..a895bdf8b 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/effect/EntityEffectS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/effect/EntityEffectS2CP.kt @@ -19,7 +19,6 @@ import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.minosoft.data.entities.StatusEffectInstance import de.bixilon.minosoft.data.entities.entities.LivingEntity import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_14W04A @@ -32,7 +31,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class EntityEffectS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readEntityId() var effect: StatusEffectInstance = buffer.readStatusEffectInstance() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/effect/EntityRemoveEffectS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/effect/EntityRemoveEffectS2CP.kt index f4916869a..2d63af48f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/effect/EntityRemoveEffectS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/effect/EntityRemoveEffectS2CP.kt @@ -16,7 +16,6 @@ import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.minosoft.data.entities.entities.LivingEntity import de.bixilon.minosoft.data.registries.effects.StatusEffectType import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -24,7 +23,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class EntityRemoveEffectS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readEntityId() val effect: StatusEffectType = buffer.connection.registries.statusEffect[if (buffer.versionId >= ProtocolVersions.V_1_18_2_PRE1) buffer.readVarInt() else buffer.readUnsignedByte()] diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/EmptyMoveS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/EmptyMoveS2CP.kt index a08cbba53..2ddf63abf 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/EmptyMoveS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/EmptyMoveS2CP.kt @@ -12,14 +12,12 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.play.entity.move -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class EmptyMoveS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readEntityId() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/HeadRotationS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/HeadRotationS2CP.kt index 8a4955e6f..873ef0dd4 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/HeadRotationS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/HeadRotationS2CP.kt @@ -13,14 +13,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.entity.move import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class HeadRotationS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readEntityId() val headYaw: Float = buffer.readAngle() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/MoveVehicleS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/MoveVehicleS2CP.kt similarity index 89% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/MoveVehicleS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/MoveVehicleS2CP.kt index ff467d564..bde7d34e2 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/MoveVehicleS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/MoveVehicleS2CP.kt @@ -10,20 +10,18 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.entity.move import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.minosoft.data.entities.EntityRotation import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.c2s.play.move.vehicle.MoveVehicleC2SP -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.vehicle.MoveVehicleC2SP import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class MoveVehicleS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val position: Vec3d = buffer.readVec3d() val yaw: Float = buffer.readFloat() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/MovementRotationS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/MovementRotationS2CP.kt index d2d73292d..cf8955d83 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/MovementRotationS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/MovementRotationS2CP.kt @@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.entity.move import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -22,7 +21,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class MovementRotationS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readEntityId() var delta: Vec3d = buffer.readPositionDelta() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PlayerFaceS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/PlayerFaceS2CP.kt similarity index 94% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PlayerFaceS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/PlayerFaceS2CP.kt index 9c23c5e6f..6e8c21f5e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PlayerFaceS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/PlayerFaceS2CP.kt @@ -10,19 +10,17 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.entity.move import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class PlayerFaceS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val face: PlayerFaces = PlayerFaces[buffer.readVarInt()] val position: Vec3d = buffer.readVec3d() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/PositionRotationS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/PositionRotationS2CP.kt index 8c17ea4d1..83ceba591 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/PositionRotationS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/PositionRotationS2CP.kt @@ -17,9 +17,8 @@ import de.bixilon.kutil.bit.BitByte.isBitMask import de.bixilon.minosoft.data.entities.EntityRotation import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates -import de.bixilon.minosoft.protocol.packets.c2s.play.move.ConfirmTeleportC2SP -import de.bixilon.minosoft.protocol.packets.c2s.play.move.PositionRotationC2SP -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.ConfirmTeleportC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.move.PositionRotationC2SP import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -27,7 +26,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class PositionRotationS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val position: Vec3d = buffer.readVec3d() val rotation: EntityRotation diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/RelativeMoveS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/RelativeMoveS2CP.kt index e84d42aba..8da5aa322 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/RelativeMoveS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/RelativeMoveS2CP.kt @@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.entity.move import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -22,7 +21,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class RelativeMoveS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readEntityId() val delta: Vec3d = buffer.readPositionDelta() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/RotationS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/RotationS2CP.kt index 20acd77ca..0bad75f18 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/RotationS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/RotationS2CP.kt @@ -13,7 +13,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.entity.move import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -21,7 +20,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class RotationS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readEntityId() val rotation = buffer.readEntityRotation() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/TeleportS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/TeleportS2CP.kt index ec174b4e6..ba9c19163 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/TeleportS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/TeleportS2CP.kt @@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.entity.move import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -22,7 +21,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class TeleportS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readEntityId() val position: Vec3d = if (buffer.versionId < ProtocolVersions.V_16W06A) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/VelocityS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/VelocityS2CP.kt index e6bb4d620..b1ce99985 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/VelocityS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/VelocityS2CP.kt @@ -14,14 +14,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.entity.move import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class VelocityS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readEntityId() val velocity: Vec3d = buffer.readVelocity() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/passenger/EntityAttachS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/passenger/EntityAttachS2CP.kt index 299f87ee6..a43bcd0b2 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/passenger/EntityAttachS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/passenger/EntityAttachS2CP.kt @@ -13,7 +13,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.entity.passenger import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -21,7 +20,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class EntityAttachS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readInt() val vehicle: Int = buffer.readInt() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/passenger/EntityPassengerS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/passenger/EntityPassengerS2CP.kt index 388d79c39..75ed20d0c 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/passenger/EntityPassengerS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/passenger/EntityPassengerS2CP.kt @@ -13,7 +13,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.entity.passenger import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.KUtil.entities @@ -22,7 +21,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import it.unimi.dsi.fastutil.ints.IntOpenHashSet -@LoadPacket(threadSafe = false) class EntityPassengerS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val vehicle: Int = buffer.readVarInt() val passengers: IntOpenHashSet = IntOpenHashSet(buffer.readVarIntArray()) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/CameraS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/CameraS2CP.kt similarity index 92% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/CameraS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/CameraS2CP.kt index 91409005b..db6544185 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/CameraS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/CameraS2CP.kt @@ -10,17 +10,15 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.entity.player import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class CameraS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readVarInt() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ExperienceS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/ExperienceS2CP.kt similarity index 94% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ExperienceS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/ExperienceS2CP.kt index 1aa6ddee5..702618ab3 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ExperienceS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/ExperienceS2CP.kt @@ -10,11 +10,10 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.entity.player import de.bixilon.minosoft.data.entities.entities.player.local.ExperienceCondition import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -22,7 +21,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ExperienceS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val bar = buffer.readFloat() val level: Int diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/HealthS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/HealthS2CP.kt similarity index 92% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/HealthS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/HealthS2CP.kt index 58dbef3dc..b902384bd 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/HealthS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/HealthS2CP.kt @@ -10,14 +10,13 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.entity.player import de.bixilon.kotlinglm.func.common.clamp import de.bixilon.minosoft.data.entities.entities.player.local.HealthCondition import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates -import de.bixilon.minosoft.protocol.packets.c2s.play.ClientActionC2SP -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket +import de.bixilon.minosoft.protocol.packets.c2s.play.entity.player.ClientActionC2SP import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -25,7 +24,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class HealthS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val hp: Float = buffer.readFloat() val hunger = if (buffer.versionId < ProtocolVersions.V_14W04A) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/HotbarSlotS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/HotbarSlotS2CP.kt similarity index 92% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/HotbarSlotS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/HotbarSlotS2CP.kt index 93d956039..dfecf70d5 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/HotbarSlotS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/HotbarSlotS2CP.kt @@ -10,18 +10,16 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.entity.player import de.bixilon.minosoft.data.container.types.PlayerInventory import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class HotbarSlotS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val slot: Int = buffer.readUnsignedByte() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PlayerAbilitiesS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/PlayerAbilitiesS2CP.kt similarity index 95% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PlayerAbilitiesS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/PlayerAbilitiesS2CP.kt index 0a12c04fc..67778f695 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/PlayerAbilitiesS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/PlayerAbilitiesS2CP.kt @@ -10,12 +10,11 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.entity.player import de.bixilon.kutil.bit.BitByte.isBit import de.bixilon.minosoft.data.entities.entities.player.local.Abilities import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -23,7 +22,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class PlayerAbilitiesS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val invulnerable: Boolean val flying: Boolean diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityDestroyS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityDestroyS2CP.kt index 2532e0ef2..7e67aa94a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityDestroyS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityDestroyS2CP.kt @@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.entity.spawn import de.bixilon.minosoft.modding.event.events.EntityDestroyEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_17_1_RC1 @@ -23,7 +22,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class EntityDestroyS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityIds: IntArray = if (buffer.versionId < ProtocolVersions.V_21W17A || buffer.versionId >= V_1_17_1_RC1) { buffer.readEntityIdArray( diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityExperienceOrbS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityExperienceOrbS2CP.kt index 7ba1cb0d2..6af11123d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityExperienceOrbS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityExperienceOrbS2CP.kt @@ -16,7 +16,6 @@ import de.bixilon.minosoft.data.entities.data.EntityData import de.bixilon.minosoft.data.entities.entities.ExperienceOrb import de.bixilon.minosoft.modding.event.events.EntitySpawnEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.KUtil.startInit @@ -24,7 +23,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class EntityExperienceOrbS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readEntityId() val entity: ExperienceOrb = ExperienceOrb( diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityMobSpawnS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityMobSpawnS2CP.kt index 32595c64b..6f2955a45 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityMobSpawnS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityMobSpawnS2CP.kt @@ -17,7 +17,6 @@ import de.bixilon.minosoft.data.entities.data.EntityData import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.modding.event.events.EntitySpawnEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -28,7 +27,6 @@ import de.bixilon.minosoft.util.logging.LogMessageType import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap import java.util.* -@LoadPacket(threadSafe = false) class EntityMobSpawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readEntityId() val entityUUID: UUID? = if (buffer.versionId >= ProtocolVersions.V_15W31A) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityObjectSpawnS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityObjectSpawnS2CP.kt index bb6757cbf..d2239d23d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityObjectSpawnS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityObjectSpawnS2CP.kt @@ -17,7 +17,6 @@ import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.registries.fallback.FallbackRegistries.ENTITY_OBJECT_REGISTRY import de.bixilon.minosoft.modding.event.events.EntitySpawnEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -27,7 +26,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.util.* -@LoadPacket(threadSafe = false) class EntityObjectSpawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readEntityId() var entityUUID: UUID? = null diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityPaintingS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityPaintingS2CP.kt index a3ee9d0fb..a3df8d4c4 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityPaintingS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityPaintingS2CP.kt @@ -19,7 +19,6 @@ import de.bixilon.minosoft.data.entities.entities.decoration.Painting import de.bixilon.minosoft.data.registries.Motif import de.bixilon.minosoft.modding.event.events.EntitySpawnEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -29,7 +28,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.util.* -@LoadPacket(threadSafe = false) class EntityPaintingS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { private val entityId: Int = buffer.readVarInt() private var entityUUID: UUID? = if (buffer.versionId >= ProtocolVersions.V_16W02A) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityPlayerS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityPlayerS2CP.kt similarity index 95% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityPlayerS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityPlayerS2CP.kt index 792a28e0e..57a28430b 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityPlayerS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityPlayerS2CP.kt @@ -10,7 +10,7 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play.entity +package de.bixilon.minosoft.protocol.packets.s2c.play.entity.spawn import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.minosoft.data.entities.data.EntityData @@ -20,7 +20,6 @@ import de.bixilon.minosoft.data.entities.entities.player.additional.PlayerAdditi import de.bixilon.minosoft.data.entities.entities.player.properties.PlayerProperties import de.bixilon.minosoft.modding.event.events.EntitySpawnEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -31,7 +30,6 @@ import de.bixilon.minosoft.util.logging.LogMessageType import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap import java.util.* -@LoadPacket(threadSafe = false) class EntityPlayerS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int val entityUUID: UUID diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/GlobalEntitySpawnS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/GlobalEntitySpawnS2CP.kt index 784812e0e..fbe4f9a82 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/GlobalEntitySpawnS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/GlobalEntitySpawnS2CP.kt @@ -17,7 +17,6 @@ import de.bixilon.minosoft.data.entities.data.EntityData import de.bixilon.minosoft.data.entities.entities.LightningBolt import de.bixilon.minosoft.modding.event.events.EntitySpawnEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.KUtil.startInit @@ -25,7 +24,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class GlobalEntitySpawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entityId: Int = buffer.readVarInt() val type = buffer.readByte() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/BookS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/item/BookS2CP.kt similarity index 91% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/BookS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/item/BookS2CP.kt index c6b62d118..e4f72edcb 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/BookS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/item/BookS2CP.kt @@ -10,17 +10,15 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.item import de.bixilon.minosoft.data.entities.entities.player.Hands -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class BookS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val hand: Hands = Hands[buffer.readVarInt()] diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/CompassPositionS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/item/CompassPositionS2CP.kt similarity index 93% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/CompassPositionS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/item/CompassPositionS2CP.kt index f34f8a7e3..99fc8612a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/CompassPositionS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/item/CompassPositionS2CP.kt @@ -10,12 +10,11 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.item import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.minosoft.data.entities.entities.player.compass.CompassPosition import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -23,7 +22,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class CompassPositionS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { var position: Vec3i = if (buffer.versionId < ProtocolVersions.V_14W03B) { buffer.readIntBlockPosition() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/CraftingRecipeS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/item/CraftingRecipeS2CP.kt similarity index 93% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/CraftingRecipeS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/item/CraftingRecipeS2CP.kt index 8a046f593..35bbd9916 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/CraftingRecipeS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/item/CraftingRecipeS2CP.kt @@ -10,9 +10,8 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.item -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -20,7 +19,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class CraftingRecipeS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val containerId = buffer.readUnsignedByte() var recipeId: Int? = null diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ItemCooldownS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/item/ItemCooldownS2CP.kt similarity index 93% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ItemCooldownS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/item/ItemCooldownS2CP.kt index 0773973ce..7745bfc87 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ItemCooldownS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/item/ItemCooldownS2CP.kt @@ -10,19 +10,17 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.item import de.bixilon.kutil.time.TimeUtil.millis import de.bixilon.minosoft.data.abilities.ItemCooldown import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ItemCooldownS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val item = buffer.readRegistryItem(buffer.connection.registries.item) val time = buffer.readVarInt() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/map/MapS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/map/MapS2CP.kt index 64c5ed64e..0c0e34b86 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/map/MapS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/map/MapS2CP.kt @@ -16,7 +16,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.map import de.bixilon.kotlinglm.vec2.Vec2i import de.bixilon.minosoft.data.world.map.MapPin import de.bixilon.minosoft.data.world.map.MapPinTypes -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_15W34A import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_18W19A @@ -28,7 +27,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class MapS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val id = buffer.readVarInt() val scale = buffer.readUnsignedByte() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/map/legacy/LegacyMapS2CF.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/map/legacy/LegacyMapS2CF.kt index 2c41cd655..bd29f0761 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/map/legacy/LegacyMapS2CF.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/map/legacy/LegacyMapS2CF.kt @@ -15,16 +15,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.map.legacy import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.packets.factory.PacketDirection -import de.bixilon.minosoft.protocol.packets.factory.factories.PlayPacketFactory +import de.bixilon.minosoft.protocol.packets.registry.factory.PlayPacketFactory import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer -@LoadPacket object LegacyMapS2CF : PlayPacketFactory { - override val direction = PacketDirection.SERVER_TO_CLIENT - override fun createPacket(buffer: PlayInByteBuffer): LegacyMapS2CP { + override fun create(buffer: PlayInByteBuffer): LegacyMapS2CP { val id = buffer.readVarInt() val length = buffer.readUnsignedShort() val action = Actions[buffer.readUnsignedByte()] diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/recipes/RecipesS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/recipes/RecipesS2CP.kt index 14d595b38..19ca83758 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/recipes/RecipesS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/recipes/RecipesS2CP.kt @@ -15,7 +15,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.recipes import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_19W03A import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -26,7 +25,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class RecipesS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val recipes: Map diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/recipes/UnlockRecipesS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/recipes/UnlockRecipesS2CP.kt index c9ff72dbb..21ed81daa 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/recipes/UnlockRecipesS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/recipes/UnlockRecipesS2CP.kt @@ -15,7 +15,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.recipes import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_17W48A import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_12 @@ -26,7 +25,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class UnlockRecipesS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val action = Actions[if (buffer.versionId < V_1_12) buffer.readInt() else buffer.readVarInt()] diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/ObjectivePositionS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/ObjectivePositionS2CP.kt index b0a1d5a89..876358544 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/ObjectivePositionS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/ObjectivePositionS2CP.kt @@ -15,14 +15,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.scoreboard import de.bixilon.minosoft.data.scoreboard.ScoreboardPositions import de.bixilon.minosoft.modding.event.events.scoreboard.ObjectivePositionSetEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class ObjectivePositionS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { private val position: ScoreboardPositions = ScoreboardPositions[buffer.readUnsignedByte()] private val name: String? = buffer.readNullString() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/objective/ObjectiveS2CF.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/objective/ObjectiveS2CF.kt index a8d0c79ef..a3952089d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/objective/ObjectiveS2CF.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/objective/ObjectiveS2CF.kt @@ -15,17 +15,13 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.scoreboard.objective import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.packets.factory.PacketDirection -import de.bixilon.minosoft.protocol.packets.factory.factories.PlayPacketFactory +import de.bixilon.minosoft.protocol.packets.registry.factory.PlayPacketFactory import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer -@LoadPacket(threadSafe = false) object ObjectiveS2CF : PlayPacketFactory { - override val direction = PacketDirection.SERVER_TO_CLIENT - override fun createPacket(buffer: PlayInByteBuffer): ObjectiveS2CP { + override fun create(buffer: PlayInByteBuffer): ObjectiveS2CP { val objective = buffer.readString() val displayName = if (buffer.versionId < ProtocolVersions.V_14W04A) { // ToDo buffer.readChatComponent() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/score/ScoreboardScoreS2CF.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/score/ScoreboardScoreS2CF.kt index 0c7d1baa8..56819e16d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/score/ScoreboardScoreS2CF.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/score/ScoreboardScoreS2CF.kt @@ -15,16 +15,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.scoreboard.score import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.packets.factory.PacketDirection -import de.bixilon.minosoft.protocol.packets.factory.factories.PlayPacketFactory +import de.bixilon.minosoft.protocol.packets.registry.factory.PlayPacketFactory import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer -@LoadPacket(threadSafe = false) object ScoreboardScoreS2CF : PlayPacketFactory { - override val direction = PacketDirection.SERVER_TO_CLIENT - override fun createPacket(buffer: PlayInByteBuffer): ScoreboardScoreS2CP { + override fun create(buffer: PlayInByteBuffer): ScoreboardScoreS2CP { val entity = buffer.readString() val action = ScoreboardScoreActions[buffer.readVarInt()] val objective = buffer.readNullString() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/teams/TeamsS2CF.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/teams/TeamsS2CF.kt index 1e49e2955..a558e45be 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/teams/TeamsS2CF.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/teams/TeamsS2CF.kt @@ -15,16 +15,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.scoreboard.teams import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.packets.factory.PacketDirection -import de.bixilon.minosoft.protocol.packets.factory.factories.PlayPacketFactory +import de.bixilon.minosoft.protocol.packets.registry.factory.PlayPacketFactory import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer -@LoadPacket(threadSafe = false) object TeamsS2CF : PlayPacketFactory { - override val direction = PacketDirection.SERVER_TO_CLIENT - override fun createPacket(buffer: PlayInByteBuffer): TeamsS2CP { + override fun create(buffer: PlayInByteBuffer): TeamsS2CP { val name = buffer.readString() return when (TeamActions[buffer.readUnsignedByte()]) { TeamActions.CREATE -> CreateTeamS2CP(name, buffer) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sign/SignEditorS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sign/SignEditorS2CP.kt index be9a98ea6..5cfcf020f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sign/SignEditorS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sign/SignEditorS2CP.kt @@ -15,7 +15,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.sign import de.bixilon.minosoft.data.entities.block.sign.SignSides import de.bixilon.minosoft.modding.event.events.OpenSignEditorEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -23,7 +22,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class SignEditorS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val position = if (buffer.versionId < ProtocolVersions.V_14W03B) buffer.readIntBlockPosition() else buffer.readBlockPosition() val side = if (buffer.versionId >= ProtocolVersions.V_23W12A) if (buffer.readBoolean()) SignSides.FRONT else SignSides.BACK else SignSides.FRONT diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sign/SignTextS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sign/SignTextS2CP.kt index 433420b39..f90405f5a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sign/SignTextS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sign/SignTextS2CP.kt @@ -17,7 +17,6 @@ import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.minosoft.data.entities.block.sign.SignBlockEntity import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -25,7 +24,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class SignTextS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val position: Vec3i = if (buffer.versionId < ProtocolVersions.V_14W04A) { buffer.readShortBlockPosition() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/EntitySoundS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/EntitySoundS2CP.kt index e20a64293..e76344c9b 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/EntitySoundS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/EntitySoundS2CP.kt @@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.sound import de.bixilon.minosoft.data.SoundCategories import de.bixilon.minosoft.data.registries.identified.ResourceLocation -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -22,7 +21,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class EntitySoundS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val soundEvent: ResourceLocation = buffer.readSound() val category: SoundCategories = SoundCategories[buffer.readVarInt()] diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/NamedSoundS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/NamedSoundS2CP.kt index 163b2b1bd..636f6fc92 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/NamedSoundS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/NamedSoundS2CP.kt @@ -17,7 +17,6 @@ import de.bixilon.minosoft.data.SoundCategories import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.modding.event.events.PlaySoundEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_16W02A import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_17W15A @@ -28,7 +27,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class NamedSoundS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val soundEvent: ResourceLocation? val volume: Float diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/SoundEventS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/SoundEventS2CP.kt index 7df528ca7..cad8457a7 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/SoundEventS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/SoundEventS2CP.kt @@ -17,7 +17,6 @@ import de.bixilon.minosoft.data.SoundCategories import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.modding.event.events.PlaySoundEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_16W02A @@ -29,7 +28,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class SoundEventS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { var category: SoundCategories? = null private set diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/StopSoundS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/StopSoundS2CP.kt index 790023469..05231e477 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/StopSoundS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/sound/StopSoundS2CP.kt @@ -16,7 +16,6 @@ import de.bixilon.kutil.bit.BitByte.isBitMask import de.bixilon.minosoft.data.SoundCategories import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -24,7 +23,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class StopSoundS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val category: SoundCategories? val sound: ResourceLocation? diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/LegacyTabListS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/LegacyTabListS2CP.kt index 5aa1fca83..309b3beb9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/LegacyTabListS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/LegacyTabListS2CP.kt @@ -13,7 +13,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.tab import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -21,7 +20,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(threadSafe = false) class LegacyTabListS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val items: MutableMap = mutableMapOf() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/TabListRemoveS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/TabListRemoveS2CP.kt index d6468b526..34f16bfe9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/TabListRemoveS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/TabListRemoveS2CP.kt @@ -15,7 +15,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.tab import de.bixilon.minosoft.data.entities.entities.player.additional.AdditionalDataUpdate import de.bixilon.minosoft.modding.event.events.TabListEntryChangeEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log @@ -23,7 +22,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.util.* -@LoadPacket(threadSafe = false) class TabListRemoveS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val uuids: Array = buffer.readArray { buffer.readUUID() } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/TabListS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/TabListS2CP.kt index 5f4d10afb..d6afe213f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/TabListS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/TabListS2CP.kt @@ -19,7 +19,6 @@ import de.bixilon.minosoft.data.entities.entities.player.additional.AdditionalDa import de.bixilon.minosoft.data.entities.entities.player.additional.PlayerAdditional import de.bixilon.minosoft.modding.event.events.TabListEntryChangeEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.packets.s2c.play.tab.actions.AbstractAction import de.bixilon.minosoft.protocol.packets.s2c.play.tab.actions.Actions @@ -31,7 +30,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.util.* -@LoadPacket(threadSafe = false) class TabListS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val entries: Map diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/TabListTextS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/TabListTextS2CP.kt index 68ed4e556..2c48fdc9f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/TabListTextS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/tab/TabListTextS2CP.kt @@ -14,14 +14,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.tab import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class TabListTextS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val header: ChatComponent = buffer.readChatComponent() val footer: ChatComponent = buffer.readChatComponent() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/ClearTitleS2CF.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/ClearTitleS2CF.kt index fe18b17b1..9949fef2e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/ClearTitleS2CF.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/ClearTitleS2CF.kt @@ -13,17 +13,13 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.title -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.packets.factory.PacketDirection -import de.bixilon.minosoft.protocol.packets.factory.factories.PlayPacketFactory +import de.bixilon.minosoft.protocol.packets.registry.factory.PlayPacketFactory import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer -@LoadPacket(threadSafe = false) object ClearTitleS2CF : PlayPacketFactory { - override val direction: PacketDirection = PacketDirection.SERVER_TO_CLIENT - override fun createPacket(buffer: PlayInByteBuffer): PlayS2CPacket { + override fun create(buffer: PlayInByteBuffer): PlayS2CPacket { val resetTimes = buffer.readBoolean() return if (resetTimes) { ResetTitleS2CP(buffer) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/HideTitleS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/HideTitleS2CP.kt index e7526de6b..336d6db1c 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/HideTitleS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/HideTitleS2CP.kt @@ -15,13 +15,11 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.title import de.bixilon.minosoft.modding.event.events.title.TitleHideEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true, threadSafe = false) class HideTitleS2CP(buffer: PlayInByteBuffer) : TitleS2CP { override fun handle(connection: PlayConnection) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/HotbarTextS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/HotbarTextS2CP.kt index da230a0d1..fc92e6585 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/HotbarTextS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/HotbarTextS2CP.kt @@ -17,13 +17,11 @@ import de.bixilon.minosoft.data.chat.message.SimpleChatMessage import de.bixilon.minosoft.data.chat.type.DefaultMessageTypes import de.bixilon.minosoft.modding.event.events.chat.ChatMessageEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true, threadSafe = false) class HotbarTextS2CP(buffer: PlayInByteBuffer) : TitleS2CP { val text = buffer.readChatComponent() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/ResetTitleS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/ResetTitleS2CP.kt index f3dd2ed1c..ad25f980b 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/ResetTitleS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/ResetTitleS2CP.kt @@ -15,13 +15,11 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.title import de.bixilon.minosoft.modding.event.events.title.TitleResetEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true, threadSafe = false) class ResetTitleS2CP(buffer: PlayInByteBuffer) : TitleS2CP { override fun handle(connection: PlayConnection) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/SubtitleS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/SubtitleS2CP.kt index 469140fc1..7a24b04a0 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/SubtitleS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/SubtitleS2CP.kt @@ -15,13 +15,11 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.title import de.bixilon.minosoft.modding.event.events.title.TitleSubtitleSetEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true, threadSafe = false) class SubtitleS2CP(buffer: PlayInByteBuffer) : TitleS2CP { val text = buffer.readChatComponent() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/TitleS2CF.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/TitleS2CF.kt index 7c6349391..296736127 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/TitleS2CF.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/TitleS2CF.kt @@ -15,16 +15,12 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.title import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket -import de.bixilon.minosoft.protocol.packets.factory.PacketDirection -import de.bixilon.minosoft.protocol.packets.factory.factories.PlayPacketFactory +import de.bixilon.minosoft.protocol.packets.registry.factory.PlayPacketFactory import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer -@LoadPacket(threadSafe = false) object TitleS2CF : PlayPacketFactory { - override val direction: PacketDirection = PacketDirection.SERVER_TO_CLIENT - override fun createPacket(buffer: PlayInByteBuffer): TitleS2CP { + override fun create(buffer: PlayInByteBuffer): TitleS2CP { return when (buffer.readEnum(buffer.connection.registries.titleActions)!!) { TitleActions.TITLE_TEXT -> TitleTextS2CP(buffer) TitleActions.SUBTITLE -> SubtitleS2CP(buffer) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/TitleTextS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/TitleTextS2CP.kt index 200f541f9..8e18d7603 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/TitleTextS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/TitleTextS2CP.kt @@ -15,13 +15,11 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.title import de.bixilon.minosoft.modding.event.events.title.TitleSetEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true, threadSafe = false) class TitleTextS2CP(buffer: PlayInByteBuffer) : TitleS2CP { val text = buffer.readChatComponent() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/TitleTimesS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/TitleTimesS2CP.kt index 69fc47ee3..d22b36410 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/TitleTimesS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/title/TitleTimesS2CP.kt @@ -15,13 +15,11 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.title import de.bixilon.minosoft.modding.event.events.title.TitleTimesSetEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(parent = true, threadSafe = false) class TitleTimesS2CP(buffer: PlayInByteBuffer) : TitleS2CP { val fadeInTime = buffer.readInt() val stayTime = buffer.readInt() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/DifficultyS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/DifficultyS2CP.kt similarity index 93% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/DifficultyS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/DifficultyS2CP.kt index 5955ec3b8..ff7732417 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/DifficultyS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/DifficultyS2CP.kt @@ -10,12 +10,11 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.world import de.bixilon.minosoft.data.world.difficulty.Difficulties import de.bixilon.minosoft.data.world.difficulty.WorldDifficulty import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -23,7 +22,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class DifficultyS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val difficulty: Difficulties = Difficulties[buffer.readUnsignedByte()] var locked = false diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ExplosionS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/ExplosionS2CP.kt similarity index 96% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ExplosionS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/ExplosionS2CP.kt index 12f9e4601..611145707 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ExplosionS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/ExplosionS2CP.kt @@ -10,7 +10,7 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.world import de.bixilon.kotlinglm.vec2.Vec2i import de.bixilon.kotlinglm.vec3.Vec3d @@ -25,7 +25,6 @@ import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.EMPTY import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.floor import de.bixilon.minosoft.modding.event.events.ExplosionEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_17 @@ -34,7 +33,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(lowPriority = true) class ExplosionS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val position = if (buffer.versionId >= ProtocolVersions.V_22W42A) buffer.readVec3d() else Vec3d(buffer.readVec3f()) val power = buffer.readFloat() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ParticleS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/ParticleS2CP.kt similarity index 95% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ParticleS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/ParticleS2CP.kt index 6873a9a26..5738c1362 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ParticleS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/ParticleS2CP.kt @@ -10,7 +10,7 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.world import de.bixilon.kotlinglm.vec3.Vec3 import de.bixilon.kotlinglm.vec3.Vec3d @@ -18,7 +18,6 @@ import de.bixilon.minosoft.data.registries.particle.ParticleType import de.bixilon.minosoft.data.registries.particle.data.ParticleData import de.bixilon.minosoft.modding.event.events.ParticleSpawnEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -26,7 +25,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class ParticleS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val type: ParticleType = if (buffer.versionId < ProtocolVersions.V_14W19A) { buffer.readLegacyRegistryItem(buffer.connection.registries.particleType)!! diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/TimeS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/TimeS2CP.kt similarity index 93% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/TimeS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/TimeS2CP.kt index 68c743f14..6ec5bf132 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/TimeS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/TimeS2CP.kt @@ -10,12 +10,11 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.world import de.bixilon.minosoft.config.DebugOptions import de.bixilon.minosoft.data.world.time.WorldTime import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -23,7 +22,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class TimeS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val age = buffer.readLong() val time = buffer.readLong() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/VibrationS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/VibrationS2CP.kt similarity index 92% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/VibrationS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/VibrationS2CP.kt index 0f1674e38..029939257 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/VibrationS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/VibrationS2CP.kt @@ -10,17 +10,15 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.world import de.bixilon.kotlinglm.vec3.Vec3i -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class VibrationS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val sourcePosition: Vec3i = buffer.readBlockPosition() val target = buffer.readVibrationSource() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/VillagerTradesS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/VillagerTradesS2CP.kt similarity index 95% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/VillagerTradesS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/VillagerTradesS2CP.kt index 7a4da3265..cb102a2f3 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/VillagerTradesS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/VillagerTradesS2CP.kt @@ -10,11 +10,10 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.world import de.bixilon.minosoft.data.Trade import de.bixilon.minosoft.data.container.stack.ItemStack -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -22,7 +21,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class VillagerTradesS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val containerId: Int = buffer.readVarInt() val trades: List = buffer.readArray(buffer.readUnsignedByte()) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/WorldEventS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/WorldEventS2CP.kt similarity index 94% rename from src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/WorldEventS2CP.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/WorldEventS2CP.kt index ed2ba11c8..f3b682b93 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/WorldEventS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/world/WorldEventS2CP.kt @@ -10,12 +10,11 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.s2c.play +package de.bixilon.minosoft.protocol.packets.s2c.play.world import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.minosoft.data.registries.misc.event.world.DefaultWorldEventHandlers import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -23,7 +22,6 @@ import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket class WorldEventS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val eventId: Int = buffer.readInt() val event = buffer.connection.registries.worldEvent.getOrNull(eventId) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/status/PongS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/status/PongS2CP.kt index 8dc249c23..0d472611d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/status/PongS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/status/PongS2CP.kt @@ -15,16 +15,13 @@ package de.bixilon.minosoft.protocol.packets.s2c.status import de.bixilon.kutil.time.TimeUtil.nanos import de.bixilon.minosoft.protocol.network.connection.status.StatusConnection import de.bixilon.minosoft.protocol.network.connection.status.StatusConnectionStates -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.StatusS2CPacket -import de.bixilon.minosoft.protocol.protocol.ProtocolStates import de.bixilon.minosoft.protocol.protocol.buffers.InByteBuffer import de.bixilon.minosoft.protocol.status.StatusPong import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -@LoadPacket(state = ProtocolStates.STATUS) class PongS2CP(buffer: InByteBuffer) : StatusS2CPacket { val payload: Long = buffer.readLong() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/status/StatusS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/status/StatusS2CP.kt index 98b9f55dd..6f2656686 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/status/StatusS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/status/StatusS2CP.kt @@ -15,9 +15,7 @@ package de.bixilon.minosoft.protocol.packets.s2c.status import de.bixilon.minosoft.protocol.network.connection.status.StatusConnection import de.bixilon.minosoft.protocol.network.connection.status.StatusConnectionStates import de.bixilon.minosoft.protocol.packets.c2s.status.PingC2SP -import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.s2c.StatusS2CPacket -import de.bixilon.minosoft.protocol.protocol.ProtocolStates import de.bixilon.minosoft.protocol.protocol.buffers.InByteBuffer import de.bixilon.minosoft.protocol.status.ServerStatus import de.bixilon.minosoft.protocol.status.StatusPing @@ -28,7 +26,6 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.util.concurrent.ThreadLocalRandom -@LoadPacket(state = ProtocolStates.STATUS) class StatusS2CP(buffer: InByteBuffer) : StatusS2CPacket { val status: ServerStatus = ServerStatus(buffer.readJson()) diff --git a/src/main/java/de/bixilon/minosoft/protocol/PacketSkipper.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/types/HandleablePacket.kt similarity index 83% rename from src/main/java/de/bixilon/minosoft/protocol/PacketSkipper.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/types/HandleablePacket.kt index fafec2de8..2e1d7d5b0 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/PacketSkipper.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/types/HandleablePacket.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -11,11 +11,11 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol +package de.bixilon.minosoft.protocol.packets.types import de.bixilon.minosoft.protocol.network.connection.Connection -interface PacketSkipper { +interface HandleablePacket { - fun canSkip(connection: Connection): Boolean + fun handle(connection: Connection) } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/Packet.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/types/Packet.kt similarity index 89% rename from src/main/java/de/bixilon/minosoft/protocol/packets/Packet.kt rename to src/main/java/de/bixilon/minosoft/protocol/packets/types/Packet.kt index 96a651e67..3b217c0fe 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/Packet.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/types/Packet.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -10,7 +10,7 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets +package de.bixilon.minosoft.protocol.packets.types interface Packet { diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/DefaultPacketMapping.kt b/src/main/java/de/bixilon/minosoft/protocol/protocol/DefaultPacketMapping.kt new file mode 100644 index 000000000..0c80b3bf3 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/DefaultPacketMapping.kt @@ -0,0 +1,51 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ +package de.bixilon.minosoft.protocol.protocol + +import de.bixilon.minosoft.protocol.packets.c2s.handshake.HandshakeC2SP +import de.bixilon.minosoft.protocol.packets.c2s.login.ChannelC2SP +import de.bixilon.minosoft.protocol.packets.c2s.login.EncryptionC2SP +import de.bixilon.minosoft.protocol.packets.c2s.login.StartC2SP +import de.bixilon.minosoft.protocol.packets.c2s.status.PingC2SP +import de.bixilon.minosoft.protocol.packets.c2s.status.StatusRequestC2SP +import de.bixilon.minosoft.protocol.packets.registry.PacketMapping +import de.bixilon.minosoft.protocol.packets.s2c.general.CompressionS2CP +import de.bixilon.minosoft.protocol.packets.s2c.general.KickS2CP +import de.bixilon.minosoft.protocol.packets.s2c.login.ChannelS2CP +import de.bixilon.minosoft.protocol.packets.s2c.login.EncryptionS2CP +import de.bixilon.minosoft.protocol.packets.s2c.login.SuccessS2CP +import de.bixilon.minosoft.protocol.packets.s2c.status.PongS2CP +import de.bixilon.minosoft.protocol.packets.s2c.status.StatusS2CP + +object DefaultPacketMapping { + val C2S_PACKET_MAPPING = PacketMapping(PacketDirections.CLIENT_TO_SERVER).apply { + register(ProtocolStates.HANDSHAKE, HandshakeC2SP::class, 0x00) + + register(ProtocolStates.STATUS, StatusRequestC2SP::class, 0x00) + register(ProtocolStates.STATUS, PingC2SP::class, 0x01) + + register(ProtocolStates.LOGIN, StartC2SP::class, 0x00) + register(ProtocolStates.LOGIN, EncryptionC2SP::class, 0x01) + register(ProtocolStates.LOGIN, ChannelC2SP::class, 0x02) + } + val S2C_PACKET_MAPPING = PacketMapping(PacketDirections.SERVER_TO_CLIENT).apply { + register(ProtocolStates.STATUS, StatusS2CP::class, 0x00) + register(ProtocolStates.STATUS, PongS2CP::class, 0x01) + + register(ProtocolStates.LOGIN, KickS2CP::class, 0x00) + register(ProtocolStates.LOGIN, EncryptionS2CP::class, 0x01) + register(ProtocolStates.LOGIN, SuccessS2CP::class, 0x02) + register(ProtocolStates.LOGIN, CompressionS2CP::class, 0x03) + register(ProtocolStates.LOGIN, ChannelS2CP::class, 0x04) + } +} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/PacketDirection.kt b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketDirections.kt similarity index 86% rename from src/main/java/de/bixilon/minosoft/protocol/packets/factory/PacketDirection.kt rename to src/main/java/de/bixilon/minosoft/protocol/protocol/PacketDirections.kt index 7a7c15a88..1228a041b 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/PacketDirection.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketDirections.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -11,9 +11,9 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets.factory +package de.bixilon.minosoft.protocol.protocol -enum class PacketDirection { +enum class PacketDirections { SERVER_TO_CLIENT, CLIENT_TO_SERVER, ; diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.kt b/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.kt deleted file mode 100644 index e61253800..000000000 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.kt +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Minosoft - * Copyright (C) 2020-2023 Moritz Zwerger - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ -package de.bixilon.minosoft.protocol.protocol - -import de.bixilon.kutil.collections.CollectionUtil.biMapOf -import de.bixilon.kutil.collections.map.bi.BiMap -import de.bixilon.minosoft.protocol.packets.c2s.handshake.HandshakeC2SP -import de.bixilon.minosoft.protocol.packets.c2s.login.ChannelC2SP -import de.bixilon.minosoft.protocol.packets.c2s.login.EncryptionC2SP -import de.bixilon.minosoft.protocol.packets.c2s.login.StartC2SP -import de.bixilon.minosoft.protocol.packets.c2s.status.PingC2SP -import de.bixilon.minosoft.protocol.packets.c2s.status.StatusRequestC2SP -import de.bixilon.minosoft.protocol.packets.factory.C2SPacketType -import de.bixilon.minosoft.protocol.packets.factory.PacketTypeRegistry -import de.bixilon.minosoft.protocol.packets.factory.S2CPacketType -import de.bixilon.minosoft.protocol.packets.s2c.login.* -import de.bixilon.minosoft.protocol.packets.s2c.status.PongS2CP -import de.bixilon.minosoft.protocol.packets.s2c.status.StatusS2CP - -object Protocol { - val C2S_PACKET_MAPPING: Map> = mapOf( - ProtocolStates.HANDSHAKE to biMapOf( - PacketTypeRegistry.getC2S(HandshakeC2SP::class.java)!! to 0x00, - ), - ProtocolStates.STATUS to biMapOf( - PacketTypeRegistry.getC2S(StatusRequestC2SP::class.java)!! to 0x00, - PacketTypeRegistry.getC2S(PingC2SP::class.java)!! to 0x01, - ), - ProtocolStates.LOGIN to biMapOf( - PacketTypeRegistry.getC2S(StartC2SP::class.java)!! to 0x00, - PacketTypeRegistry.getC2S(EncryptionC2SP::class.java)!! to 0x01, - PacketTypeRegistry.getC2S(ChannelC2SP::class.java)!! to 0x02, - ), - ) - val S2C_PACKET_MAPPING: Map> = mapOf( - ProtocolStates.STATUS to biMapOf( - PacketTypeRegistry.getS2C(StatusS2CP::class.java)!! to 0x00, - PacketTypeRegistry.getS2C(PongS2CP::class.java)!! to 0x01, - ), - ProtocolStates.LOGIN to biMapOf( - PacketTypeRegistry.getS2C(KickS2CP::class.java)!! to 0x00, - PacketTypeRegistry.getS2C(EncryptionS2CP::class.java)!! to 0x01, - PacketTypeRegistry.getS2C(SuccessS2CP::class.java)!! to 0x02, - PacketTypeRegistry.getS2C(CompressionS2CP::class.java)!! to 0x03, - PacketTypeRegistry.getS2C(ChannelS2CP::class.java)!! to 0x04, - ), - ) -} diff --git a/src/main/java/de/bixilon/minosoft/protocol/versions/Version.kt b/src/main/java/de/bixilon/minosoft/protocol/versions/Version.kt index a80154584..c1ba316c9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/versions/Version.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/versions/Version.kt @@ -13,27 +13,32 @@ package de.bixilon.minosoft.protocol.versions -import de.bixilon.kutil.collections.map.bi.AbstractBiMap import de.bixilon.kutil.latch.AbstractLatch -import de.bixilon.kutil.primitive.BooleanUtil.decide import de.bixilon.minosoft.config.profile.profiles.resources.ResourcesProfile import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.data.registries.registries.RegistriesLoader -import de.bixilon.minosoft.protocol.packets.factory.C2SPacketType -import de.bixilon.minosoft.protocol.packets.factory.S2CPacketType -import de.bixilon.minosoft.protocol.protocol.ProtocolStates -import de.bixilon.minosoft.protocol.protocol.ProtocolVersions +import de.bixilon.minosoft.protocol.packets.registry.PacketMapping +import de.bixilon.minosoft.protocol.protocol.PacketDirections import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_15W31A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_15W34A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_16W38A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_17W47A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_18W02A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_17_1_RC2 +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_20W17A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_22W17A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_22W43A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_23W12A class Version( val name: String, val versionId: Int, val protocolId: Int, val type: VersionTypes, - val s2cPackets: Map>, - val c2sPackets: Map>, + val s2c: PacketMapping, + val c2s: PacketMapping, ) { - val sortingId: Int = (versionId == -1).decide(Int.MAX_VALUE, versionId) + val sortingId: Int = if (versionId == -1) Int.MAX_VALUE else versionId fun load(profile: ResourcesProfile, latch: AbstractLatch): Registries { @@ -48,14 +53,19 @@ class Version( return this.versionId.compareTo(versionId) } - val flattened: Boolean get() = versionId >= ProtocolVersions.V_17W47A + operator fun get(directions: PacketDirections) = when (directions) { + PacketDirections.CLIENT_TO_SERVER -> c2s + PacketDirections.SERVER_TO_CLIENT -> s2c + } + + val flattened: Boolean get() = versionId >= V_17W47A val hasOffhand: Boolean get() = versionId >= V_15W31A - val maxPacketLength get() = if (versionId < ProtocolVersions.V_1_17_1_RC2) 1 shl 21 else 1 shl 23 - val maxChatMessageSize get() = if (versionId < ProtocolVersions.V_16W38A) 100 else 256 - val hasAttackCooldown get() = versionId >= ProtocolVersions.V_15W34A - val requiresSignedChat get() = versionId >= ProtocolVersions.V_22W17A - val requiresSignedLogin get() = requiresSignedChat && versionId < ProtocolVersions.V_22W43A - val supportsRGBChat get() = versionId >= ProtocolVersions.V_20W17A - val jsonLanguage get() = versionId >= ProtocolVersions.V_18W02A - val doubleSigns get() = versionId >= ProtocolVersions.V_23W12A + val maxPacketLength get() = if (versionId < V_1_17_1_RC2) 1 shl 21 else 1 shl 23 + val maxChatMessageSize get() = if (versionId < V_16W38A) 100 else 256 + val hasAttackCooldown get() = versionId >= V_15W34A + val requiresSignedChat get() = versionId >= V_22W17A + val requiresSignedLogin get() = requiresSignedChat && versionId < V_22W43A + val supportsRGBChat get() = versionId >= V_20W17A + val jsonLanguage get() = versionId >= V_18W02A + val doubleSigns get() = versionId >= V_23W12A } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/PacketsRoot.kt b/src/main/java/de/bixilon/minosoft/protocol/versions/VersionIndex.kt similarity index 80% rename from src/main/java/de/bixilon/minosoft/protocol/packets/PacketsRoot.kt rename to src/main/java/de/bixilon/minosoft/protocol/versions/VersionIndex.kt index 22a863ce6..9d24888f8 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/PacketsRoot.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/versions/VersionIndex.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -11,9 +11,8 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.protocol.packets +package de.bixilon.minosoft.protocol.versions -/** - * Something to determinate in what package all packets are - */ -annotation class PacketsRoot +import de.bixilon.kutil.json.JsonObject + +typealias VersionIndex = Map diff --git a/src/main/java/de/bixilon/minosoft/protocol/versions/VersionLoader.kt b/src/main/java/de/bixilon/minosoft/protocol/versions/VersionLoader.kt new file mode 100644 index 000000000..c0d58298e --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/protocol/versions/VersionLoader.kt @@ -0,0 +1,98 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.protocol.versions + +import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.json.JsonObject +import de.bixilon.kutil.latch.AbstractLatch +import de.bixilon.kutil.primitive.IntUtil.toInt +import de.bixilon.minosoft.Minosoft +import de.bixilon.minosoft.assets.util.InputStreamUtil.readJson +import de.bixilon.minosoft.data.registries.identified.Namespaces.minosoft +import de.bixilon.minosoft.protocol.packets.registry.DefaultPackets +import de.bixilon.minosoft.protocol.packets.registry.PacketMapping +import de.bixilon.minosoft.protocol.protocol.PacketDirections +import de.bixilon.minosoft.protocol.protocol.ProtocolStates +import de.bixilon.minosoft.util.logging.Log +import de.bixilon.minosoft.util.logging.LogLevels +import de.bixilon.minosoft.util.logging.LogMessageType + +object VersionLoader { + private val INDEX = minosoft("mapping/versions.json") + + private fun loadMapping(state: ProtocolStates, direction: PacketDirections, mapping: PacketMapping, names: List) { + for ((id, name) in names.withIndex()) { + val type = DefaultPackets[direction][state]?.get(name) + if (type == null) { + Log.log(LogMessageType.LOADING, LogLevels.VERBOSE) { "Can not find packet $name in $state $direction!" } + continue + } + mapping.register(state, type, id) + } + } + + private fun loadMapping(data: Any, direction: PacketDirections): PacketMapping { + val mapping = PacketMapping(direction) + when (data) { + is List<*> -> loadMapping(ProtocolStates.PLAY, direction, mapping, data.unsafeCast()) + is Map<*, *> -> { + for ((state, names) in data) { + loadMapping(ProtocolStates[state!!]!!, direction, mapping, names.unsafeCast()) + } + } + + else -> throw IllegalArgumentException("Can not load packet mapping $data") + } + return mapping + } + + + private fun load(id: Int, index: VersionIndex, data: JsonObject = index[id]!!): Version { + Versions.getById(id)?.let { return it } + + val name = data["name"]!!.toString() + val protocolId = data["protocol_id"]?.toInt() ?: id + val type = data["type"]?.toString()?.let { VersionTypes[it] } ?: VersionTypes.SNAPSHOT + + val s2c: PacketMapping + val c2s: PacketMapping + + val packets = data["packets"] + if (packets is Int) { + val version = load(packets, index) + s2c = version.s2c + c2s = version.c2s + } else { + if (packets !is Map<*, *>) throw IllegalArgumentException() + s2c = loadMapping(packets["s2c"]!!, PacketDirections.SERVER_TO_CLIENT) + c2s = loadMapping(packets["c2s"]!!, PacketDirections.CLIENT_TO_SERVER) + } + + val version = Version(name, id, protocolId, type, s2c, c2s) + Versions.register(version) + return version + } + + fun load(latch: AbstractLatch) { + Log.log(LogMessageType.LOADING, LogLevels.VERBOSE) { "Loading versions..." } + val index: VersionIndex = Minosoft.MINOSOFT_ASSETS_MANAGER[INDEX].readJson() + + for ((versionId, data) in index) { + load(versionId, index, data) + } + + Log.log(LogMessageType.LOADING, LogLevels.VERBOSE) { "Versions loaded!" } + } +} + diff --git a/src/main/java/de/bixilon/minosoft/protocol/versions/Versions.kt b/src/main/java/de/bixilon/minosoft/protocol/versions/Versions.kt index 3147dc98a..79ced3db1 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/versions/Versions.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/versions/Versions.kt @@ -13,154 +13,38 @@ package de.bixilon.minosoft.protocol.versions -import de.bixilon.kutil.cast.CastUtil.unsafeCast -import de.bixilon.kutil.collections.CollectionUtil.mutableBiMapOf -import de.bixilon.kutil.collections.map.bi.AbstractBiMap -import de.bixilon.kutil.collections.map.bi.MutableBiMap -import de.bixilon.kutil.latch.AbstractLatch -import de.bixilon.kutil.primitive.IntUtil.toInt -import de.bixilon.minosoft.Minosoft -import de.bixilon.minosoft.assets.util.InputStreamUtil.readJson -import de.bixilon.minosoft.protocol.packets.factory.C2SPacketType -import de.bixilon.minosoft.protocol.packets.factory.PacketTypeRegistry -import de.bixilon.minosoft.protocol.packets.factory.S2CPacketType -import de.bixilon.minosoft.protocol.protocol.ProtocolStates -import de.bixilon.minosoft.util.KUtil.toResourceLocation -import de.bixilon.minosoft.util.logging.Log -import de.bixilon.minosoft.util.logging.LogLevels -import de.bixilon.minosoft.util.logging.LogMessageType +import de.bixilon.minosoft.protocol.packets.registry.PacketMapping +import de.bixilon.minosoft.protocol.protocol.PacketDirections import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap object Versions : Iterable { - private val VERSIONS_INDEX = "minosoft:mapping/versions.json".toResourceLocation() - private val VERSIONS_BY_NAME: MutableMap = mutableMapOf() - private val VERSIONS_BY_ID: Int2ObjectOpenHashMap = Int2ObjectOpenHashMap() - private val VERSIONS_BY_PROTOCOL: Int2ObjectOpenHashMap = Int2ObjectOpenHashMap() - val AUTOMATIC = Version("Automatic", -1, -1, VersionTypes.RELEASE, emptyMap(), emptyMap()) + private val name: MutableMap = mutableMapOf() + private val id: Int2ObjectOpenHashMap = Int2ObjectOpenHashMap() + private val protocol: Int2ObjectOpenHashMap = Int2ObjectOpenHashMap() + val AUTOMATIC = Version("Automatic", -1, -1, VersionTypes.RELEASE, PacketMapping(PacketDirections.SERVER_TO_CLIENT), PacketMapping(PacketDirections.CLIENT_TO_SERVER)) - private fun addVersion(version: Version) { - VERSIONS_BY_NAME.put(version.name, version)?.let { throw IllegalStateException("Duplicated version name: ${version.name}") } - VERSIONS_BY_ID.put(version.versionId, version)?.let { throw IllegalStateException("Duplicated version id: ${version.name}") } - VERSIONS_BY_PROTOCOL.put(version.protocolId, version)?.let { throw IllegalStateException("Duplicated protocol id: ${version.name}") } - } - - @Synchronized - fun load(latch: AbstractLatch) { - Log.log(LogMessageType.OTHER, LogLevels.VERBOSE) { "Loading versions..." } - val index: Map> = Minosoft.MINOSOFT_ASSETS_MANAGER[VERSIONS_INDEX].readJson() - - fun loadVersion(versionId: Int, data: Map = index[versionId.toString()]!!): Version { - VERSIONS_BY_ID[versionId]?.let { return it } - - - val s2cPackets: Map> - val c2sPackets: Map> - - when (val mapping = data["packets"]) { - is Int -> { - val mappingVersion = loadVersion(mapping) - s2cPackets = mappingVersion.s2cPackets - c2sPackets = mappingVersion.c2sPackets - } - is Map<*, *> -> { - when (val s2c = mapping["s2c"]) { - is List<*> -> { - // just play - s2cPackets = mapOf(ProtocolStates.PLAY to readS2PPacketMapping(versionId, ProtocolStates.PLAY, s2c.unsafeCast())) - } - is Map<*, *> -> { - // map other states - val packets: MutableMap> = mutableMapOf() - for ((stateName, packetMapping) in s2c) { - val state = ProtocolStates[stateName.toString()] - packets[state] = readS2PPacketMapping(versionId, state, packetMapping.unsafeCast()) - } - s2cPackets = packets - } - else -> throw IllegalArgumentException() - } - when (val c2s = mapping["c2s"]) { - is List<*> -> { - c2sPackets = mapOf(ProtocolStates.PLAY to readC2SPacketMapping(versionId, ProtocolStates.PLAY, c2s.unsafeCast())) - } - is Map<*, *> -> { - // map other states - val packets: MutableMap> = mutableMapOf() - for ((stateName, packetMapping) in c2s) { - val state = ProtocolStates[stateName.toString()] - packets[state] = readC2SPacketMapping(versionId, state, packetMapping.unsafeCast()) - } - c2sPackets = packets - } - else -> throw IllegalArgumentException() - } - - } - else -> TODO("Can not create version mapping $mapping") - } - - - val version = Version( - name = data["name"].toString(), - versionId = versionId, - protocolId = data["protocol_id"]?.toInt() ?: versionId, - type = data["type"]?.unsafeCast()?.let { return@let VersionTypes[it] } ?: VersionTypes.SNAPSHOT, - s2cPackets = s2cPackets, - c2sPackets = c2sPackets, - ) - addVersion(version) - return version - } - - latch.count += index.size - for ((versionId, data) in index) { - loadVersion(versionId.toInt(), data) - latch.dec() - } - Log.log(LogMessageType.OTHER, LogLevels.VERBOSE) { "Versions loaded!" } - } - - private fun readPacketMapping(versionId: Int, list: List, typeGetter: (name: String) -> T): MutableBiMap { - val map: MutableBiMap = mutableBiMapOf() - for (name in list) { - val packetType = typeGetter(name) - map.put(packetType, map.size)?.let { Log.log(LogMessageType.LOADING, LogLevels.WARN) { "Packet $name registered twice (version=$versionId)" } } - } - return map - } - - private fun readS2PPacketMapping(versionId: Int, state: ProtocolStates, list: List): AbstractBiMap { - return readPacketMapping(versionId, list) { - PacketTypeRegistry.getS2C(state, it)?.let { type -> return@readPacketMapping type } - Log.log(LogMessageType.LOADING, LogLevels.VERBOSE) { "Packet $it is not registered (versionId=$versionId, state=$state, direction=SERVER_TO_CLIENT)!" } - return@readPacketMapping S2CPacketType.EMPTY() - } - } - - private fun readC2SPacketMapping(versionId: Int, state: ProtocolStates, list: List): AbstractBiMap { - return readPacketMapping(versionId, list) { - PacketTypeRegistry.getC2S(state, it)?.let { type -> return@readPacketMapping type } - Log.log(LogMessageType.LOADING, LogLevels.VERBOSE) { "Packet $it is not registered (versionId=$versionId, state=$state, direction=CLIENT_TO_SERVER)!" } - return@readPacketMapping C2SPacketType.EMPTY() - } + fun register(version: Version) { + name.put(version.name, version)?.let { throw IllegalStateException("Duplicated version name: ${version.name}") } + id.put(version.versionId, version)?.let { throw IllegalStateException("Duplicated version id: ${version.name}") } + protocol.put(version.protocolId, version)?.let { throw IllegalStateException("Duplicated protocol id: ${version.name}") } } operator fun get(name: String?): Version? { if (name == "automatic") { return AUTOMATIC } - return VERSIONS_BY_NAME[name] + return this.name[name] } fun getById(versionId: Int): Version? { - return VERSIONS_BY_ID[versionId] + return id[versionId] } fun getByProtocol(protocolId: Int): Version? { - return VERSIONS_BY_PROTOCOL[protocolId] + return protocol[protocolId] } override fun iterator(): Iterator { - return VERSIONS_BY_NAME.values.iterator() + return name.values.iterator() } } diff --git a/src/main/java/de/bixilon/minosoft/util/KUtil.kt b/src/main/java/de/bixilon/minosoft/util/KUtil.kt index 576cfd466..fd3e4e939 100644 --- a/src/main/java/de/bixilon/minosoft/util/KUtil.kt +++ b/src/main/java/de/bixilon/minosoft/util/KUtil.kt @@ -51,6 +51,8 @@ import de.bixilon.minosoft.modding.event.master.GlobalEventMaster import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.status.StatusConnection import de.bixilon.minosoft.protocol.network.network.client.netty.NettyClient +import de.bixilon.minosoft.protocol.packets.registry.DefaultPackets +import de.bixilon.minosoft.protocol.protocol.DefaultPacketMapping import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.protocol.protocol.buffers.OutByteBuffer import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -283,6 +285,8 @@ object KUtil { DefaultThreadPool += { NettyClient::class.java.forceInit() } DefaultThreadPool += { SimpleChannelInboundHandler::class.java.forceInit() } DefaultThreadPool += { SSLContext.getDefault() } + DefaultThreadPool += { DefaultPackets::class.java.forceInit() } + DefaultThreadPool += { DefaultPacketMapping::class.java.forceInit() } DefaultThreadPool += { GLM::class.java.forceInit() } // whole glm } diff --git a/src/main/java/de/bixilon/minosoft/util/crash/section/ConnectionCrashSection.kt b/src/main/java/de/bixilon/minosoft/util/crash/section/ConnectionCrashSection.kt index f5d7c45cd..10934b7ca 100644 --- a/src/main/java/de/bixilon/minosoft/util/crash/section/ConnectionCrashSection.kt +++ b/src/main/java/de/bixilon/minosoft/util/crash/section/ConnectionCrashSection.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -25,9 +25,9 @@ class ConnectionCrashSection( builder.appendProperty(intent, "Account", entry.account.username) builder.appendProperty(intent, "Address", entry.address) builder.appendProperty(intent, "Brand", entry.serverInfo.brand) - builder.appendProperty(intent, "Events", entry.size) + builder.appendProperty(intent, "Events", entry.events.size) builder.appendProperty(intent, "State", entry.state) - builder.appendProperty(intent, "Protocol state", entry.network.state) + builder.appendProperty(intent, "DefaultPacketMapping state", entry.network.state) builder.appendProperty(intent, "Compression threshold", entry.network.compressionThreshold) builder.appendProperty(intent, "Encrypted", entry.network.encrypted) builder.appendProperty(intent, "Was connected", entry.wasConnected) diff --git a/src/main/resources/assets/minosoft/mapping/versions.json b/src/main/resources/assets/minosoft/mapping/versions.json index 2899e11bb..f6e82d4db 100644 --- a/src/main/resources/assets/minosoft/mapping/versions.json +++ b/src/main/resources/assets/minosoft/mapping/versions.json @@ -121,7 +121,7 @@ "protocol_id": 1073741944, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "message_acknowledgement", "command", "signed_chat_message", "session_data", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["bundle", "entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chunk_biome", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "entity_damage", "hide_message", "kick", "unsigned_chat_message", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "damage_tilt", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list_remove", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "features", "entity_effect", "recipes", "tags"] + "s2c": ["bundle", "entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chunk_biome", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "entity_damage", "hide_message", "kick", "unsigned_chat_message", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "damage_tilt", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list_remove", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "features", "entity_effect", "recipes", "tags"] } }, "879": { @@ -134,7 +134,7 @@ "protocol_id": 1073741942, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "message_acknowledgement", "command", "signed_chat_message", "session_data", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["bundle", "entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "entity_damage", "hide_message", "kick", "unsigned_chat_message", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "damage_tilt", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list_remove", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "features", "entity_effect", "recipes", "tags"] + "s2c": ["bundle", "entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "entity_damage", "hide_message", "kick", "unsigned_chat_message", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "damage_tilt", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list_remove", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "features", "entity_effect", "recipes", "tags"] } }, "877": { @@ -152,7 +152,7 @@ "protocol_id": 1073741939, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "message_acknowledgement", "command", "signed_chat_message", "session_data", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["bundle", "entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "hide_message", "kick", "unsigned_chat_message", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "damage_tilt", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list_remove", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "features", "entity_effect", "recipes", "tags"] + "s2c": ["bundle", "entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "hide_message", "kick", "unsigned_chat_message", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "damage_tilt", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list_remove", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "features", "entity_effect", "recipes", "tags"] } }, "874": { @@ -181,7 +181,7 @@ "protocol_id": 1073741935, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "message_acknowledgement", "command", "signed_chat_message", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "session_data", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "hide_message", "kick", "unsigned_chat_message", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list_remove", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "features", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "hide_message", "kick", "unsigned_chat_message", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list_remove", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "features", "entity_effect", "recipes", "tags"] } }, "869": { @@ -214,7 +214,7 @@ "protocol_id": 1073741929, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "message_acknowledgement", "command", "signed_chat_message", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "session_data", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "named_sound", "hide_message", "kick", "unsigned_chat_message", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list_remove", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "features", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "named_sound", "hide_message", "kick", "unsigned_chat_message", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list_remove", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "features", "entity_effect", "recipes", "tags"] } }, "863": { @@ -222,7 +222,7 @@ "protocol_id": 1073741928, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "message_acknowledgement", "command", "signed_chat_message", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "named_sound", "hide_message", "kick", "unsigned_chat_message", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list_remove", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "features", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "named_sound", "hide_message", "kick", "unsigned_chat_message", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list_remove", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "features", "entity_effect", "recipes", "tags"] } }, "862": { @@ -261,7 +261,7 @@ "protocol_id": 1073741922, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "legacy_message_acknowledgement", "command", "signed_chat_message", "chat_preview", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_preview", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "named_sound", "hide_message", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "message_header", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "temporary_chat_preview", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_preview", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "named_sound", "hide_message", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "message_header", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "temporary_chat_preview", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "854": { @@ -269,7 +269,7 @@ "protocol_id": 1073741921, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "command", "signed_chat_message", "chat_preview", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_preview", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "named_sound", "hide_message", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "message_header", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "temporary_chat_preview", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_preview", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "named_sound", "hide_message", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "message_header", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "temporary_chat_preview", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "853": { @@ -277,7 +277,7 @@ "protocol_id": 1073741920, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "command", "signed_chat_message", "chat_preview", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_preview", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "temporary_chat_preview", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_preview", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "chat_suggestions", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "temporary_chat_preview", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "852": { @@ -341,7 +341,7 @@ "protocol_id": 1073741909, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "command", "signed_chat_message", "chat_preview", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_preview", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "temporary_chat_preview", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_preview", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "temporary_chat_preview", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "840": { @@ -349,7 +349,7 @@ "protocol_id": 1073741908, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "command", "signed_chat_message", "chat_preview", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_preview", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_preview", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "play_status", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "839": { @@ -357,7 +357,7 @@ "protocol_id": 1073741907, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "command", "signed_chat_message", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "838": { @@ -365,7 +365,7 @@ "protocol_id": 1073741906, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "signed_chat_message", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "signed_chat_message", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "chat_message", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "837": { @@ -378,7 +378,7 @@ "protocol_id": 1073741904, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "835": { @@ -391,7 +391,7 @@ "protocol_id": 1073741902, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "833": { @@ -410,7 +410,7 @@ "protocol_id": 1073741899, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "830": { @@ -418,7 +418,7 @@ "protocol_id": 1073741898, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "vibration", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "vibration", "entity_animation", "statistics", "block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "829": { @@ -578,7 +578,7 @@ "protocol_id": 1073741868, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "vibration", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "vibration", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "simulation_distance", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "797": { @@ -678,7 +678,7 @@ "protocol_id": 1073741851, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "pong", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "vibration", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "vibration", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "ping", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "778": { @@ -721,7 +721,7 @@ "protocol_id": 1073741842, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "vibration", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "vibration", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "770": { @@ -734,7 +734,7 @@ "protocol_id": 1073741840, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "vibration", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "vibration", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "clear_title", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "initialize_world_border", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "end_combat_event", "enter_combat_event", "kill_combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "hotbar_text", "center_world_border", "interpolate_world_border", "size_world_border", "warn_time_world_border", "warn_blocks_world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "subtitle", "time", "title_text", "title_times", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "768": { @@ -772,7 +772,7 @@ "protocol_id": 1073741832, "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "vibration", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "vibration", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "761": { @@ -862,14 +862,14 @@ "name": "20w28a", "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "blocks", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "738": { "name": "20w27a", "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "displayed_recipe", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "736": { @@ -918,7 +918,7 @@ "name": "1.16-pre1", "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "719": { @@ -953,7 +953,7 @@ "name": "20w16a", "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "generate_structure", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "711": { @@ -976,7 +976,7 @@ "name": "20w12a", "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "compass_position", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "706": { @@ -1118,7 +1118,7 @@ "name": "19w34a", "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "legacy_block_break", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "498": { @@ -1142,7 +1142,7 @@ "name": "1.14.4-pre4", "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags", "legacy_block_break"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags", "legacy_block_break"] } }, "493": { @@ -1241,7 +1241,7 @@ "name": "19w14b", "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "heartbeat", "lock_difficulty", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "open_horse_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "open_entity_container", "heartbeat", "chunk", "world_event", "particle", "chunk_light", "initialize", "map", "villager_trades", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "book", "open_container", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "chunk_center", "view_distance", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "entity_sound", "sound_event", "stop_sound", "tab_list_text", "nbt_response", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "470": { @@ -1256,7 +1256,7 @@ "name": "19w13a", "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "lock_difficulty", "heartbeat", "ground_change", "position", "position_rotation", "rotation", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "jigsaw_block", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "open_horse_container", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "entity_sound", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags", "chunk_light", "open_container", "villager_trades", "view_distance"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "container_items", "open_entity_container", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "entity_sound", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags", "chunk_light", "open_container", "villager_trades", "view_distance"] } }, "467": { @@ -1275,7 +1275,7 @@ "name": "19w11a", "packets": { "c2s": ["confirm_teleport", "block_nbt", "difficulty", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "lock_difficulty", "heartbeat", "ground_change", "position", "position_rotation", "rotation", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_horse_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "entity_sound", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags", "chunk_light", "open_container", "villager_trades"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_entity_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "entity_sound", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags", "chunk_light", "open_container", "villager_trades"] } }, "463": { @@ -1290,7 +1290,7 @@ "name": "19w08a", "packets": { "c2s": ["confirm_teleport", "block_nbt", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "heartbeat", "ground_change", "position", "position_rotation", "rotation", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_horse_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "entity_sound", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags", "chunk_light", "open_container", "villager_trades"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_entity_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "entity_sound", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags", "chunk_light", "open_container", "villager_trades"] } }, "460": { @@ -1329,14 +1329,14 @@ "name": "19w02a", "packets": { "c2s": ["confirm_teleport", "block_nbt", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "heartbeat", "ground_change", "position", "position_rotation", "rotation", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_horse_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "entity_sound", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags", "chunk_light", "open_container", "villager_trades"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_entity_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "entity_sound", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags", "chunk_light", "open_container", "villager_trades"] } }, "451": { "name": "18w50a", "packets": { "c2s": ["confirm_teleport", "block_nbt", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "heartbeat", "ground_change", "position", "position_rotation", "rotation", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "entity_sound", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags", "chunk_light"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "book", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "entity_sound", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags", "chunk_light"] } }, "450": { @@ -1383,7 +1383,7 @@ "name": "18w43a", "packets": { "c2s": ["confirm_teleport", "block_nbt", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "heartbeat", "ground_change", "position", "position_rotation", "rotation", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "entity_sound", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags", "chunk_light"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "entity_sound", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags", "chunk_light"] } }, "404": { @@ -1445,7 +1445,7 @@ "name": "1.13-pre9", "packets": { "c2s": ["confirm_teleport", "block_nbt", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "book", "entity_nbt", "entity_interact", "heartbeat", "ground_change", "position", "position_rotation", "rotation", "move_vehicle", "steer_boat", "item_pick", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "anvil_item_name", "resourcepack", "advancement_tab", "trade", "beacon_effect", "hotbar_slot", "command_block", "minecart_command_block", "item_stack_create", "structure_block", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "390": { @@ -1461,7 +1461,7 @@ }, "s2c": { "login": ["channel", "kick", "encryption", "success", "compression"], - "play": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags" + "play": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "nbt_response", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags" ] } } @@ -1483,7 +1483,7 @@ }, "s2c": { "login": ["channel", "kick", "encryption", "success", "compression"], - "play": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags" + "play": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags" ] } } @@ -1497,7 +1497,7 @@ }, "s2c": { "login": ["channel", "kick", "encryption", "success", "compression"], - "play": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags" + "play": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags" ] } } @@ -1634,7 +1634,7 @@ "name": "18w01a", "packets": { "c2s": ["confirm_teleport", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "entity_interact", "heartbeat", "ground_change", "position", "position_rotation", "rotation", "move_vehicle", "steer_boat", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "resourcepack", "advancement_tab", "hotbar_slot", "item_stack_create", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "player_face", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "351": { @@ -1649,14 +1649,14 @@ "name": "17w49a", "packets": { "c2s": ["confirm_teleport", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "entity_interact", "heartbeat", "ground_change", "position", "position_rotation", "rotation", "move_vehicle", "steer_boat", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "resourcepack", "advancement_tab", "hotbar_slot", "item_stack_create", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes", "tags"] } }, "348": { "name": "17w48a", "packets": { "c2s": ["confirm_teleport", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "entity_interact", "heartbeat", "ground_change", "position", "position_rotation", "rotation", "move_vehicle", "steer_boat", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "resourcepack", "advancement_tab", "hotbar_slot", "item_stack_create", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect", "recipes"] } }, "347": { @@ -1671,7 +1671,7 @@ "name": "17w46a", "packets": { "c2s": ["confirm_teleport", "chat_message", "client_action", "settings", "command_suggestions", "container_action", "container_button", "container_click", "close_container", "channel", "entity_interact", "heartbeat", "ground_change", "position", "position_rotation", "rotation", "move_vehicle", "steer_boat", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "resourcepack", "advancement_tab", "hotbar_slot", "item_stack_create", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "command_suggestions", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect"] } }, "344": { @@ -1682,7 +1682,7 @@ "name": "17w45a", "packets": { "c2s": ["confirm_teleport", "chat_message", "client_action", "settings", "container_action", "container_button", "container_click", "close_container", "channel", "entity_interact", "heartbeat", "ground_change", "position", "position_rotation", "rotation", "move_vehicle", "steer_boat", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "resourcepack", "advancement_tab", "hotbar_slot", "item_stack_create", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "chat_message", "blocks", "commands", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "stop_sound", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect"] } }, "342": { @@ -1713,7 +1713,7 @@ "name": "17w31a", "packets": { "c2s": ["confirm_teleport", "command_suggestions", "chat_message", "client_action", "settings", "container_action", "container_button", "container_click", "close_container", "channel", "entity_interact", "heartbeat", "ground_change", "position", "position_rotation", "rotation", "move_vehicle", "steer_boat", "crafting_recipe", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "resourcepack", "advancement_tab", "hotbar_slot", "item_stack_create", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "crafting_recipe", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect"] } }, "335": { @@ -1733,7 +1733,7 @@ "name": "1.12-pre5", "packets": { "c2s": ["confirm_teleport", "crafting_grid", "command_suggestions", "chat_message", "client_action", "settings", "container_action", "container_button", "container_click", "close_container", "channel", "entity_interact", "heartbeat", "ground_change", "position", "position_rotation", "rotation", "move_vehicle", "steer_boat", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "resourcepack", "advancement_tab", "hotbar_slot", "item_stack_create", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "empty_move", "relative_move", "movement_rotation", "rotation", "move_vehicle", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "advancement_tab", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "sound_event", "tab_list_text", "entity_collect", "teleport", "advancements", "entity_attributes", "entity_effect"] } }, "331": { @@ -1744,7 +1744,7 @@ "name": "1.12-pre3", "packets": { "c2s": ["crafting_grid", "confirm_teleport", "command_suggestions", "chat_message", "client_action", "settings", "container_action", "container_button", "container_click", "close_container", "channel", "entity_interact", "heartbeat", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "resourcepack", "hotbar_slot", "item_stack_create", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item", "advancement_tab"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "advancements", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "sound_event", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect", "advancement_progress"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "advancements", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "sound_event", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect", "advancement_progress"] } }, "329": { @@ -1795,7 +1795,7 @@ "name": "17w13a", "packets": { "c2s": ["crafting_grid", "confirm_teleport", "command_suggestions", "chat_message", "client_action", "settings", "container_action", "container_button", "container_click", "close_container", "channel", "entity_interact", "heartbeat", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "toggle_fly", "player_action", "entity_action", "vehicle_input", "recipe_book", "resourcepack", "hotbar_slot", "item_stack_create", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "advancements", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "sound_event", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "advancements", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "unlock_recipes", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "sound_event", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect"] } }, "317": { @@ -1898,7 +1898,7 @@ "type": "release", "packets": { "c2s": ["confirm_teleport", "command_suggestions", "chat_message", "client_action", "settings", "container_action", "container_button", "container_click", "close_container", "channel", "entity_interact", "heartbeat", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "toggle_fly", "player_action", "entity_action", "vehicle_input", "resourcepack", "hotbar_slot", "item_stack_create", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "sound_event", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "sound_event", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect"] } }, "109": { @@ -1998,7 +1998,7 @@ "name": "15w46a", "packets": { "c2s": ["confirm_teleport", "command_suggestions", "chat_message", "client_action", "settings", "container_action", "container_button", "container_click", "close_container", "channel", "entity_interact", "heartbeat", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "toggle_fly", "player_action", "entity_action", "vehicle_input", "resourcepack", "hotbar_slot", "item_stack_create", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "sign_text", "sound_event", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "sign_text", "sound_event", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect"] } }, "85": { @@ -2025,14 +2025,14 @@ "name": "15w43a", "packets": { "c2s": ["confirm_teleport", "command_suggestions", "chat_message", "client_action", "settings", "container_action", "container_button", "container_click", "close_container", "channel", "entity_interact", "heartbeat", "position", "position_rotation", "rotation", "ground_change", "move_vehicle", "steer_boat", "toggle_fly", "player_action", "entity_action", "vehicle_input", "resourcepack", "hotbar_slot", "item_stack_create", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_status", "explosion", "unload_chunk", "compression", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "sign_text", "sound_event", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "named_sound", "kick", "entity_event", "explosion", "unload_chunk", "compression", "game_event", "heartbeat", "chunk", "world_event", "particle", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "move_vehicle", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "entity_passenger", "teams", "scoreboard_score", "compass_position", "time", "title", "sign_text", "sound_event", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect"] } }, "79": { "name": "15w42a", "packets": { "c2s": ["command_suggestions", "chat_message", "client_action", "settings", "container_action", "container_button", "container_click", "close_container", "channel", "entity_interact", "heartbeat", "move_vehicle", "position", "position_rotation", "rotation", "ground_change", "toggle_fly", "player_action", "entity_action", "vehicle_input", "resourcepack", "hotbar_slot", "item_stack_create", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item", "steer_boat", "confirm_teleport"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "kick", "entity_status", "explosion", "unload_chunk", "compression", "game_event", "heartbeat", "chunk", "world_event", "particle", "named_sound", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_passenger", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "teams", "scoreboard_score", "compass_position", "time", "title", "sign_text", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "kick", "entity_event", "explosion", "unload_chunk", "compression", "game_event", "heartbeat", "chunk", "world_event", "particle", "named_sound", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_passenger", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "teams", "scoreboard_score", "compass_position", "time", "title", "sign_text", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect"] } }, "78": { @@ -2043,7 +2043,7 @@ "name": "15w41a", "packets": { "c2s": ["command_suggestions", "chat_message", "client_action", "settings", "container_action", "container_button", "container_click", "close_container", "channel", "entity_interact", "heartbeat", "move_vehicle", "position", "position_rotation", "rotation", "ground_change", "toggle_fly", "player_action", "entity_action", "vehicle_input", "resourcepack", "hotbar_slot", "item_stack_create", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item", "steer_boat"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "kick", "entity_status", "explosion", "unload_chunk", "compression", "game_event", "heartbeat", "chunk", "world_event", "particle", "named_sound", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_passenger", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "teams", "scoreboard_score", "compass_position", "time", "title", "sign_text", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "kick", "entity_event", "explosion", "unload_chunk", "compression", "game_event", "heartbeat", "chunk", "world_event", "particle", "named_sound", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_passenger", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "teams", "scoreboard_score", "compass_position", "time", "title", "sign_text", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect"] } }, "76": { @@ -2086,7 +2086,7 @@ "name": "15w36a", "packets": { "c2s": ["command_suggestions", "chat_message", "client_action", "settings", "container_action", "container_button", "container_click", "close_container", "channel", "entity_interact", "heartbeat", "position", "position_rotation", "rotation", "ground_change", "toggle_fly", "player_action", "entity_action", "vehicle_input", "resourcepack", "hotbar_slot", "item_stack_create", "sign_text", "swing_arm", "entity_spectate", "block_interact", "use_item"], - "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "kick", "entity_status", "explosion", "unload_chunk", "compression", "game_event", "heartbeat", "chunk", "world_event", "particle", "named_sound", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "teams", "scoreboard_score", "compass_position", "time", "title", "sign_text", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect"] + "s2c": ["entity_object_spawn", "entity_experience_orb", "global_entity_spawn", "entity_mob_spawn", "entity_painting", "entity_player", "entity_animation", "statistics", "block_break_animation", "block_data", "block_action", "block", "bossbar", "difficulty", "command_suggestions", "chat_message", "blocks", "container_action", "close_container", "open_container", "container_items", "container_properties", "container_item", "item_cooldown", "channel", "kick", "entity_event", "explosion", "unload_chunk", "compression", "game_event", "heartbeat", "chunk", "world_event", "particle", "named_sound", "initialize", "map", "relative_move", "movement_rotation", "rotation", "empty_move", "sign_editor", "player_abilities", "combat_event", "tab_list", "position_rotation", "entity_sleep", "entity_destroy", "entity_remove_effect", "resourcepack", "respawn", "head_rotation", "world_border", "camera", "hotbar_slot", "objective_position", "entity_data", "entity_attach", "velocity", "entity_equipment", "experience", "health", "objective", "teams", "scoreboard_score", "compass_position", "time", "title", "sign_text", "tab_list_text", "entity_collect", "teleport", "entity_attributes", "entity_effect"] } }, "66": { @@ -2109,7 +2109,7 @@ "name": "15w35a", "packets": { "c2s": ["heartbeat", "chat_message", "entity_interact", "ground_change", "position", "rotation", "position_rotation", "player_action", "use_item", "block_interact", "hotbar_slot", "swing_arm", "entity_action", "vehicle_input", "close_container", "container_click", "container_action", "item_stack_create", "container_button", "sign_text", "toggle_fly", "command_suggestions", "settings", "client_action", "channel", "entity_spectate", "resourcepack"], - "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_status", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "unload_chunk", "blocks", "block_action", "block_break_animation", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title", "compression", "tab_list_text", "resourcepack", "bossbar", "item_cooldown"] + "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_event", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "unload_chunk", "blocks", "block_action", "block_break_animation", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title", "compression", "tab_list_text", "resourcepack", "bossbar", "item_cooldown"] } }, "61": { @@ -2120,7 +2120,7 @@ "name": "15w34c", "packets": { "c2s": ["heartbeat", "chat_message", "entity_interact", "ground_change", "position", "rotation", "position_rotation", "player_action", "use_item", "block_interact", "hotbar_slot", "swing_arm", "entity_action", "vehicle_input", "close_container", "container_click", "container_action", "item_stack_create", "container_button", "sign_text", "toggle_fly", "command_suggestions", "settings", "client_action", "channel", "entity_spectate", "resourcepack"], - "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_status", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title", "compression", "tab_list_text", "resourcepack", "bossbar", "item_cooldown"] + "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_event", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title", "compression", "tab_list_text", "resourcepack", "bossbar", "item_cooldown"] } }, "59": { @@ -2167,7 +2167,7 @@ "name": "15w31a", "packets": { "c2s": ["heartbeat", "chat_message", "entity_interact", "ground_change", "position", "rotation", "position_rotation", "player_action", "use_item", "block_interact", "hotbar_slot", "swing_arm", "entity_action", "vehicle_input", "close_container", "container_click", "container_action", "item_stack_create", "container_button", "sign_text", "toggle_fly", "command_suggestions", "settings", "client_action", "channel", "entity_spectate", "resourcepack"], - "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_status", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title", "compression", "tab_list_text", "resourcepack", "bossbar"] + "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_event", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title", "compression", "tab_list_text", "resourcepack", "bossbar"] } }, "47": { @@ -2231,14 +2231,14 @@ "name": "14w32a", "packets": { "c2s": ["heartbeat", "chat_message", "entity_interact", "ground_change", "position", "rotation", "position_rotation", "player_action", "block_interact", "hotbar_slot", "swing_arm", "entity_action", "vehicle_input", "close_container", "container_click", "container_action", "item_stack_create", "container_button", "sign_text", "toggle_fly", "command_suggestions", "settings", "client_action", "channel", "entity_spectate", "resourcepack"], - "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_status", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title", "compression", "tab_list_text", "resourcepack", "nbt_response"] + "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_event", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title", "compression", "tab_list_text", "resourcepack", "nbt_response"] } }, "32": { "name": "14w31a", "packets": { "c2s": ["heartbeat", "chat_message", "entity_interact", "ground_change", "position", "rotation", "position_rotation", "player_action", "block_interact", "hotbar_slot", "swing_arm", "entity_action", "vehicle_input", "close_container", "container_click", "container_action", "item_stack_create", "container_button", "sign_text", "toggle_fly", "command_suggestions", "settings", "client_action", "channel", "entity_spectate", "resourcepack"], - "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_status", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title", "compression", "tab_list_text", "resourcepack"] + "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_event", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title", "compression", "tab_list_text", "resourcepack"] } }, "31": { @@ -2257,14 +2257,14 @@ "name": "14w28b", "packets": { "c2s": ["heartbeat", "chat_message", "entity_interact", "ground_change", "position", "rotation", "position_rotation", "player_action", "block_interact", "hotbar_slot", "swing_arm", "entity_action", "vehicle_input", "close_container", "container_click", "container_action", "item_stack_create", "container_button", "sign_text", "toggle_fly", "command_suggestions", "settings", "client_action", "channel", "entity_spectate"], - "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_status", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title", "compression", "tab_list_text"] + "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_event", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title", "compression", "tab_list_text"] } }, "27": { "name": "14w28a", "packets": { "c2s": ["heartbeat", "chat_message", "entity_interact", "ground_change", "position", "rotation", "position_rotation", "player_action", "block_interact", "hotbar_slot", "swing_arm", "entity_action", "vehicle_input", "close_container", "container_click", "container_action", "item_stack_create", "container_button", "sign_text", "toggle_fly", "command_suggestions", "settings", "client_action", "channel", "entity_spectate"], - "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_status", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title", "compression"] + "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_event", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title", "compression"] } }, "26": { @@ -2303,14 +2303,14 @@ "name": "14w20b", "packets": { "c2s": ["heartbeat", "chat_message", "entity_interact", "ground_change", "position", "rotation", "position_rotation", "player_action", "block_interact", "hotbar_slot", "swing_arm", "entity_action", "vehicle_input", "close_container", "container_click", "container_action", "item_stack_create", "container_button", "sign_text", "toggle_fly", "command_suggestions", "settings", "client_action", "channel", "entity_spectate"], - "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_status", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "legacy_map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title"] + "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_event", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "legacy_map", "block_data", "sign_editor", "statistics", "tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border", "title"] } }, "17": { "name": "14w19a", "packets": { "c2s": ["heartbeat", "chat_message", "entity_interact", "ground_change", "position", "rotation", "position_rotation", "player_action", "block_interact", "hotbar_slot", "swing_arm", "entity_action", "vehicle_input", "close_container", "container_click", "container_action", "item_stack_create", "container_button", "sign_text", "toggle_fly", "command_suggestions", "settings", "client_action", "channel", "entity_spectate"], - "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_status", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "legacy_map", "block_data", "sign_editor", "statistics", "legacy_tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border"] + "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_event", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "legacy_map", "block_data", "sign_editor", "statistics", "legacy_tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border"] } }, "16": { @@ -2321,7 +2321,7 @@ "name": "14w17a", "packets": { "c2s": ["heartbeat", "chat_message", "entity_interact", "ground_change", "position", "rotation", "position_rotation", "player_action", "block_interact", "hotbar_slot", "swing_arm", "entity_action", "vehicle_input", "close_container", "container_click", "container_action", "item_stack_create", "container_button", "sign_text", "toggle_fly", "command_suggestions", "settings", "client_action", "channel"], - "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_status", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "legacy_map", "block_data", "sign_editor", "statistics", "legacy_tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border"] + "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_event", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "legacy_map", "block_data", "sign_editor", "statistics", "legacy_tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera", "world_border"] } }, "14": { @@ -2348,7 +2348,7 @@ "name": "14w05b", "packets": { "c2s": ["heartbeat", "chat_message", "entity_interact", "ground_change", "position", "rotation", "position_rotation", "player_action", "block_interact", "hotbar_slot", "swing_arm", "entity_action", "vehicle_input", "close_container", "container_click", "container_action", "item_stack_create", "container_button", "sign_text", "toggle_fly", "command_suggestions", "settings", "client_action", "channel"], - "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_status", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "legacy_map", "block_data", "sign_editor", "statistics", "legacy_tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera"] + "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_event", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "legacy_map", "block_data", "sign_editor", "statistics", "legacy_tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event", "camera"] } }, "8": { @@ -2359,14 +2359,14 @@ "name": "14w04a", "packets": { "c2s": ["heartbeat", "chat_message", "entity_interact", "ground_change", "position", "rotation", "position_rotation", "player_action", "block_interact", "hotbar_slot", "swing_arm", "entity_action", "vehicle_input", "close_container", "container_click", "container_action", "item_stack_create", "container_button", "sign_text", "toggle_fly", "command_suggestions", "settings", "client_action", "channel"], - "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_status", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "legacy_map", "block_data", "sign_editor", "statistics", "legacy_tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event"] + "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_event", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "legacy_map", "block_data", "sign_editor", "statistics", "legacy_tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty", "combat_event"] } }, "6": { "name": "14w03b", "packets": { "c2s": ["heartbeat", "chat_message", "entity_interact", "ground_change", "position", "rotation", "position_rotation", "player_action", "block_interact", "hotbar_slot", "swing_arm", "entity_action", "vehicle_input", "close_container", "container_click", "container_action", "item_stack_create", "container_button", "sign_text", "toggle_fly", "command_suggestions", "settings", "client_action", "channel"], - "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_status", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "legacy_map", "block_data", "sign_editor", "statistics", "legacy_tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty"] + "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_event", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "legacy_map", "block_data", "sign_editor", "statistics", "legacy_tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick", "difficulty"] } }, "5": { @@ -2395,7 +2395,7 @@ "name": "13w41b", "packets": { "c2s": ["heartbeat", "chat_message", "entity_interact", "ground_change", "position", "rotation", "position_rotation", "player_action", "block_interact", "hotbar_slot", "swing_arm", "entity_action", "vehicle_input", "close_container", "container_click", "container_action", "item_stack_create", "container_button", "sign_text", "toggle_fly", "command_suggestions", "settings", "client_action", "channel"], - "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_status", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "legacy_map", "block_data", "sign_editor", "statistics", "legacy_tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick"] + "s2c": ["heartbeat", "initialize", "chat_message", "time", "entity_equipment", "compass_position", "health", "respawn", "position_rotation", "hotbar_slot", "entity_sleep", "entity_animation", "entity_player", "entity_collect", "entity_object_spawn", "entity_mob_spawn", "entity_painting", "entity_experience_orb", "velocity", "entity_destroy", "empty_move", "relative_move", "rotation", "movement_rotation", "teleport", "head_rotation", "entity_event", "entity_attach", "entity_data", "entity_effect", "entity_remove_effect", "experience", "entity_attributes", "chunk", "blocks", "block", "block_action", "block_break_animation", "chunks", "explosion", "world_event", "named_sound", "particle", "game_event", "global_entity_spawn", "open_container", "close_container", "container_item", "container_items", "container_properties", "container_action", "sign_text", "legacy_map", "block_data", "sign_editor", "statistics", "legacy_tab_list", "player_abilities", "command_suggestions", "objective", "scoreboard_score", "objective_position", "teams", "channel", "kick"] } } }