refactor packet registry

This unifies s2c and c2s registries and partly reverts the last rewrite (!40).

It is now possible to register packets in multiple states (e.g. login and play). That will be required for 23w31a.
It also makes classes resolvable in the ide or static coverage reports.
This commit is contained in:
Bixilon 2023-09-18 20:48:12 +02:00
parent 5b6fb3bf51
commit 8e7275eaa8
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
286 changed files with 1297 additions and 1487 deletions

View File

@ -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")
}
}
}

View File

@ -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() {

View File

@ -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"])

View File

@ -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"])

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"])

View File

@ -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

View File

@ -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

View File

@ -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"])

View File

@ -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"])

View File

@ -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 <https://www.gnu.org/licenses/>.
*
* 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()
}

View File

@ -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

View File

@ -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

View File

@ -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 <https://www.gnu.org/licenses/>.
*
* 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)
}
}

View File

@ -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))

View File

@ -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) {

View File

@ -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,

View File

@ -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 {

View File

@ -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<Pane>(), Refreshable {
}
connection.events.register(JavaFXEventListener.of<KickEvent> { 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<LoginKickEvent> { 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() }

View File

@ -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(

View File

@ -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,

View File

@ -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,

View File

@ -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 {

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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(

View File

@ -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,

View File

@ -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")

View File

@ -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

View File

@ -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,

View File

@ -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)

View File

@ -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 <https://www.gnu.org/licenses/>.
*
* 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)
}

View File

@ -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,

View File

@ -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

View File

@ -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() {

View File

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

View File

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

View File

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

View File

@ -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<out Packet>,

View File

@ -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))
}
}

View File

@ -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<T : S2CPacket>(
val type: S2CPacketType,
val type: PacketType,
val packet: T,
)

View File

@ -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<S2CPacket>()
} 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)
}

View File

@ -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<C2SPacket>() {
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<Any>) {
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()

View File

@ -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
/**

View File

@ -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,

View File

@ -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?,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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 {

View File

@ -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) {

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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 {

View File

@ -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) {

View File

@ -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) {

View File

@ -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 {

View File

@ -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?,

View File

@ -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?,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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 {

View File

@ -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,

View File

@ -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(),

View File

@ -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,

View File

@ -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 {

View File

@ -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 {

View File

@ -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(),

View File

@ -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 {

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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 {

View File

@ -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 {

View File

@ -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,

View File

@ -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,

View File

@ -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 {

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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 {

View File

@ -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 {

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

Some files were not shown because too many files have changed in this diff Show More