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)