From aaa195cdc6753db0aa6647aa2c89b3218faa1a38 Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Thu, 1 Aug 2024 19:48:58 +0200 Subject: [PATCH] port PlaySession to NetworkConnection --- .../minosoft/data/container/Container.kt | 2 +- .../actions/types/CloneContainerAction.kt | 2 +- .../actions/types/DropContainerAction.kt | 2 +- .../actions/types/FastMoveContainerAction.kt | 2 +- .../actions/types/PickAllContainerAction.kt | 2 +- .../actions/types/SimpleContainerAction.kt | 10 +-- .../actions/types/SlotSwapContainerAction.kt | 2 +- .../container/types/EnchantingContainer.kt | 2 +- .../data/container/types/PlayerInventory.kt | 2 +- .../player/local/MovementPacketSender.kt | 16 ++--- .../player/local/SignatureKeyManagement.kt | 17 ++--- .../event/world/handler/win/WinGameHandler.kt | 2 +- .../de/bixilon/minosoft/gui/RenderLoop.kt | 2 +- .../gui/eros/crash/ErosCrashReport.kt | 2 +- .../eros/dialog/session/ConnectingDialog.kt | 2 +- .../main/play/server/ServerListController.kt | 6 +- .../minosoft/gui/rendering/Rendering.kt | 4 +- .../rendering/gui/gui/screen/CreditsScreen.kt | 2 +- .../gui/gui/screen/SignEditorScreen.kt | 2 +- .../gui/gui/screen/menu/pause/PauseMenu.kt | 4 +- .../hud/elements/tab/TabListEntryElement.kt | 4 +- .../rendering/input/key/DebugKeyBindings.kt | 8 ++- .../input/interaction/AttackHandler.kt | 2 +- .../minosoft/input/interaction/DropHandler.kt | 2 +- .../input/interaction/HotbarHandler.kt | 4 +- .../input/interaction/InteractionManager.kt | 2 +- .../input/interaction/ItemPickHandler.kt | 2 +- .../breaking/creative/CreativeBreaker.kt | 2 +- .../breaking/survival/SurvivalDigger.kt | 6 +- .../input/interaction/use/LongUseHandler.kt | 2 +- .../input/interaction/use/ShortUseHandler.kt | 6 +- .../input/interaction/use/UseHandler.kt | 4 +- .../physics/parts/elytra/ElytraPhysics.kt | 2 +- .../protocol/connection/NetworkConnection.kt | 4 ++ .../protocol/connection/ServerConnection.kt | 1 + .../network/client/netty/NettyClient.kt | 7 -- .../network/session/play/PlaySession.kt | 69 ++++++++++--------- .../play/channel/login/LoginChannelManager.kt | 6 +- .../play/channel/play/PlayChannelManager.kt | 9 ++- .../play/channel/vanila/BrandHandler.kt | 2 +- .../play/settings/ClientSettingsManager.kt | 9 ++- .../session/play/util/ChunkReceiver.kt | 2 +- .../network/session/play/util/SessionUtil.kt | 18 ++--- .../packets/s2c/common/CompressionS2CP.kt | 4 +- .../packets/s2c/common/HeartbeatS2CP.kt | 2 +- .../protocol/packets/s2c/common/KickS2CP.kt | 6 +- .../protocol/packets/s2c/common/PingS2CP.kt | 2 +- .../common/resourcepack/ResourcepackS2CP.kt | 2 +- .../packets/s2c/configuration/ReadyS2CP.kt | 6 +- .../packets/s2c/login/EncryptionS2CP.kt | 8 ++- .../protocol/packets/s2c/login/SuccessS2CP.kt | 11 +-- .../packets/s2c/play/ReconfigureS2CP.kt | 6 +- .../s2c/play/entity/move/MoveVehicleS2CP.kt | 2 +- .../play/entity/move/PositionRotationS2CP.kt | 4 +- .../s2c/play/entity/player/HealthS2CP.kt | 2 +- .../terminal/commands/SessionManageCommand.kt | 2 +- .../terminal/commands/session/DebugCommand.kt | 2 +- .../java/de/bixilon/minosoft/util/KUtil.kt | 2 +- 58 files changed, 172 insertions(+), 147 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/container/Container.kt b/src/main/java/de/bixilon/minosoft/data/container/Container.kt index a5f149aca..2e5716c23 100644 --- a/src/main/java/de/bixilon/minosoft/data/container/Container.kt +++ b/src/main/java/de/bixilon/minosoft/data/container/Container.kt @@ -202,7 +202,7 @@ abstract class Container( if (!force && session.player.items.opened == this) { session.player.items.opened = null - session.network.send(CloseContainerC2SP(id)) + session.connection.send(CloseContainerC2SP(id)) } session.events.fire(ContainerCloseEvent(session, this)) diff --git a/src/main/java/de/bixilon/minosoft/data/container/actions/types/CloneContainerAction.kt b/src/main/java/de/bixilon/minosoft/data/container/actions/types/CloneContainerAction.kt index 579b9f8cd..9f0572b08 100644 --- a/src/main/java/de/bixilon/minosoft/data/container/actions/types/CloneContainerAction.kt +++ b/src/main/java/de/bixilon/minosoft/data/container/actions/types/CloneContainerAction.kt @@ -33,7 +33,7 @@ class CloneContainerAction( this.copied = stack // TODO (1.18.2): use creative inventory packet - session.network.send(ContainerClickC2SP(containerId, container.serverRevision, slot, 3, 0, container.actions.createId(this), slotsOf(), stack)) + session.connection.send(ContainerClickC2SP(containerId, container.serverRevision, slot, 3, 0, container.actions.createId(this), slotsOf(), stack)) container.floatingItem = stack } diff --git a/src/main/java/de/bixilon/minosoft/data/container/actions/types/DropContainerAction.kt b/src/main/java/de/bixilon/minosoft/data/container/actions/types/DropContainerAction.kt index f703ce1b1..e1ce6cce7 100644 --- a/src/main/java/de/bixilon/minosoft/data/container/actions/types/DropContainerAction.kt +++ b/src/main/java/de/bixilon/minosoft/data/container/actions/types/DropContainerAction.kt @@ -40,7 +40,7 @@ class DropContainerAction( } val actionId = container.actions.createId(this) - session.network.send(ContainerClickC2SP(containerId, container.serverRevision, slot, 4, if (stack) 1 else 0, actionId, slotsOf(slot to item), null)) + session.connection.send(ContainerClickC2SP(containerId, container.serverRevision, slot, 4, if (stack) 1 else 0, actionId, slotsOf(slot to item), null)) // TODO (1.18.2): use creative inventory packet container.commit() diff --git a/src/main/java/de/bixilon/minosoft/data/container/actions/types/FastMoveContainerAction.kt b/src/main/java/de/bixilon/minosoft/data/container/actions/types/FastMoveContainerAction.kt index f4bb1af5f..47f7b7a99 100644 --- a/src/main/java/de/bixilon/minosoft/data/container/actions/types/FastMoveContainerAction.kt +++ b/src/main/java/de/bixilon/minosoft/data/container/actions/types/FastMoveContainerAction.kt @@ -96,7 +96,7 @@ class FastMoveContainerAction( } } - session.network.send(ContainerClickC2SP(containerId, container.serverRevision, this.slot, 1, 0, container.actions.createId(this), changes, null)) + session.connection.send(ContainerClickC2SP(containerId, container.serverRevision, this.slot, 1, 0, container.actions.createId(this), changes, null)) } finally { container.commit() } diff --git a/src/main/java/de/bixilon/minosoft/data/container/actions/types/PickAllContainerAction.kt b/src/main/java/de/bixilon/minosoft/data/container/actions/types/PickAllContainerAction.kt index f0e123dc0..da5592e7a 100644 --- a/src/main/java/de/bixilon/minosoft/data/container/actions/types/PickAllContainerAction.kt +++ b/src/main/java/de/bixilon/minosoft/data/container/actions/types/PickAllContainerAction.kt @@ -67,7 +67,7 @@ class PickAllContainerAction( return } container.floatingItem = floating - session.network.send(ContainerClickC2SP(containerId, container.serverRevision, this.slot, 6, 0, container.actions.createId(this), changes, floating)) + session.connection.send(ContainerClickC2SP(containerId, container.serverRevision, this.slot, 6, 0, container.actions.createId(this), changes, floating)) } finally { container.commit() } diff --git a/src/main/java/de/bixilon/minosoft/data/container/actions/types/SimpleContainerAction.kt b/src/main/java/de/bixilon/minosoft/data/container/actions/types/SimpleContainerAction.kt index bc7df8039..d469b292d 100644 --- a/src/main/java/de/bixilon/minosoft/data/container/actions/types/SimpleContainerAction.kt +++ b/src/main/java/de/bixilon/minosoft/data/container/actions/types/SimpleContainerAction.kt @@ -47,7 +47,7 @@ class SimpleContainerAction( } container.floatingItem = floatingItem - session.network.send(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.actions.createId(this), slotsOf(slot to item), floatingItem)) + session.connection.send(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.actions.createId(this), slotsOf(slot to item), floatingItem)) } private fun putItem(session: PlaySession, containerId: Int, container: Container, floatingItem: ItemStack) { @@ -59,7 +59,7 @@ class SimpleContainerAction( } else { floatingItem.item._count-- // don't use decrease, item + container is already locked } - return session.network.send(ContainerClickC2SP(containerId, container.serverRevision, null, 0, count.ordinal, container.actions.createId(this), slotsOf(), null)) + return session.connection.send(ContainerClickC2SP(containerId, container.serverRevision, null, 0, count.ordinal, container.actions.createId(this), slotsOf(), null)) } var target = container[slot] val slotType = container.getSlotType(slot) @@ -93,7 +93,7 @@ class SimpleContainerAction( } else { container.floatingItem = null } - session.network.send(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.actions.createId(this), slotsOf(slot to target), container.floatingItem)) + session.connection.send(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.actions.createId(this), slotsOf(slot to target), container.floatingItem)) return } if (target != null && slotType?.canRemove(container, slot, target) != true) { @@ -109,13 +109,13 @@ class SimpleContainerAction( if (count == ContainerCounts.ALL || (!matches && target != null)) { container.floatingItem = target container[slot] = floatingItem - session.network.send(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.actions.createId(this), slotsOf(slot to floatingItem), target)) + session.connection.send(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.actions.createId(this), slotsOf(slot to floatingItem), target)) } else { floatingItem.item.count-- container.floatingItem = floatingItem target = floatingItem.copy(count = 1) container[slot] = target - session.network.send(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.actions.createId(this), slotsOf(slot to target), floatingItem)) + session.connection.send(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.actions.createId(this), slotsOf(slot to target), floatingItem)) } } diff --git a/src/main/java/de/bixilon/minosoft/data/container/actions/types/SlotSwapContainerAction.kt b/src/main/java/de/bixilon/minosoft/data/container/actions/types/SlotSwapContainerAction.kt index cbdfb03f7..3c52bb106 100644 --- a/src/main/java/de/bixilon/minosoft/data/container/actions/types/SlotSwapContainerAction.kt +++ b/src/main/java/de/bixilon/minosoft/data/container/actions/types/SlotSwapContainerAction.kt @@ -37,7 +37,7 @@ class SlotSwapContainerAction( container[this.sourceId] = target container[targetId] = source - session.network.send(ContainerClickC2SP(containerId, container.serverRevision, sourceId, 2, this.target.button, container.actions.createId(this), slotsOf(sourceId to target, targetId to source), source)) + session.connection.send(ContainerClickC2SP(containerId, container.serverRevision, sourceId, 2, this.target.button, container.actions.createId(this), slotsOf(sourceId to target, targetId to source), source)) } finally { container.commit() diff --git a/src/main/java/de/bixilon/minosoft/data/container/types/EnchantingContainer.kt b/src/main/java/de/bixilon/minosoft/data/container/types/EnchantingContainer.kt index 8783ca0d6..cdc4cb64b 100644 --- a/src/main/java/de/bixilon/minosoft/data/container/types/EnchantingContainer.kt +++ b/src/main/java/de/bixilon/minosoft/data/container/types/EnchantingContainer.kt @@ -99,7 +99,7 @@ class EnchantingContainer(session: PlaySession, type: ContainerType, title: Chat throw IllegalStateException("Can not enchant $index!") } val id = this.id ?: return - session.network.send(ContainerButtonC2SP(id, index)) + session.connection.send(ContainerButtonC2SP(id, index)) } private object LapislazuliSlot : SlotType { diff --git a/src/main/java/de/bixilon/minosoft/data/container/types/PlayerInventory.kt b/src/main/java/de/bixilon/minosoft/data/container/types/PlayerInventory.kt index 8b45f0417..c1fecf01a 100644 --- a/src/main/java/de/bixilon/minosoft/data/container/types/PlayerInventory.kt +++ b/src/main/java/de/bixilon/minosoft/data/container/types/PlayerInventory.kt @@ -105,7 +105,7 @@ class PlayerInventory( override fun onOpen() { if (session.version < V_17W13B) { - session.network.send(ClientActionC2SP(ClientActionC2SP.ClientActions.OPEN_INVENTORY)) + session.connection.send(ClientActionC2SP(ClientActionC2SP.ClientActions.OPEN_INVENTORY)) } } 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 e5562d74f..fa6fccd3d 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 @@ -50,7 +50,7 @@ class MovementPacketSender( if (this.sprinting == sprinting) { return } - session.network.send(EntityActionC2SP(player, session, sprinting.decide(EntityActionC2SP.EntityActions.START_SPRINTING, EntityActionC2SP.EntityActions.STOP_SPRINTING))) + session.connection.send(EntityActionC2SP(player, session, sprinting.decide(EntityActionC2SP.EntityActions.START_SPRINTING, EntityActionC2SP.EntityActions.STOP_SPRINTING))) this.sprinting = sprinting } @@ -58,7 +58,7 @@ class MovementPacketSender( if (this.sneaking == sneaking) { return } - session.network.send(EntityActionC2SP(player, session, sneaking.decide(EntityActionC2SP.EntityActions.START_SNEAKING, EntityActionC2SP.EntityActions.STOP_SNEAKING))) + session.connection.send(EntityActionC2SP(player, session, sneaking.decide(EntityActionC2SP.EntityActions.START_SNEAKING, EntityActionC2SP.EntityActions.STOP_SNEAKING))) this.sneaking = sneaking } @@ -70,7 +70,7 @@ class MovementPacketSender( return } this.flying = flying - session.network.send(ToggleFlyC2SP(abilities)) + session.connection.send(ToggleFlyC2SP(abilities)) } private fun sendMovement(position: Vec3d, rotation: EntityRotation, onGround: Boolean) { @@ -87,7 +87,7 @@ class MovementPacketSender( onGround != this.onGround -> GroundChangeC2SP(onGround) else -> null } - packet?.let { session.network.send(it) } + packet?.let { session.connection.send(it) } if (sendPosition) { this.lastPacket = 0 @@ -111,17 +111,17 @@ class MovementPacketSender( } private fun sendVehicle(vehicle: Entity) { - session.network.send(RotationC2SP(player.physics.rotation, player.physics.onGround)) - session.network.send(VehicleInputC2SP(physics.input.sideways, physics.input.forwards, player.input.jump, player.input.sneak)) + session.connection.send(RotationC2SP(player.physics.rotation, player.physics.onGround)) + session.connection.send(VehicleInputC2SP(physics.input.sideways, physics.input.forwards, player.input.jump, player.input.sneak)) if (vehicle == player || !vehicle.clientControlled) { return } - session.network.send(MoveVehicleC2SP(vehicle.physics.position, vehicle.physics.rotation)) + session.connection.send(MoveVehicleC2SP(vehicle.physics.position, vehicle.physics.rotation)) sendSprinting(player.isSprinting) } fun sendPositionRotation() { - session.network.send(PositionRotationC2SP(physics.position, physics.eyeY, physics.rotation, physics.onGround)) + session.connection.send(PositionRotationC2SP(physics.position, physics.eyeY, physics.rotation, physics.onGround)) } override fun tick() { diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/player/local/SignatureKeyManagement.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/player/local/SignatureKeyManagement.kt index 747ae5796..5d26c4915 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/player/local/SignatureKeyManagement.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/player/local/SignatureKeyManagement.kt @@ -48,8 +48,8 @@ class SignatureKeyManagement( private fun registerRefresh(millis: Int) { runLater(millis) { - val connected = session.connection.nullCast()?.state != null - if (session.error != null || (session.established && !connected) || (connected && !session.network.encrypted)) { + val connection = session.connection.nullCast() ?: return@runLater + if (session.error != null || (session.established && !connection.active) || (connection.active && !connection.client!!.encrypted)) { // session is dead return@runLater } @@ -89,16 +89,13 @@ class SignatureKeyManagement( fun sendSession() { val key = key?.playerKey ?: return - if (session.version.versionId < ProtocolVersions.V_22W43A) { + if (session.version.versionId < ProtocolVersions.V_22W43A) return + if (session.connection !is NetworkConnection) return + if (session.connection.state != ProtocolStates.PLAY) return + if (!session.connection.client!!.encrypted) { return } - if (session.connection !is NetworkConnection || session.connection.state != ProtocolStates.PLAY) { - return - } - if (!session.network.encrypted) { - return - } - session.network.send(SessionDataC2SP(session.sessionId, key)) + session.connection.send(SessionDataC2SP(session.sessionId, key)) } companion object { 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 97ec10acc..ce6b3b27b 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 @@ -26,7 +26,7 @@ object WinGameHandler : GameEventHandler { val credits = data.toInt() == 0x01 session.events.fire(WinGameEvent(session, credits)) if (!credits) { - session.network.send(ClientActionC2SP(ClientActionC2SP.ClientActions.PERFORM_RESPAWN)) + session.connection.send(ClientActionC2SP(ClientActionC2SP.ClientActions.PERFORM_RESPAWN)) } } } diff --git a/src/main/java/de/bixilon/minosoft/gui/RenderLoop.kt b/src/main/java/de/bixilon/minosoft/gui/RenderLoop.kt index e0ca02090..2804baa0a 100644 --- a/src/main/java/de/bixilon/minosoft/gui/RenderLoop.kt +++ b/src/main/java/de/bixilon/minosoft/gui/RenderLoop.kt @@ -126,6 +126,6 @@ class RenderLoop( context.window.destroy() Log.log(LogMessageType.RENDERING) { "Render window destroyed!" } // disconnect - context.session.network.disconnect() + context.session.terminate() } } diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/crash/ErosCrashReport.kt b/src/main/java/de/bixilon/minosoft/gui/eros/crash/ErosCrashReport.kt index 4629bcb61..afaf35a92 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/crash/ErosCrashReport.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/crash/ErosCrashReport.kt @@ -110,7 +110,7 @@ class ErosCrashReport : JavaFXWindowController() { }) catchAll(executor = { for (session in PlaySession.ACTIVE_CONNECTIONS.toSynchronizedSet()) { - session.network.disconnect() + session.terminate() } }) diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/dialog/session/ConnectingDialog.kt b/src/main/java/de/bixilon/minosoft/gui/eros/dialog/session/ConnectingDialog.kt index a364d2a8a..8f94dcb82 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/dialog/session/ConnectingDialog.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/dialog/session/ConnectingDialog.kt @@ -66,7 +66,7 @@ class ConnectingDialog( @FXML fun cancel() { - session.network.disconnect() + session.terminate() close() } 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 c1232898b..9326bf02a 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 @@ -13,6 +13,7 @@ package de.bixilon.minosoft.gui.eros.main.play.server +import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.collections.CollectionUtil.toSynchronizedSet import de.bixilon.kutil.concurrent.pool.DefaultThreadPool.async import de.bixilon.kutil.latch.CallbackLatch @@ -174,7 +175,7 @@ class ServerListController : EmbeddedJavaFXController(), Refreshable { } session.events.register(JavaFXEventListener.of { event -> - (if (session.network.state == ProtocolStates.LOGIN) KickDialog( + val dialog = if (session.connection.unsafeCast().state == ProtocolStates.LOGIN) KickDialog( title = "minosoft:session.login_kick.title".toResourceLocation(), header = "minosoft:session.login_kick.header".toResourceLocation(), description = TranslatableComponents.CONNECTION_LOGIN_KICK_DESCRIPTION(server, account), @@ -184,7 +185,8 @@ class ServerListController : EmbeddedJavaFXController(), Refreshable { header = "minosoft:session.kick.header".toResourceLocation(), description = TranslatableComponents.CONNECTION_KICK_DESCRIPTION(server, account), reason = event.reason, - )).show() + ) + dialog.show() }) val latch = CallbackLatch(1) val assetsDialog = VerifyAssetsDialog(latch = latch).apply { show() } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/Rendering.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/Rendering.kt index 9b80e5fd4..674549267 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/Rendering.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/Rendering.kt @@ -57,7 +57,7 @@ class Rendering(private val session: PlaySession) { audioPlayer.exit() } catch (ignored: Throwable) { } - session.network.disconnect() + session.terminate() session.error = exception latch.minus(audioLatch.count) } @@ -85,7 +85,7 @@ class Rendering(private val session: PlaySession) { session.events.fire(WindowCloseEvent(context, window = context.window)) } catch (ignored: Throwable) { } - session.network.disconnect() + session.terminate() session.error = exception } } 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 a0718d5f7..fde0c1c23 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 @@ -47,7 +47,7 @@ class CreditsScreen( override fun onClose() { super.onClose() - guiRenderer.session.network.send(ClientActionC2SP(ClientActionC2SP.ClientActions.PERFORM_RESPAWN)) + guiRenderer.session.connection.send(ClientActionC2SP(ClientActionC2SP.ClientActions.PERFORM_RESPAWN)) } companion object { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/SignEditorScreen.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/SignEditorScreen.kt index 9ea465481..21346b014 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/SignEditorScreen.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/SignEditorScreen.kt @@ -126,7 +126,7 @@ class SignEditorScreen( override fun onClose() { super.onClose() val text = getText() - guiRenderer.session.network.send(SignTextC2SP(blockPosition, this.side, text)) + guiRenderer.session.connection.send(SignTextC2SP(blockPosition, this.side, text)) } override fun forceSilentApply() { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/pause/PauseMenu.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/pause/PauseMenu.kt index c078d0ed5..e845ee6f9 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/pause/PauseMenu.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/pause/PauseMenu.kt @@ -40,11 +40,11 @@ class PauseMenu(guiRenderer: GUIRenderer) : Menu(guiRenderer) { this += ButtonElement(guiRenderer, "menu.pause.back_to_game".i18n()) { guiRenderer.gui.popOrPause() } this += ButtonElement(guiRenderer, "menu.pause.options.debug".i18n()) { guiRenderer.gui.push(DebugMenu) } - this += NeutralizedButtonElement(guiRenderer, "menu.pause.disconnect".i18n(), "menu.pause.disconnect.confirm".i18n()) { guiRenderer.session.network.disconnect() } + this += NeutralizedButtonElement(guiRenderer, "menu.pause.disconnect".i18n(), "menu.pause.disconnect.confirm".i18n()) { guiRenderer.session.terminate() } if (ErosProfileManager.selected.general.hideErosOnceConnected) { add(ButtonElement(guiRenderer, "menu.pause.show_eros".i18n()) { JavaFXUtil.runLater { Eros.setVisibility(true) } }) } - this += NeutralizedButtonElement(guiRenderer, "menu.pause.exit".i18n(), "menu.pause.exit.confirm".i18n()) { guiRenderer.session.network.disconnect(); ShutdownManager.shutdown() } + this += NeutralizedButtonElement(guiRenderer, "menu.pause.exit".i18n(), "menu.pause.exit.confirm".i18n()) { guiRenderer.session.terminate(); ShutdownManager.shutdown() } } companion object : GUIBuilder> { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/tab/TabListEntryElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/tab/TabListEntryElement.kt index 16f890982..d8a3f1129 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/tab/TabListEntryElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/tab/TabListEntryElement.kt @@ -14,6 +14,7 @@ package de.bixilon.minosoft.gui.rendering.gui.hud.elements.tab import de.bixilon.kotlinglm.vec2.Vec2 +import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.minosoft.data.abilities.Gamemodes import de.bixilon.minosoft.data.entities.entities.player.additional.PlayerAdditional @@ -32,6 +33,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.gui.rendering.util.vec.vec2.Vec2Util.EMPTY +import de.bixilon.minosoft.protocol.connection.NetworkConnection import de.bixilon.minosoft.util.KUtil.nullCompare import java.util.* @@ -80,7 +82,7 @@ class TabListEntryElement( init { background = ColorElement(guiRenderer, size, RGBColor(120, 120, 120, 130)) - DefaultThreadPool += { skinElement.texture = context.textures.skins.getSkin(uuid, item.properties, fetch = guiRenderer.session.network.encrypted, async = false)?.texture } + DefaultThreadPool += { skinElement.texture = context.textures.skins.getSkin(uuid, item.properties, fetch = guiRenderer.session.connection.nullCast()?.client?.encrypted == true, async = false)?.texture } forceSilentApply() } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/key/DebugKeyBindings.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/key/DebugKeyBindings.kt index 69ba5d6c6..91ace96f0 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/key/DebugKeyBindings.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/key/DebugKeyBindings.kt @@ -13,6 +13,7 @@ package de.bixilon.minosoft.gui.rendering.input.key +import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.primitive.BooleanUtil.decide import de.bixilon.minosoft.config.StaticConfiguration import de.bixilon.minosoft.config.key.KeyActions @@ -23,6 +24,7 @@ import de.bixilon.minosoft.gui.rendering.RenderContext import de.bixilon.minosoft.gui.rendering.input.key.manager.binding.BindingsManager import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes import de.bixilon.minosoft.gui.rendering.system.window.CursorModes +import de.bixilon.minosoft.protocol.connection.NetworkConnection import de.bixilon.minosoft.protocol.network.session.play.PlaySession import de.bixilon.minosoft.util.KUtil.format @@ -46,8 +48,9 @@ object DebugKeyBindings { KeyActions.STICKY to setOf(KeyCodes.KEY_I), ignoreConsumer = true, )) { + val connection = session.connection.nullCast() ?: return@register session.util.sendDebugMessage("Pausing incoming packets: ${it.format()}") - session.network.receiver.paused = it + connection.client!!.receiver.paused = it } register(PAUSE_OUTGOING, KeyBinding( @@ -55,8 +58,9 @@ object DebugKeyBindings { KeyActions.STICKY to setOf(KeyCodes.KEY_O), ignoreConsumer = true, )) { + val connection = session.connection.nullCast() ?: return@register session.util.sendDebugMessage("Pausing outgoing packets: ${it.format()}") - session.network.sender.paused = it + connection.client!!.sender.paused = it } } diff --git a/src/main/java/de/bixilon/minosoft/input/interaction/AttackHandler.kt b/src/main/java/de/bixilon/minosoft/input/interaction/AttackHandler.kt index 98e09ce2e..0894e1d85 100644 --- a/src/main/java/de/bixilon/minosoft/input/interaction/AttackHandler.kt +++ b/src/main/java/de/bixilon/minosoft/input/interaction/AttackHandler.kt @@ -64,7 +64,7 @@ class AttackHandler( return } - interactions.session.network.send(EntityAttackC2SP(target.entity.id ?: return, player.isSneaking)) + interactions.session.connection.send(EntityAttackC2SP(target.entity.id ?: return, player.isSneaking)) if (player.gamemode == Gamemodes.SPECTATOR) { return } 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 91e1323b2..b970f7b86 100644 --- a/src/main/java/de/bixilon/minosoft/input/interaction/DropHandler.kt +++ b/src/main/java/de/bixilon/minosoft/input/interaction/DropHandler.kt @@ -30,7 +30,7 @@ class DropHandler( session.player.items.inventory.getHotbarSlot()?.item?.decreaseCount() PlayerActionC2SP.Actions.DROP_ITEM } - rateLimiter += { session.network.send(PlayerActionC2SP(type)) } + rateLimiter += { session.connection.send(PlayerActionC2SP(type)) } } fun draw() { 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 bec10c60b..2d25b836a 100644 --- a/src/main/java/de/bixilon/minosoft/input/interaction/HotbarHandler.kt +++ b/src/main/java/de/bixilon/minosoft/input/interaction/HotbarHandler.kt @@ -35,7 +35,7 @@ class HotbarHandler( return } session.player.items.hotbar = slot - slotLimiter += { session.network.send(HotbarSlotC2SP(slot)) } + slotLimiter += { session.connection.send(HotbarSlotC2SP(slot)) } } private fun canSwap(): Boolean { @@ -53,7 +53,7 @@ class HotbarHandler( val main = inventory[EquipmentSlots.MAIN_HAND] val off = inventory[EquipmentSlots.OFF_HAND] - session.network.send(PlayerActionC2SP(PlayerActionC2SP.Actions.SWAP_ITEMS_IN_HAND)) + session.connection.send(PlayerActionC2SP(PlayerActionC2SP.Actions.SWAP_ITEMS_IN_HAND)) if (main == null && off == null) { // both are air, we can't swap 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 8790edd44..74ba4217b 100644 --- a/src/main/java/de/bixilon/minosoft/input/interaction/InteractionManager.kt +++ b/src/main/java/de/bixilon/minosoft/input/interaction/InteractionManager.kt @@ -73,7 +73,7 @@ class InteractionManager(val camera: SessionCamera) : Tickable { fun swingHand(hand: Hands) { swingArmRateLimiter += { - session.network.send(SwingArmC2SP(hand)) + session.connection.send(SwingArmC2SP(hand)) session.player.swingHand(hand) } } diff --git a/src/main/java/de/bixilon/minosoft/input/interaction/ItemPickHandler.kt b/src/main/java/de/bixilon/minosoft/input/interaction/ItemPickHandler.kt index 4130fa34a..620ec2d6b 100644 --- a/src/main/java/de/bixilon/minosoft/input/interaction/ItemPickHandler.kt +++ b/src/main/java/de/bixilon/minosoft/input/interaction/ItemPickHandler.kt @@ -88,7 +88,7 @@ class ItemPickHandler( interactions.hotbar.selectSlot(slot) val selectedSlot = session.player.items.hotbar + PlayerInventory.HOTBAR_OFFSET - rateLimiter += { session.network.send(ItemStackCreateC2SP(selectedSlot, stack)) } + rateLimiter += { session.connection.send(ItemStackCreateC2SP(selectedSlot, stack)) } session.player.items.inventory[selectedSlot] = stack // ToDo: Use ItemPickC2SP 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 504ae29fb..330ec297c 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 @@ -29,7 +29,7 @@ class CreativeBreaker( val sequence = breaking.executor.start(target.blockPosition, target.state) breaking.executor.finish() - session.network.send(PlayerActionC2SP(PlayerActionC2SP.Actions.START_DIGGING, target.blockPosition, target.direction, sequence)) + session.connection.send(PlayerActionC2SP(PlayerActionC2SP.Actions.START_DIGGING, target.blockPosition, target.direction, sequence)) breaking.interactions.swingHand(Hands.MAIN) return true } 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 7357ba1c7..1487fe2c7 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 @@ -42,7 +42,7 @@ class SurvivalDigger( private fun cancel(status: BlockDigStatus) { breaking.executor.cancel() - session.network.send(PlayerActionC2SP(PlayerActionC2SP.Actions.CANCELLED_DIGGING, status.position, sequence = 0)) + session.connection.send(PlayerActionC2SP(PlayerActionC2SP.Actions.CANCELLED_DIGGING, status.position, sequence = 0)) this.status = null } @@ -50,7 +50,7 @@ class SurvivalDigger( val sequence = breaking.executor.finish() this.status = null if (!instant) { - session.network.send(PlayerActionC2SP(PlayerActionC2SP.Actions.FINISHED_DIGGING, status.position, status.direction, sequence)) + session.connection.send(PlayerActionC2SP(PlayerActionC2SP.Actions.FINISHED_DIGGING, status.position, status.direction, sequence)) breaking.addCooldown() } breaking.interactions.swingHand(Hands.MAIN) @@ -118,7 +118,7 @@ class SurvivalDigger( } else { nextStatus = BlockDigStatus(target.blockPosition, target.state, slot, productivity, target.direction) val sequence = breaking.executor.start(target.blockPosition, target.state) - session.network.send(PlayerActionC2SP(PlayerActionC2SP.Actions.START_DIGGING, target.blockPosition, target.direction, sequence)) + session.connection.send(PlayerActionC2SP(PlayerActionC2SP.Actions.START_DIGGING, target.blockPosition, target.direction, sequence)) } if (instant || nextStatus.progress >= 1.0f) { 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 dcfa55ff3..01f38da49 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 @@ -51,7 +51,7 @@ class LongUseHandler( stack.item.item.finishUse(session.player, using.hand, stack, using.tick) } if (!force) { - session.network.send(PlayerActionC2SP(PlayerActionC2SP.Actions.RELEASE_ITEM)) + session.connection.send(PlayerActionC2SP(PlayerActionC2SP.Actions.RELEASE_ITEM)) } clearUsing() } diff --git a/src/main/java/de/bixilon/minosoft/input/interaction/use/ShortUseHandler.kt b/src/main/java/de/bixilon/minosoft/input/interaction/use/ShortUseHandler.kt index e1abcdbeb..98cc920c9 100644 --- a/src/main/java/de/bixilon/minosoft/input/interaction/use/ShortUseHandler.kt +++ b/src/main/java/de/bixilon/minosoft/input/interaction/use/ShortUseHandler.kt @@ -81,7 +81,7 @@ class ShortUseHandler( if (result == InteractionResults.INVALID) { return true } - session.network.send(BlockInteractC2SP( + session.connection.send(BlockInteractC2SP( position = target.blockPosition, direction = target.direction, cursorPosition = Vec3(target.cursor), @@ -105,7 +105,7 @@ class ShortUseHandler( val entityId = session.world.entities.getId(target.entity) ?: return InteractionResults.IGNORED // used in armor stands val player = session.player - session.network.send(EntityInteractPositionC2SP(entityId, Vec3(target.position), hand, player.isSneaking)) + session.connection.send(EntityInteractPositionC2SP(entityId, Vec3(target.position), hand, player.isSneaking)) if (player.gamemode == Gamemodes.SPECTATOR) { return InteractionResults.IGNORED @@ -125,7 +125,7 @@ class ShortUseHandler( // ToDo: return hit.entity.interact(hand) (e.g. equipping saddle) return InteractionResults.IGNORED } finally { - session.world.entities.getId(target.entity)?.let { session.network.send(EntityEmptyInteractC2SP(it, hand, player.isSneaking)) } + session.world.entities.getId(target.entity)?.let { session.connection.send(EntityEmptyInteractC2SP(it, hand, player.isSneaking)) } } } 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 8b02fb689..72d7e6918 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 @@ -137,9 +137,9 @@ class UseHandler( fun sendItemUse(hand: Hands, stack: ItemStack) { if (session.version < V_15W31A) { - session.network.send(BlockInteractC2SP(null, null, null, stack, hand, false, 1)) + session.connection.send(BlockInteractC2SP(null, null, null, stack, hand, false, 1)) } - session.network.send(UseItemC2SP(hand, interactions.session.sequence.getAndIncrement())) + session.connection.send(UseItemC2SP(hand, interactions.session.sequence.getAndIncrement())) } private companion object { diff --git a/src/main/java/de/bixilon/minosoft/physics/parts/elytra/ElytraPhysics.kt b/src/main/java/de/bixilon/minosoft/physics/parts/elytra/ElytraPhysics.kt index 15a5f661d..f12ad6031 100644 --- a/src/main/java/de/bixilon/minosoft/physics/parts/elytra/ElytraPhysics.kt +++ b/src/main/java/de/bixilon/minosoft/physics/parts/elytra/ElytraPhysics.kt @@ -35,7 +35,7 @@ object ElytraPhysics { private fun LocalPlayerPhysics.startElytraFalling() { entity.isFlyingWithElytra = true val id = entity.session.world.entities.getId(entity) ?: return - entity.session.network.send(EntityActionC2SP(id, EntityActionC2SP.EntityActions.START_ELYTRA_FLYING)) + entity.session.connection.send(EntityActionC2SP(id, EntityActionC2SP.EntityActions.START_ELYTRA_FLYING)) } private fun LocalPlayerPhysics.canStartElytraFlight(): Boolean { diff --git a/src/main/java/de/bixilon/minosoft/protocol/connection/NetworkConnection.kt b/src/main/java/de/bixilon/minosoft/protocol/connection/NetworkConnection.kt index 602708acf..c21b74e2a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/connection/NetworkConnection.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/connection/NetworkConnection.kt @@ -54,6 +54,10 @@ class NetworkConnection( client?.disconnect() } + override fun detach() { + client?.detach() + } + override fun send(packet: C2SPacket) { client?.send(packet) } diff --git a/src/main/java/de/bixilon/minosoft/protocol/connection/ServerConnection.kt b/src/main/java/de/bixilon/minosoft/protocol/connection/ServerConnection.kt index 3416f4311..b29414822 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/connection/ServerConnection.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/connection/ServerConnection.kt @@ -23,6 +23,7 @@ interface ServerConnection { fun connect(session: Session) fun disconnect() + fun detach() fun send(packet: C2SPacket) } diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/NettyClient.kt b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/NettyClient.kt index 5e06bd56a..d0b1e93b9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/NettyClient.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/netty/NettyClient.kt @@ -15,7 +15,6 @@ package de.bixilon.minosoft.protocol.network.network.client.netty import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.exception.ExceptionUtil.catchAll -import de.bixilon.kutil.observer.DataObserver.Companion.observe import de.bixilon.minosoft.config.profile.profiles.other.OtherProfileManager import de.bixilon.minosoft.protocol.connection.NetworkConnection import de.bixilon.minosoft.protocol.network.network.client.ClientNetwork @@ -54,8 +53,6 @@ class NettyClient( override val connection: NetworkConnection, val session: Session, ) : SimpleChannelInboundHandler(), ClientNetwork { - @Deprecated("unused") - var state = ProtocolStates.HANDSHAKE // TODO override val sender = PacketSender(this) override val receiver = PacketReceiver(this, session) override var compressionThreshold = -1 @@ -65,10 +62,6 @@ class NettyClient( override var detached = false private set - init { - connection::state.observe(this) { this.state = it ?: ProtocolStates.HANDSHAKE } - } - override fun connect() { val natives = if (connection.native) TransportNatives.get() else NioNatives val bootstrap = Bootstrap() diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/session/play/PlaySession.kt b/src/main/java/de/bixilon/minosoft/protocol/network/session/play/PlaySession.kt index d6f746375..60c103a6c 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/session/play/PlaySession.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/session/play/PlaySession.kt @@ -55,7 +55,6 @@ import de.bixilon.minosoft.modding.event.master.GlobalEventMaster import de.bixilon.minosoft.modding.loader.phase.DefaultModPhases import de.bixilon.minosoft.protocol.connection.NetworkConnection import de.bixilon.minosoft.protocol.connection.ServerConnection -import de.bixilon.minosoft.protocol.network.network.client.netty.NettyClient import de.bixilon.minosoft.protocol.network.session.Session import de.bixilon.minosoft.protocol.network.session.play.channel.DefaultChannelHandlers import de.bixilon.minosoft.protocol.network.session.play.channel.SessionChannelHandler @@ -83,8 +82,6 @@ class PlaySession( override val version: Version, val profiles: SelectedProfiles = SelectedProfiles(), ) : Session() { - @Deprecated("connection") - val network = NettyClient(connection.unsafeCast(), this) val sessionId = KUtil.secureRandomUUID() val settingsManager = ClientSettingsManager(this) val registries = Registries().apply { updateFlattened(version.flattened) } @@ -132,16 +129,18 @@ class PlaySession( RegistriesFixer.register(this) DefaultChannelHandlers.register(this) - connection.unsafeCast()::state.observe(this) { - if (it != null) { + connection::active.observe(this) { + if (it) { ACTIVE_CONNECTIONS += this ERRORED_CONNECTIONS -= this - state = PlaySessionStates.HANDSHAKING - val address = connection.unsafeCast().address - network.send(HandshakeC2SP(address.hostname, address.port, HandshakeC2SP.Actions.PLAY, version.protocolId)) - // after sending it, switch to next state - network.connection.state = ProtocolStates.LOGIN + if (connection is NetworkConnection) { + state = PlaySessionStates.HANDSHAKING + val address = connection.unsafeCast().address + connection.send(HandshakeC2SP(address.hostname, address.port, HandshakeC2SP.Actions.PLAY, version.protocolId)) + // after sending it, switch to next state + connection.state = ProtocolStates.LOGIN + } } else { established = true assetsManager.unload() @@ -152,38 +151,40 @@ class PlaySession( } } } - connection.unsafeCast()::state.observe(this) { state -> - when (state) { - ProtocolStates.HANDSHAKE, ProtocolStates.STATUS -> Broken("Invalid state!") - ProtocolStates.LOGIN -> { - this.state = PlaySessionStates.LOGGING_IN - world.biomes.init() - this.network.send(StartC2SP(this.player, this.sessionId)) - } - - ProtocolStates.PLAY -> { - this.state = PlaySessionStates.JOINING - - if (CLI.session == null) { - CLI.session = this + if (connection is NetworkConnection) { + connection::state.observe(this) { state -> + when (state) { + ProtocolStates.STATUS -> Broken("Invalid state!") + ProtocolStates.LOGIN -> { + this.state = PlaySessionStates.LOGGING_IN + world.biomes.init() + connection.send(StartC2SP(this.player, this.sessionId)) } - events.listen { - val additionalPrefix = when (it.message.type.position) { - ChatTextPositions.SYSTEM -> "[SYSTEM] " - ChatTextPositions.HOTBAR -> "[HOTBAR] " - else -> "" + ProtocolStates.PLAY -> { + this.state = PlaySessionStates.JOINING + + if (CLI.session == null) { + CLI.session = this } - Log.log(LogMessageType.CHAT_IN, level = if (it.message.type.position == ChatTextPositions.HOTBAR) LogLevels.VERBOSE else LogLevels.INFO, prefix = ChatComponent.of(additionalPrefix)) { it.message.text } } - } - else -> Unit + else -> Unit + } } } ticker.init() GlobalEventMaster.fire(PlaySessionCreateEvent(this)) + + events.listen { + val additionalPrefix = when (it.message.type.position) { + ChatTextPositions.SYSTEM -> "[SYSTEM] " + ChatTextPositions.HOTBAR -> "[HOTBAR] " + else -> "" + } + Log.log(LogMessageType.CHAT_IN, level = if (it.message.type.position == ChatTextPositions.HOTBAR) LogLevels.VERBOSE else LogLevels.INFO, prefix = ChatComponent.of(additionalPrefix)) { it.message.text } + } } @@ -248,7 +249,7 @@ class PlaySession( private fun establish(latch: AbstractLatch?) { latch?.dec() // remove initial value - network.connect() + connection.connect(this) state = PlaySessionStates.ESTABLISHING } @@ -265,7 +266,7 @@ class PlaySession( } override fun terminate() { - network.disconnect() + connection.disconnect() state = PlaySessionStates.DISCONNECTED } diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/session/play/channel/login/LoginChannelManager.kt b/src/main/java/de/bixilon/minosoft/protocol/network/session/play/channel/login/LoginChannelManager.kt index 3d047c940..dbaaaca3e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/session/play/channel/login/LoginChannelManager.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/session/play/channel/login/LoginChannelManager.kt @@ -13,8 +13,10 @@ package de.bixilon.minosoft.protocol.network.session.play.channel.login +import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.collections.CollectionUtil.toSynchronizedList import de.bixilon.minosoft.data.registries.identified.ResourceLocation +import de.bixilon.minosoft.protocol.connection.NetworkConnection import de.bixilon.minosoft.protocol.network.session.play.PlaySession import de.bixilon.minosoft.protocol.network.session.play.channel.ChannelManager import de.bixilon.minosoft.protocol.packets.c2s.login.ChannelC2SP @@ -54,9 +56,9 @@ class LoginChannelManager( } fun send(messageId: Int, data: ByteArray?) { - if (session.network.state != ProtocolStates.LOGIN) { + if (session.connection.nullCast()?.state != ProtocolStates.LOGIN) { throw IllegalStateException("Not in login!") } - session.network.send(ChannelC2SP(messageId, data)) + session.connection.send(ChannelC2SP(messageId, data)) } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/session/play/channel/play/PlayChannelManager.kt b/src/main/java/de/bixilon/minosoft/protocol/network/session/play/channel/play/PlayChannelManager.kt index 3f6d2dad9..58bc4b42c 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/session/play/channel/play/PlayChannelManager.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/session/play/channel/play/PlayChannelManager.kt @@ -13,8 +13,10 @@ package de.bixilon.minosoft.protocol.network.session.play.channel.play +import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.collections.CollectionUtil.toSynchronizedList import de.bixilon.minosoft.data.registries.identified.ResourceLocation +import de.bixilon.minosoft.protocol.connection.NetworkConnection import de.bixilon.minosoft.protocol.network.session.play.PlaySession import de.bixilon.minosoft.protocol.network.session.play.channel.ChannelManager import de.bixilon.minosoft.protocol.packets.c2s.common.ChannelC2SP @@ -45,9 +47,10 @@ class PlayChannelManager( } fun send(channel: ResourceLocation, data: ByteArray) { - if (session.network.state != ProtocolStates.LOGIN) { - throw IllegalStateException("Not in login!") + // TODO: Play == ready? what if offline? should not crash + if (session.connection.nullCast()?.state != ProtocolStates.PLAY) { + throw IllegalStateException("Not in play!") } - session.network.send(ChannelC2SP(channel, data)) + session.connection.send(ChannelC2SP(channel, data)) } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/session/play/channel/vanila/BrandHandler.kt b/src/main/java/de/bixilon/minosoft/protocol/network/session/play/channel/vanila/BrandHandler.kt index 43f5b1580..f588bffb3 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/session/play/channel/vanila/BrandHandler.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/session/play/channel/vanila/BrandHandler.kt @@ -38,7 +38,7 @@ object BrandHandler { private fun PlaySession.sendBrand(channel: ResourceLocation, brand: String) { val buffer = PlayOutByteBuffer(this) buffer.writeBareByteArray(brand.encodeNetwork()) - network.send(ChannelC2SP(channel, buffer)) + connection.send(ChannelC2SP(channel, buffer)) } fun PlaySession.sendBrand() { diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/session/play/settings/ClientSettingsManager.kt b/src/main/java/de/bixilon/minosoft/protocol/network/session/play/settings/ClientSettingsManager.kt index 579c8201e..7f0374dca 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/session/play/settings/ClientSettingsManager.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/session/play/settings/ClientSettingsManager.kt @@ -13,9 +13,11 @@ package de.bixilon.minosoft.protocol.network.session.play.settings +import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.observer.DataObserver.Companion.observe import de.bixilon.kutil.observer.set.SetObserver.Companion.observeSet import de.bixilon.minosoft.data.language.LanguageUtil +import de.bixilon.minosoft.protocol.connection.NetworkConnection import de.bixilon.minosoft.protocol.network.session.play.PlaySession import de.bixilon.minosoft.protocol.packets.c2s.common.SettingsC2SP import de.bixilon.minosoft.protocol.protocol.ProtocolStates @@ -66,15 +68,16 @@ class ClientSettingsManager( } private fun canSendSettings(): Boolean { - if (session.network.state == ProtocolStates.PLAY) return true - if (session.version > V_1_20_2_PRE1 && session.network.state == ProtocolStates.CONFIGURATION) return true + // TODO: what if not a NetworkConnection + if (session.connection.nullCast()?.state == ProtocolStates.PLAY) return true + if (session.version > V_1_20_2_PRE1 && session.connection.nullCast()?.state == ProtocolStates.CONFIGURATION) return true return false } fun sendClientSettings() { if (!canSendSettings()) return - session.network.send(SettingsC2SP( + session.connection.send(SettingsC2SP( locale = language, chatColors = session.profiles.gui.chat.chatColors, viewDistance = session.profiles.block.viewDistance, diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/session/play/util/ChunkReceiver.kt b/src/main/java/de/bixilon/minosoft/protocol/network/session/play/util/ChunkReceiver.kt index c176ad5b5..f6ff2e8e5 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/session/play/util/ChunkReceiver.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/session/play/util/ChunkReceiver.kt @@ -53,7 +53,7 @@ class ChunkReceiver( val end = nanos() val delta = end - start - session.network.send(NextChunkBatchC2SP(100.0f)) // TODO: calculate size + session.connection.send(NextChunkBatchC2SP(100.0f)) // TODO: calculate size reset() } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/session/play/util/SessionUtil.kt b/src/main/java/de/bixilon/minosoft/protocol/network/session/play/util/SessionUtil.kt index 3285c13ec..43275a8a8 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/session/play/util/SessionUtil.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/session/play/util/SessionUtil.kt @@ -13,6 +13,7 @@ package de.bixilon.minosoft.protocol.network.session.play.util +import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.minosoft.commands.nodes.ChatNode import de.bixilon.minosoft.commands.nodes.SessionNode.Companion.COMMAND_PREFIX import de.bixilon.minosoft.commands.stack.CommandStack @@ -30,6 +31,7 @@ import de.bixilon.minosoft.modding.event.events.chat.ChatMessageEvent 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.connection.NetworkConnection import de.bixilon.minosoft.protocol.network.session.play.PlaySession import de.bixilon.minosoft.protocol.packets.c2s.play.chat.ChatMessageC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.chat.CommandC2SP @@ -70,7 +72,7 @@ class SessionUtil( } Log.log(LogMessageType.CHAT_OUT) { trimmed } if (!session.version.requiresSignedChat) { - return session.network.send(ChatMessageC2SP(trimmed)) + return session.connection.send(ChatMessageC2SP(trimmed)) } val keyManagement = session.player.keyManagement @@ -78,7 +80,7 @@ class SessionUtil( try { val key = keyManagement.key if (key == null) { - session.network.send(SignedChatMessageC2SP(message.encodeNetwork(), time = Instant.now(), salt = 0, signature = null, false, Acknowledgement.EMPTY)) + session.connection.send(SignedChatMessageC2SP(message.encodeNetwork(), time = Instant.now(), salt = 0, signature = null, false, Acknowledgement.EMPTY)) return } sendSignedMessage(key, trimmed) @@ -95,13 +97,13 @@ class SessionUtil( val acknowledgement = Acknowledgement.EMPTY - val signature: ByteArray? = if (session.network.encrypted) { + val signature: ByteArray? = if (session.connection.nullCast()?.client?.encrypted == true) { signer.signMessage(privateKey.private, message, null, salt, uuid, time, acknowledgement.lastSeen) } else { null } - session.network.send(SignedChatMessageC2SP(message.encodeNetwork(), time = time, salt = salt, signature = signature, false, acknowledgement)) + session.connection.send(SignedChatMessageC2SP(message.encodeNetwork(), time = time, salt = salt, signature = signature, false, acknowledgement)) } fun sendCommand(command: String, stack: CommandStack) { @@ -112,7 +114,7 @@ class SessionUtil( ChatUtil.validateChatMessage(session, trimmed) val time = Instant.now() if (stack.size == 0) { - session.network.send(CommandC2SP(trimmed, time, 0L, emptyMap(), false, Acknowledgement.EMPTY)) // TODO: remove + session.connection.send(CommandC2SP(trimmed, time, 0L, emptyMap(), false, Acknowledgement.EMPTY)) // TODO: remove Log.log(LogMessageType.OTHER, LogLevels.WARN) { "Command $trimmed failed to parse!" } throw IllegalArgumentException("Empty command stack! Did the command fail to parse?") } @@ -126,11 +128,11 @@ class SessionUtil( try { val privateKey = keyManagement.key privateKey?.let { SignatureKeyManagement.verify(privateKey, time) } - if (privateKey != null && session.network.encrypted && session.profiles.session.signature.signCommands) { + if (privateKey != null && (session.connection is NetworkConnection && session.connection.client!!.encrypted) && session.profiles.session.signature.signCommands) { signature = stack.sign(signer, privateKey.private, salt, time) } - session.network.send(CommandC2SP(trimmed, time, salt, signature, false, acknowledgement)) + session.connection.send(CommandC2SP(trimmed, time, salt, signature, false, acknowledgement)) } finally { keyManagement.release() } @@ -155,6 +157,6 @@ class SessionUtil( } fun respawn() { - session.network.send(ClientActionC2SP(ClientActionC2SP.ClientActions.PERFORM_RESPAWN)) + session.connection.send(ClientActionC2SP(ClientActionC2SP.ClientActions.PERFORM_RESPAWN)) } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/CompressionS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/CompressionS2CP.kt index b558859a4..f50355f49 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/CompressionS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/CompressionS2CP.kt @@ -12,6 +12,8 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.common +import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.minosoft.protocol.connection.NetworkConnection import de.bixilon.minosoft.protocol.network.session.play.PlaySession import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -24,7 +26,7 @@ class CompressionS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { override fun handle(session: PlaySession) { - session.network.setupCompression(threshold) + session.connection.unsafeCast().client!!.setupCompression(threshold) } override fun log(reducedLog: Boolean) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/HeartbeatS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/HeartbeatS2CP.kt index edd62f12c..6ee546508 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/HeartbeatS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/HeartbeatS2CP.kt @@ -34,7 +34,7 @@ class HeartbeatS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { } override fun handle(session: PlaySession) { - session.network.send(HeartbeatC2SP(id)) + session.connection.send(HeartbeatC2SP(id)) } override fun log(reducedLog: Boolean) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/KickS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/KickS2CP.kt index 5ea8ceca8..c61bbfc57 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/KickS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/KickS2CP.kt @@ -12,8 +12,10 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.common +import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.modding.event.events.KickEvent +import de.bixilon.minosoft.protocol.connection.NetworkConnection import de.bixilon.minosoft.protocol.network.session.play.PlaySession import de.bixilon.minosoft.protocol.network.session.play.PlaySessionStates import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket @@ -25,7 +27,7 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType class KickS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { - val reason: ChatComponent = if (buffer.session.network.state == ProtocolStates.LOGIN && buffer.versionId >= V_23W42A) buffer.readChatComponent() else buffer.readNbtChatComponent() + val reason: ChatComponent = if (buffer.session.connection.unsafeCast().state == ProtocolStates.LOGIN && buffer.versionId >= V_23W42A) buffer.readChatComponent() else buffer.readNbtChatComponent() override fun handle(session: PlaySession) { if (!session.connection.active) { @@ -34,7 +36,7 @@ class KickS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { session.events.fire(KickEvent(session, reason)) // got kicked session.terminate() - if (session.network.state == ProtocolStates.LOGIN) { + if (session.connection.unsafeCast().state == ProtocolStates.LOGIN) { session.state = PlaySessionStates.ERROR } else { session.state = PlaySessionStates.KICKED diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/PingS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/PingS2CP.kt index a8f09c3a7..07233ba35 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/PingS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/PingS2CP.kt @@ -25,7 +25,7 @@ class PingS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val payload = buffer.readInt() override fun handle(session: PlaySession) { - session.network.send(PongC2SP(payload)) + session.connection.send(PongC2SP(payload)) } override fun log(reducedLog: Boolean) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/resourcepack/ResourcepackS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/resourcepack/ResourcepackS2CP.kt index 70b036c2e..100b926dd 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/resourcepack/ResourcepackS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/common/resourcepack/ResourcepackS2CP.kt @@ -50,7 +50,7 @@ class ResourcepackS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { if (session.events.fire(event)) { return } - session.network.send(ResourcepackC2SP(uuid, hash, ResourcepackC2SP.ResourcePackStates.SUCCESSFULLY)) // ToDo: This fakes it, to not get kicked on most servers + session.connection.send(ResourcepackC2SP(uuid, hash, ResourcepackC2SP.ResourcePackStates.SUCCESSFULLY)) // ToDo: This fakes it, to not get kicked on most servers } override fun log(reducedLog: Boolean) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/configuration/ReadyS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/configuration/ReadyS2CP.kt index d8aea9d22..aea9cfe11 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/configuration/ReadyS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/configuration/ReadyS2CP.kt @@ -12,6 +12,8 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.configuration +import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.minosoft.protocol.connection.NetworkConnection import de.bixilon.minosoft.protocol.network.session.play.PlaySession import de.bixilon.minosoft.protocol.packets.c2s.configuration.ReadyC2SP import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket @@ -26,8 +28,8 @@ class ReadyS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { override fun handle(session: PlaySession) { session.util.prepareSpawn() - session.network.send(ReadyC2SP()) - session.network.state = ProtocolStates.PLAY + session.connection.send(ReadyC2SP()) + session.connection.unsafeCast().state = ProtocolStates.PLAY } override fun log(reducedLog: Boolean) { 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 d4307c304..e0044f368 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,6 +14,8 @@ package de.bixilon.minosoft.protocol.packets.s2c.login import com.google.common.primitives.Longs import de.bixilon.kutil.base64.Base64Util.toBase64 +import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.minosoft.protocol.connection.NetworkConnection import de.bixilon.minosoft.protocol.network.session.play.PlaySession import de.bixilon.minosoft.protocol.packets.c2s.login.EncryptionC2SP import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket @@ -56,12 +58,12 @@ class EncryptionS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { signature.update(Longs.toByteArray(salt)) val signed = signature.sign() - session.network.send(EncryptionC2SP(encryptedSecretKey, EncryptionSignatureData(salt, signed))) + session.connection.send(EncryptionC2SP(encryptedSecretKey, EncryptionSignatureData(salt, signed))) } else { - session.network.send(EncryptionC2SP(encryptedSecretKey, CryptManager.encryptData(publicKey, nonce))) + session.connection.send(EncryptionC2SP(encryptedSecretKey, CryptManager.encryptData(publicKey, nonce))) } - session.network.setupEncryption(encryptCipher, decryptCipher) + session.connection.unsafeCast().client!!.setupEncryption(encryptCipher, decryptCipher) } override fun log(reducedLog: Boolean) { 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 fa2985cef..658dd2262 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 @@ -12,9 +12,10 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.login -import de.bixilon.kutil.primitive.BooleanUtil.decide +import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.minosoft.data.entities.entities.player.properties.PlayerProperties import de.bixilon.minosoft.data.text.ChatComponent +import de.bixilon.minosoft.protocol.connection.NetworkConnection import de.bixilon.minosoft.protocol.network.session.play.PlaySession import de.bixilon.minosoft.protocol.network.session.play.channel.vanila.BrandHandler.sendBrand import de.bixilon.minosoft.protocol.packets.c2s.login.ConfigureC2SP @@ -28,18 +29,18 @@ import de.bixilon.minosoft.util.logging.LogMessageType import java.util.* class SuccessS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { - val uuid: UUID = (buffer.versionId < ProtocolVersions.V_20W12A).decide({ buffer.readUUIDString() }, { buffer.readUUID() }) + val uuid: UUID = if (buffer.versionId < ProtocolVersions.V_20W12A) buffer.readUUIDString() else buffer.readUUID() val name: String = buffer.readString() val properties: PlayerProperties? = if (buffer.versionId >= ProtocolVersions.V_22W17A) buffer.readPlayerProperties() else null override fun handle(session: PlaySession) { if (session.version.hasConfigurationState) { - session.network.send(ConfigureC2SP()) - session.network.state = ProtocolStates.CONFIGURATION + session.connection.send(ConfigureC2SP()) + session.connection.unsafeCast().state = ProtocolStates.CONFIGURATION session.sendBrand() session.settingsManager.sendClientSettings() } else { - session.network.state = ProtocolStates.PLAY + session.connection.unsafeCast().state = ProtocolStates.PLAY } val playerEntity = session.player diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ReconfigureS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ReconfigureS2CP.kt index c7958f4ff..1105d879f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ReconfigureS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ReconfigureS2CP.kt @@ -12,6 +12,8 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.play +import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.minosoft.protocol.connection.NetworkConnection import de.bixilon.minosoft.protocol.network.session.play.PlaySession import de.bixilon.minosoft.protocol.packets.c2s.play.ReconfigureC2SP import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket @@ -26,8 +28,8 @@ class ReconfigureS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { override fun handle(session: PlaySession) { session.util.resetWorld() - session.network.send(ReconfigureC2SP()) - session.network.state = ProtocolStates.CONFIGURATION + session.connection.send(ReconfigureC2SP()) + session.connection.unsafeCast().state = ProtocolStates.CONFIGURATION } override fun log(reducedLog: Boolean) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/MoveVehicleS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/MoveVehicleS2CP.kt index 5773737da..7ccdffff6 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/MoveVehicleS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/move/MoveVehicleS2CP.kt @@ -35,7 +35,7 @@ class MoveVehicleS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { } vehicle.forceTeleport(position) vehicle.forceRotate(EntityRotation(yaw, pitch)) - session.network.send(MoveVehicleC2SP(vehicle.physics.position, vehicle.physics.rotation)) + session.connection.send(MoveVehicleC2SP(vehicle.physics.position, vehicle.physics.rotation)) } override fun log(reducedLog: Boolean) { 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 18438d35a..2b9db3d6f 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 @@ -86,9 +86,9 @@ class PositionRotationS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { entity.forceRotate(EntityRotation(yaw, pitch)) if (session.version.versionId >= ProtocolVersions.V_15W42A) { - session.network.send(ConfirmTeleportC2SP(teleportId)) + session.connection.send(ConfirmTeleportC2SP(teleportId)) } - session.network.send(PositionRotationC2SP(position, position.y + entity.physics.eyeHeight, rotation, onGround)) + session.connection.send(PositionRotationC2SP(position, position.y + entity.physics.eyeHeight, rotation, onGround)) if (session.state == PlaySessionStates.SPAWNING) { session.state = PlaySessionStates.PLAYING diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/HealthS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/HealthS2CP.kt index c025d87eb..ebd9dcecf 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/HealthS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/player/HealthS2CP.kt @@ -47,7 +47,7 @@ class HealthS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { } if (session.profiles.session.autoRespawn) { - session.network.send(ClientActionC2SP(ClientActionC2SP.ClientActions.PERFORM_RESPAWN)) + session.connection.send(ClientActionC2SP(ClientActionC2SP.ClientActions.PERFORM_RESPAWN)) } } } diff --git a/src/main/java/de/bixilon/minosoft/terminal/commands/SessionManageCommand.kt b/src/main/java/de/bixilon/minosoft/terminal/commands/SessionManageCommand.kt index 867ae0d74..520439425 100644 --- a/src/main/java/de/bixilon/minosoft/terminal/commands/SessionManageCommand.kt +++ b/src/main/java/de/bixilon/minosoft/terminal/commands/SessionManageCommand.kt @@ -44,7 +44,7 @@ object SessionManageCommand : Command { LiteralNode("select").apply { addFilter(false) { stack, sessions -> val session = sessions.first() - if (session.network.connection.state == null) { + if (!session.connection.active) { throw CommandException("Session $session not established anymore!") } CLI.session = session diff --git a/src/main/java/de/bixilon/minosoft/terminal/commands/session/DebugCommand.kt b/src/main/java/de/bixilon/minosoft/terminal/commands/session/DebugCommand.kt index abd5fd5fe..43fffdc40 100644 --- a/src/main/java/de/bixilon/minosoft/terminal/commands/session/DebugCommand.kt +++ b/src/main/java/de/bixilon/minosoft/terminal/commands/session/DebugCommand.kt @@ -25,7 +25,7 @@ object DebugCommand : SessionCommand { override var node = LiteralNode("debug") .addChild(LiteralNode("allowFly", executor = { it.fly() }, allowArguments = true).addChild(ArgumentNode("value", BooleanParser, executable = true))) .addChild(LiteralNode("network").addChild( - LiteralNode("detach", executor = { it.session.network.detach(); it.print.sendDebugMessage("Now you are alone on the wire...") }), + LiteralNode("detach", executor = { it.session.connection.detach(); it.print.sendDebugMessage("Now you are alone on the wire...") }), )) .addChild(LiteralNode("cache").addChild(LiteralNode("biome", executor = { it.session.world.biomes.resetCache(); it.print.sendDebugMessage("Biome cache cleared!") }))) diff --git a/src/main/java/de/bixilon/minosoft/util/KUtil.kt b/src/main/java/de/bixilon/minosoft/util/KUtil.kt index 2dafc8a42..6a05e36f9 100644 --- a/src/main/java/de/bixilon/minosoft/util/KUtil.kt +++ b/src/main/java/de/bixilon/minosoft/util/KUtil.kt @@ -294,7 +294,7 @@ object KUtil { URLProtocolStreamHandlers.register("resource", ResourceURLHandler) ShutdownManager += { for (session in PlaySession.ACTIVE_CONNECTIONS.toSynchronizedSet()) { - session.network.disconnect() + session.terminate() } } ShutdownManager += {