From 4a05a34ef32514e0cf44a70744dbacdafb8a13f5 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Thu, 21 Oct 2021 12:53:31 +0200 Subject: [PATCH] eros: allow double click on server card to connect --- .../minosoft/config/StaticConfiguration.kt | 6 +- .../bixilon/minosoft/config/server/Server.kt | 7 ++ .../main/play/server/ServerListController.kt | 103 ++++++++++-------- .../play/server/card/ServerCardController.kt | 4 +- .../gui/rendering/input/camera/Frustum.kt | 16 +-- .../de/bixilon/minosoft/util/logging/Log.kt | 8 +- 6 files changed, 86 insertions(+), 58 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/config/StaticConfiguration.kt b/src/main/java/de/bixilon/minosoft/config/StaticConfiguration.kt index f83896062..6e71f6a23 100644 --- a/src/main/java/de/bixilon/minosoft/config/StaticConfiguration.kt +++ b/src/main/java/de/bixilon/minosoft/config/StaticConfiguration.kt @@ -17,10 +17,10 @@ object StaticConfiguration { const val DEBUG_MODE = true // if true, additional checks will be made to validate data, ... Decreases performance const val BIOME_DEBUG_MODE = false // colors all biomes according to the biome hashCode const val DEBUG_SLOW_LOADING = false // if true, many Thread.sleep will be executed and the start will be delayed (by a lot) - const val SHOW_LOG_MESSAGES_IN_CHAT = true // prints all console messages in the chat box - const val REPLACE_SYSTEM_OUT_STREAMS = true + const val SHOW_LOG_MESSAGES_IN_CHAT = false // prints all console messages in the chat box + const val REPLACE_SYSTEM_OUT_STREAMS = true // Replace System.out and System.err with the custom Log system ones - @Deprecated(message = "Just for hud development purposes") + @Deprecated(message = "Just for hud development purposes; Will be removed once hud is merged") const val HUD_ONLY = false } diff --git a/src/main/java/de/bixilon/minosoft/config/server/Server.kt b/src/main/java/de/bixilon/minosoft/config/server/Server.kt index 5df23ea7e..b43ed745f 100644 --- a/src/main/java/de/bixilon/minosoft/config/server/Server.kt +++ b/src/main/java/de/bixilon/minosoft/config/server/Server.kt @@ -14,6 +14,7 @@ package de.bixilon.minosoft.config.server import com.squareup.moshi.Json +import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.data.assets.AssetsUtil import de.bixilon.minosoft.data.assets.FileAssetsManager import de.bixilon.minosoft.data.registries.versions.Version @@ -21,6 +22,7 @@ import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.gui.eros.main.play.server.card.ServerCard import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.status.StatusConnection +import de.bixilon.minosoft.protocol.network.connection.status.StatusConnectionStates import de.bixilon.minosoft.util.KUtil.synchronizedSetOf import java.util.* @@ -59,6 +61,11 @@ data class Server( @Transient var card: ServerCard? = null + val canConnect: Boolean + get() = ping?.state === StatusConnectionStates.PING_DONE + && ((forcedVersion ?: ping?.serverVersion) != null) + && Minosoft.config.config.account.selected?.connections?.containsKey(this) == false + init { if (id > nextServerId) { nextServerId = id + 1 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 630c0399d..db2ba5a45 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 @@ -34,6 +34,7 @@ import de.bixilon.minosoft.modding.event.events.connection.status.StatusConnecti import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection 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.network.connection.status.StatusConnectionStates import de.bixilon.minosoft.util.DNSUtil import de.bixilon.minosoft.util.KUtil.decide @@ -73,9 +74,23 @@ class ServerListController : EmbeddedJavaFXController(), Refreshable { addServerButtonFX.isVisible = !value } - override fun init() { - serverListViewFX.setCellFactory { ServerCardController.build() } + serverListViewFX.setCellFactory { + val controller = ServerCardController.build() + + controller.root.setOnMouseClicked { + if (it.clickCount != 2) { + return@setOnMouseClicked + } + val server = controller.lastServerCard?.server ?: return@setOnMouseClicked + if (!server.canConnect) { + return@setOnMouseClicked + } + + connect(server) + } + return@setCellFactory controller + } refreshList() @@ -84,6 +99,47 @@ class ServerListController : EmbeddedJavaFXController(), Refreshable { } } + fun connect(server: Server, ping: StatusConnection? = server.ping) { + val pingVersion = ping?.serverVersion ?: return + Eros.mainErosController.verifyAccount { account -> + DefaultThreadPool += { + val connection = PlayConnection( + address = server.ping?.realAddress ?: DNSUtil.getServerAddress(server.address), + account = account, + version = server.forcedVersion ?: pingVersion, + ) + account.connections[server] = connection + server.connections += connection + + connection.registerEvent(CallbackEventInvoker.of { event -> + if (event.state.disconnected) { + account.connections -= server + server.connections -= connection + } + JavaFXUtil.runLater { updateServer(server) } + }) + + connection.registerEvent(JavaFXEventInvoker.of { event -> + KickDialog( + title = "minosoft:connection.kick.title".toResourceLocation(), + header = "minosoft:connection.kick.header".toResourceLocation(), + description = TranslatableComponents.CONNECTION_KICK_DESCRIPTION(server, account), + reason = event.reason, + ).show() + }) + connection.registerEvent(JavaFXEventInvoker.of { event -> + 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() + }) + connection.connect() + } + } + } + override fun postInit() { root.setOnKeyPressed { serverListViewFX.selectionModel.select(null) } // ToDo: Only on escape; not working } @@ -229,48 +285,9 @@ class ServerListController : EmbeddedJavaFXController(), Refreshable { it.add(Button("Connect").apply { setOnAction { isDisable = true - val pingVersion = ping?.serverVersion ?: return@setOnAction - Eros.mainErosController.verifyAccount { account -> - DefaultThreadPool += { - val connection = PlayConnection( - address = serverCard.server.ping?.realAddress ?: DNSUtil.getServerAddress(serverCard.server.address), - account = account, - version = serverCard.server.forcedVersion ?: pingVersion, - ) - account.connections[serverCard.server] = connection - serverCard.server.connections += connection - - connection.registerEvent(CallbackEventInvoker.of { event -> - if (event.state.disconnected) { - account.connections -= serverCard.server - serverCard.server.connections -= connection - } - JavaFXUtil.runLater { updateServer(serverCard.server) } - }) - - connection.registerEvent(JavaFXEventInvoker.of { event -> - KickDialog( - title = "minosoft:connection.kick.title".toResourceLocation(), - header = "minosoft:connection.kick.header".toResourceLocation(), - description = TranslatableComponents.CONNECTION_KICK_DESCRIPTION(serverCard.server, account), - reason = event.reason, - ).show() - }) - connection.registerEvent(JavaFXEventInvoker.of { event -> - KickDialog( - title = "minosoft:connection.login_kick.title".toResourceLocation(), - header = "minosoft:connection.login_kick.header".toResourceLocation(), - description = TranslatableComponents.CONNECTION_LOGIN_KICK_DESCRIPTION(serverCard.server, account), - reason = event.reason, - ).show() - }) - connection.connect() - } - } + connect(serverCard.server, ping) } - isDisable = ping?.state !== StatusConnectionStates.PING_DONE || - ((serverCard.server.forcedVersion ?: ping.serverVersion) == null) || - Minosoft.config.config.account.selected?.connections?.containsKey(serverCard.server) == true + isDisable = !serverCard.server.canConnect // ToDo: Also disable, if currently connecting }, 4, 0) diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/card/ServerCardController.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/card/ServerCardController.kt index 90ee282ea..68c2958e9 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/card/ServerCardController.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/card/ServerCardController.kt @@ -50,8 +50,8 @@ class ServerCardController : AbstractCard() { @FXML private lateinit var serverVersionFX: Label - private var lastServerCard: ServerCard? = null - + var lastServerCard: ServerCard? = null + private set override fun clear() { faviconFX.image = JavaFXUtil.MINOSOFT_LOGO diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Frustum.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Frustum.kt index a9e0be74c..90c576319 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Frustum.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Frustum.kt @@ -120,14 +120,14 @@ class Frustum(private val camera: Camera) { for (i in 0 until Planes.VALUES.size) { if ( - (planes[i] dot Vec4d(min.x, min.y, min.z, 1.0f)) < 0.0f && - (planes[i] dot Vec4d(max.x, min.y, min.z, 1.0f)) < 0.0f && - (planes[i] dot Vec4d(min.x, max.y, min.z, 1.0f)) < 0.0f && - (planes[i] dot Vec4d(max.x, max.y, min.z, 1.0f)) < 0.0f && - (planes[i] dot Vec4d(min.x, min.y, max.z, 1.0f)) < 0.0f && - (planes[i] dot Vec4d(max.x, min.y, max.z, 1.0f)) < 0.0f && - (planes[i] dot Vec4d(min.x, max.y, max.z, 1.0f)) < 0.0f && - (planes[i] dot Vec4d(max.x, max.y, max.z, 1.0f)) < 0.0f + (planes[i] dot Vec4d(min.x, min.y, min.z, 1.0f)) < 0.0f + && (planes[i] dot Vec4d(max.x, min.y, min.z, 1.0f)) < 0.0f + && (planes[i] dot Vec4d(min.x, max.y, min.z, 1.0f)) < 0.0f + && (planes[i] dot Vec4d(max.x, max.y, min.z, 1.0f)) < 0.0f + && (planes[i] dot Vec4d(min.x, min.y, max.z, 1.0f)) < 0.0f + && (planes[i] dot Vec4d(max.x, min.y, max.z, 1.0f)) < 0.0f + && (planes[i] dot Vec4d(min.x, max.y, max.z, 1.0f)) < 0.0f + && (planes[i] dot Vec4d(max.x, max.y, max.z, 1.0f)) < 0.0f ) { return false } diff --git a/src/main/java/de/bixilon/minosoft/util/logging/Log.kt b/src/main/java/de/bixilon/minosoft/util/logging/Log.kt index e3a2c61aa..1e2499ed8 100644 --- a/src/main/java/de/bixilon/minosoft/util/logging/Log.kt +++ b/src/main/java/de/bixilon/minosoft/util/logging/Log.kt @@ -18,6 +18,8 @@ import de.bixilon.minosoft.config.StaticConfiguration import de.bixilon.minosoft.data.text.BaseComponent import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.data.text.TextComponent +import de.bixilon.minosoft.modding.event.events.InternalMessageReceiveEvent +import de.bixilon.minosoft.terminal.CLI import de.bixilon.minosoft.terminal.RunConfiguration import java.io.PrintStream import java.io.PrintWriter @@ -85,8 +87,10 @@ object Log { stream.println(message.ansiColoredMessage) - // val cliConnection = CLI.getCurrentConnection() - //cliConnection?.fireEvent(InternalMessageReceiveEvent(cliConnection, messageToSend.message)) + if (StaticConfiguration.SHOW_LOG_MESSAGES_IN_CHAT) { + val cliConnection = CLI.getCurrentConnection() + cliConnection?.fireEvent(InternalMessageReceiveEvent(cliConnection, messageToSend.message)) + } } catch (exception: Throwable) { SYSTEM_ERR_STREAM.println("Can not send log message $messageToSend!") }