diff --git a/doc/Shader.md b/doc/Shader.md index da83cd5cc..15297205c 100644 --- a/doc/Shader.md +++ b/doc/Shader.md @@ -12,4 +12,4 @@ followed by `in`. So `vinPosition` is a valid name. ## Uniforms -Prefixed with u +Prefixed with `u` diff --git a/src/main/java/de/bixilon/minosoft/data/text/TranslatableComponents.kt b/src/main/java/de/bixilon/minosoft/data/text/TranslatableComponents.kt index 3063ce6fe..2746374f0 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/TranslatableComponents.kt +++ b/src/main/java/de/bixilon/minosoft/data/text/TranslatableComponents.kt @@ -14,14 +14,18 @@ package de.bixilon.minosoft.data.text import de.bixilon.minosoft.Minosoft +import de.bixilon.minosoft.config.server.Server +import de.bixilon.minosoft.data.accounts.Account import de.bixilon.minosoft.util.KUtil.asResourceLocation object TranslatableComponents { - val GENERAL_EMPTY = "minosoft:general.empty".asResourceLocation() - val GENERAL_CANCEL = "minosoft:general.cancel".asResourceLocation() - val GENERAL_CONFIRM = "minosoft:general.confirm".asResourceLocation() - val GENERAL_DELETE = "minosoft:general.delete".asResourceLocation() + val GENERAL_EMPTY = "minosoft:general.empty".asResourceLocation() + val GENERAL_CANCEL = "minosoft:general.cancel".asResourceLocation() + val GENERAL_CONFIRM = "minosoft:general.confirm".asResourceLocation() + val GENERAL_DELETE = "minosoft:general.delete".asResourceLocation() - val EROS_DELETE_SERVER_CONFIRM_DESCRIPTION = { name: ChatComponent, address: String -> Minosoft.LANGUAGE_MANAGER.translate("minosoft:server_info.delete.dialog.description".asResourceLocation(), null, name, address) } - val ACCOUNT_CARD_CONNECTION_COUNT = { count: Int -> Minosoft.LANGUAGE_MANAGER.translate("minosoft:main.account.card.connection_count".asResourceLocation(), null, count) } + val EROS_DELETE_SERVER_CONFIRM_DESCRIPTION = { name: ChatComponent, address: String -> Minosoft.LANGUAGE_MANAGER.translate("minosoft:server_info.delete.dialog.description".asResourceLocation(), null, name, address) } + val ACCOUNT_CARD_CONNECTION_COUNT = { count: Int -> Minosoft.LANGUAGE_MANAGER.translate("minosoft:main.account.card.connection_count".asResourceLocation(), null, count) } + val CONNECTION_KICK_DESCRIPTION = { server: Server, account: Account -> Minosoft.LANGUAGE_MANAGER.translate("minosoft:connection.kick.description".asResourceLocation(), null, server.name, account.username) } + val CONNECTION_LOGIN_KICK_DESCRIPTION = { server: Server, account: Account -> Minosoft.LANGUAGE_MANAGER.translate("minosoft:connection.login_kick.description".asResourceLocation(), null, server.name, account.username) } } diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/dialogs/connection/KickDialog.kt b/src/main/java/de/bixilon/minosoft/gui/eros/dialogs/connection/KickDialog.kt new file mode 100644 index 000000000..43d3c446c --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/eros/dialogs/connection/KickDialog.kt @@ -0,0 +1,61 @@ +/* + * Minosoft + * Copyright (C) 2021 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.gui.eros.dialogs.connection + +import de.bixilon.minosoft.Minosoft +import de.bixilon.minosoft.data.text.ChatComponent +import de.bixilon.minosoft.gui.eros.controller.JavaFXWindowController +import de.bixilon.minosoft.gui.eros.util.JavaFXUtil +import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.text +import de.bixilon.minosoft.util.KUtil.asResourceLocation +import javafx.application.Platform +import javafx.fxml.FXML +import javafx.scene.control.Button +import javafx.scene.text.TextFlow + +class KickDialog( + val title: Any, + val header: Any, + val description: Any? = null, + val reason: ChatComponent, +) : JavaFXWindowController() { + @FXML private lateinit var headerFX: TextFlow + @FXML private lateinit var descriptionFX: TextFlow + @FXML private lateinit var reasonFX: TextFlow + @FXML private lateinit var reconnectButtonFX: Button + @FXML private lateinit var closeButtonFX: Button + + fun show() { + Platform.runLater { + JavaFXUtil.openModal(title, LAYOUT, this) + stage.show() + } + } + + + override fun init() { + headerFX.text = Minosoft.LANGUAGE_MANAGER.translate(header) + descriptionFX.text = description?.let { Minosoft.LANGUAGE_MANAGER.translate(it) } ?: ChatComponent.EMPTY + reasonFX.text = reason + + reconnectButtonFX.isDisable = true // ToDo + closeButtonFX.setOnAction { + stage.hide() + } + } + + companion object { + private val LAYOUT = "minosoft:eros/dialog/connection/kick.fxml".asResourceLocation() + } +} 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 af0f315a7..b0dec40ab 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 @@ -22,9 +22,12 @@ import de.bixilon.minosoft.gui.eros.Eros import de.bixilon.minosoft.gui.eros.controller.EmbeddedJavaFXController import de.bixilon.minosoft.gui.eros.dialogs.SimpleErosConfirmationDialog import de.bixilon.minosoft.gui.eros.dialogs.UpdateServerDialog +import de.bixilon.minosoft.gui.eros.dialogs.connection.KickDialog import de.bixilon.minosoft.gui.eros.main.play.server.card.ServerCard import de.bixilon.minosoft.gui.eros.main.play.server.card.ServerCardController import de.bixilon.minosoft.gui.eros.modding.invoker.JavaFXEventInvoker +import de.bixilon.minosoft.modding.event.events.KickEvent +import de.bixilon.minosoft.modding.event.events.LoginKickEvent import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionStateChangeEvent import de.bixilon.minosoft.modding.event.events.connection.status.StatusConnectionStateChangeEvent import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker @@ -239,6 +242,23 @@ class ServerListController : EmbeddedJavaFXController(), Refreshable { } Platform.runLater { updateServer(serverCard.server) } }) + + connection.registerEvent(JavaFXEventInvoker.of { event -> + KickDialog( + title = "minosoft:connection.kick.title".asResourceLocation(), + header = "minosoft:connection.kick.header".asResourceLocation(), + description = TranslatableComponents.CONNECTION_KICK_DESCRIPTION(serverCard.server, account), + reason = event.reason, + ).show() + }) + connection.registerEvent(JavaFXEventInvoker.of { event -> + KickDialog( + title = "minosoft:connection.login_kick.title".asResourceLocation(), + header = "minosoft:connection.login_kick.header".asResourceLocation(), + description = TranslatableComponents.CONNECTION_LOGIN_KICK_DESCRIPTION(serverCard.server, account), + reason = event.reason, + ).show() + }) connection.connect() } } diff --git a/src/main/resources/assets/minosoft/eros/dialog/connection/kick.fxml b/src/main/resources/assets/minosoft/eros/dialog/connection/kick.fxml new file mode 100644 index 000000000..c7d19d4f1 --- /dev/null +++ b/src/main/resources/assets/minosoft/eros/dialog/connection/kick.fxml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/assets/minosoft/eros/main/account/add/mojang.fxml b/src/main/resources/assets/minosoft/eros/main/account/add/mojang.fxml index 792ba9f2f..64247c60d 100644 --- a/src/main/resources/assets/minosoft/eros/main/account/add/mojang.fxml +++ b/src/main/resources/assets/minosoft/eros/main/account/add/mojang.fxml @@ -19,7 +19,7 @@ - + diff --git a/src/main/resources/assets/minosoft/eros/main/account/add/offline.fxml b/src/main/resources/assets/minosoft/eros/main/account/add/offline.fxml index 685b68334..1fc46bd3e 100644 --- a/src/main/resources/assets/minosoft/eros/main/account/add/offline.fxml +++ b/src/main/resources/assets/minosoft/eros/main/account/add/offline.fxml @@ -18,7 +18,7 @@ - + diff --git a/src/main/resources/assets/minosoft/language/en_us.lang b/src/main/resources/assets/minosoft/language/en_us.lang index c7cd9a510..2f29777a3 100644 --- a/src/main/resources/assets/minosoft/language/en_us.lang +++ b/src/main/resources/assets/minosoft/language/en_us.lang @@ -87,3 +87,14 @@ minosoft:main.account.add.mojang.password.label=Password minosoft:main.account.add.mojang.password.placeholder=******** minosoft:main.account.add.mojang.add_button=Add minosoft:main.account.add.mojang.cancel_button=Cancel + + +minosoft:connection.kick.title=Kicked from server +minosoft:connection.kick.header=You got kicked +minosoft:connection.kick.description=You got kicked from %1$s (connected with: %2$s) +minosoft:connection.kick.reconnect_button=Reconnect +minosoft:connection.kick.close_button=Close + +minosoft:connection.login_kick.title=Kicked from server +minosoft:connection.login_kick.header=You got kicked +minosoft:connection.login_kick.description=You got kicked while logging in from %1$s (connected with: %2$s)