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"]
}
}
}