diff --git a/src/main/java/de/bixilon/minosoft/data/inventory/ItemStack.kt b/src/main/java/de/bixilon/minosoft/data/inventory/ItemStack.kt index e6812c048..45262d1ce 100644 --- a/src/main/java/de/bixilon/minosoft/data/inventory/ItemStack.kt +++ b/src/main/java/de/bixilon/minosoft/data/inventory/ItemStack.kt @@ -58,6 +58,10 @@ data class ItemStack( return ChatComponent.of("$item {name=${displayName}, count=$count. nbt=$nbt}") } + override fun toString(): String { + return toText().legacyText + } + private fun parseNBT(nbt: MutableMap?) { if (nbt == null) { diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/PlayMainController.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/PlayMainController.kt index f3541188a..473f61f29 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/PlayMainController.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/PlayMainController.kt @@ -17,7 +17,6 @@ import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.gui.eros.controller.EmbeddedJavaFXController import de.bixilon.minosoft.gui.eros.main.play.server.Refreshable import de.bixilon.minosoft.gui.eros.main.play.server.ServerListController -import de.bixilon.minosoft.gui.eros.main.play.server.type.ServerType import de.bixilon.minosoft.gui.eros.main.play.server.type.ServerTypeCardController import de.bixilon.minosoft.gui.eros.modding.events.ErosControllerTerminateEvent import de.bixilon.minosoft.gui.eros.modding.invoker.JavaFXEventInvoker @@ -30,80 +29,81 @@ import de.bixilon.minosoft.protocol.protocol.LANServerListener import de.bixilon.minosoft.util.KUtil.asResourceLocation import javafx.fxml.FXML import javafx.scene.control.ListView -import javafx.scene.layout.AnchorPane +import javafx.scene.layout.GridPane import javafx.scene.layout.Pane -import org.kordamp.ikonli.fontawesome5.FontAwesomeSolid +import javafx.scene.text.TextFlow class PlayMainController : EmbeddedJavaFXController() { @FXML private lateinit var playTypeContentFX: Pane @FXML - private lateinit var playTypeListViewFX: ListView + private lateinit var playTypeListViewFX: ListView @FXML - private lateinit var refreshPaneFX: AnchorPane + private lateinit var refreshPaneFX: GridPane + + @FXML + private lateinit var refreshHeaderFX: TextFlow + + @FXML + private lateinit var refreshText1FX: TextFlow + + @FXML + private lateinit var refreshText2FX: TextFlow private lateinit var currentController: EmbeddedJavaFXController<*> override fun init() { playTypeListViewFX.setCellFactory { ServerTypeCardController.build() } - playTypeListViewFX.items += ServerType(FontAwesomeSolid.SERVER, CUSTOM_SERVER_TYPE, "0 Servers", "") { - return@ServerType JavaFXUtil.loadEmbeddedController(ServerListController.LAYOUT).apply { - servers = Minosoft.config.config.server.entries.values - refreshList() - } - } - playTypeListViewFX.items += ServerType(FontAwesomeSolid.NETWORK_WIRED, LAN_SERVER_TYPE, "12 Servers", "") { - return@ServerType JavaFXUtil.loadEmbeddedController(ServerListController.LAYOUT).apply { - val events: MutableList = mutableListOf() - events += GlobalEventMaster.registerEvent(JavaFXEventInvoker.of { refreshList() }) - readOnly = true - customRefresh = { - LANServerListener.clear() - refreshList() - } + playTypeListViewFX.items += ServerTypes.VALUES - GlobalEventMaster.registerEvent(JavaFXEventInvoker.of(oneShot = true) { - if (it.controller != this) { - return@of - } - - GlobalEventMaster.unregisterEvents(*events.toTypedArray()) - LANServerListener.clear() - }) - - LANServerListener.clear() - servers = LANServerListener.SERVERS.values - refreshList() - } - } playTypeListViewFX.selectionModel.selectedItemProperty().addListener { _, _, new -> if (this::currentController.isInitialized) { currentController.terminate() } - currentController = new.content(new) + currentController = when (new) { + ServerTypes.CUSTOM -> JavaFXUtil.loadEmbeddedController(ServerListController.LAYOUT).apply { + servers = Minosoft.config.config.server.entries.values + refreshList() + } + ServerTypes.LAN -> JavaFXUtil.loadEmbeddedController(ServerListController.LAYOUT).apply { + val events: MutableList = mutableListOf() + events += GlobalEventMaster.registerEvent(JavaFXEventInvoker.of { refreshList() }) + readOnly = true + customRefresh = { + LANServerListener.clear() + refreshList() + } + + GlobalEventMaster.registerEvent(JavaFXEventInvoker.of(oneShot = true) { + if (it.controller != this) { + return@of + } + + GlobalEventMaster.unregisterEvents(*events.toTypedArray()) + LANServerListener.clear() + }) + + LANServerListener.clear() + servers = LANServerListener.SERVERS.values + refreshList() + } + } playTypeContentFX.children.setAll(currentController.root) } playTypeListViewFX.selectionModel.select(0) - ServerTypeCardController.build().apply { - refreshPaneFX.children.setAll(root) - iconFX.iconLiteral = "fas-sync-alt" - iconFX.isVisible = true - - headerFX.text = REFRESH_HEADER - text1FX.text = REFRESH_TEXT1 - text2FX.text = REFRESH_TEXT2 - - root.setOnMouseClicked { - val currentController = currentController - if (currentController is Refreshable) { - currentController.refresh() - } + refreshHeaderFX.text = REFRESH_HEADER + refreshText1FX.text = REFRESH_TEXT1 + refreshText2FX.text = REFRESH_TEXT2 + refreshPaneFX.setOnMouseClicked { + val currentController = currentController + if (currentController is Refreshable) { + currentController.refresh() } } } diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/type/ServerType.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/ServerTypes.kt similarity index 50% rename from src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/type/ServerType.kt rename to src/main/java/de/bixilon/minosoft/gui/eros/main/play/ServerTypes.kt index 585ebbe68..d637599d2 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/type/ServerType.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/ServerTypes.kt @@ -11,15 +11,26 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.gui.eros.main.play.server.type +package de.bixilon.minosoft.gui.eros.main.play -import de.bixilon.minosoft.gui.eros.controller.EmbeddedJavaFXController +import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.data.registries.registries.registry.Translatable +import de.bixilon.minosoft.util.KUtil +import de.bixilon.minosoft.util.KUtil.asResourceLocation +import de.bixilon.minosoft.util.enum.ValuesEnum +import org.kordamp.ikonli.Ikon import org.kordamp.ikonli.fontawesome5.FontAwesomeSolid -data class ServerType( - val icon: FontAwesomeSolid, - val header: Any?, - val text1: Any?, - val text2: Any?, - val content: (ServerType) -> EmbeddedJavaFXController<*>, -) +enum class ServerTypes(val icon: Ikon) : Translatable { + CUSTOM(FontAwesomeSolid.SERVER), + LAN(FontAwesomeSolid.NETWORK_WIRED), + ; + + override val translationKey: ResourceLocation = "minosoft:server_type.${name.lowercase()}".asResourceLocation() + + + companion object : ValuesEnum { + override val VALUES: Array = values() + override val NAME_MAP: Map = KUtil.getEnumValues(VALUES) + } +} diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/type/ServerTypeCardController.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/type/ServerTypeCardController.kt index fa07f808b..a407c3fa5 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/type/ServerTypeCardController.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/type/ServerTypeCardController.kt @@ -13,15 +13,17 @@ package de.bixilon.minosoft.gui.eros.main.play.server.type +import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.gui.eros.card.AbstractCard import de.bixilon.minosoft.gui.eros.card.CardFactory +import de.bixilon.minosoft.gui.eros.main.play.ServerTypes import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.text import de.bixilon.minosoft.util.KUtil.asResourceLocation import javafx.fxml.FXML import javafx.scene.text.TextFlow import org.kordamp.ikonli.javafx.FontIcon -class ServerTypeCardController : AbstractCard() { +class ServerTypeCardController : AbstractCard() { @FXML lateinit var iconFX: FontIcon @@ -29,29 +31,26 @@ class ServerTypeCardController : AbstractCard() { lateinit var headerFX: TextFlow @FXML - lateinit var text1FX: TextFlow + lateinit var textFX: TextFlow - @FXML - lateinit var text2FX: TextFlow - - override fun updateItem(item: ServerType?, empty: Boolean) { + override fun updateItem(item: ServerTypes?, empty: Boolean) { super.updateItem(item, empty) item ?: return iconFX.isVisible = true + iconFX.iconCode = item.icon - headerFX.text = item.header - text1FX.text = item.text1 - text2FX.text = item.text2 + headerFX.text = Minosoft.LANGUAGE_MANAGER.translate(item) + + textFX.text = "? servers" } override fun clear() { iconFX.isVisible = false headerFX.children.clear() - text1FX.children.clear() - text2FX.children.clear() + textFX.children.clear() } companion object : CardFactory { diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/PlayInByteBuffer.kt b/src/main/java/de/bixilon/minosoft/protocol/protocol/PlayInByteBuffer.kt index 80170467c..faa1c3a91 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/PlayInByteBuffer.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/PlayInByteBuffer.kt @@ -120,15 +120,13 @@ class PlayInByteBuffer : InByteBuffer { ) } - return if (readBoolean()) { + return readOptional { ItemStack( item = connection.registries.itemRegistry[readVarInt()], connection = connection, count = readUnsignedByte(), nbt = readNBT()?.compoundCast() ?: mutableMapOf(), ) - } else { - null } } diff --git a/src/main/resources/assets/minosoft/eros/main/play/play.fxml b/src/main/resources/assets/minosoft/eros/main/play/play.fxml index 4f61aa503..8452fdbad 100644 --- a/src/main/resources/assets/minosoft/eros/main/play/play.fxml +++ b/src/main/resources/assets/minosoft/eros/main/play/play.fxml @@ -1,8 +1,10 @@ - + + + @@ -25,7 +27,40 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/assets/minosoft/eros/main/play/server_type_card.fxml b/src/main/resources/assets/minosoft/eros/main/play/server_type_card.fxml index 6d9b5a463..393ac0fd1 100644 --- a/src/main/resources/assets/minosoft/eros/main/play/server_type_card.fxml +++ b/src/main/resources/assets/minosoft/eros/main/play/server_type_card.fxml @@ -2,7 +2,8 @@ - + + @@ -20,26 +21,12 @@ - + - - - - - - - - - - - - - -