diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/PlayController.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/PlayController.kt index e7e2d493d..37583677e 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/PlayController.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/PlayController.kt @@ -51,7 +51,14 @@ class PlayController : EmbeddedJavaFXController() { override fun init() { playTypeListViewFX.setCellFactory { ServerTypeCardController.build() } - playTypeListViewFX.items += ServerTypes.VALUES + for (type in ServerTypes.VALUES) { + if (!type.active) { + continue + } + playTypeListViewFX.items += type + } + // ToDo + check(playTypeListViewFX.items.size > 0) playTypeListViewFX.selectionModel.selectedItemProperty().addListener { _, _, new -> diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/ServerTypes.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/ServerTypes.kt index 3bb31516c..9a9d73ccb 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/ServerTypes.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/ServerTypes.kt @@ -25,16 +25,20 @@ import org.kordamp.ikonli.fontawesome5.FontAwesomeSolid enum class ServerTypes( val icon: Ikon, + private val activeSupplier: (() -> Boolean)? = null, private val countSupplier: () -> Int, ) : Translatable { - CUSTOM(FontAwesomeSolid.SERVER, { Minosoft.config.config.server.entries.size }), - LAN(FontAwesomeSolid.NETWORK_WIRED, { LANServerListener.SERVERS.size }), + CUSTOM(FontAwesomeSolid.SERVER, null, { Minosoft.config.config.server.entries.size }), + LAN(FontAwesomeSolid.NETWORK_WIRED, { LANServerListener.active }, { LANServerListener.SERVERS.size }), ; override val translationKey: ResourceLocation = "minosoft:server_type.${name.lowercase()}".asResourceLocation() val count: Int get() = countSupplier() + + val active: Boolean + get() = activeSupplier?.invoke() ?: true companion object : ValuesEnum { override val VALUES: Array = values() diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/LANServerListener.kt b/src/main/java/de/bixilon/minosoft/protocol/protocol/LANServerListener.kt index 484d0cb2c..540dea2e3 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/LANServerListener.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/LANServerListener.kt @@ -28,6 +28,8 @@ import java.nio.charset.StandardCharsets import java.util.concurrent.CountDownLatch object LANServerListener { + var active: Boolean = false + private set val SERVERS: HashBiMap = HashBiMap.create() private const val MOTD_START_STRING = "[MOTD]" private const val MOTD_END_STRING = "[/MOTD]" @@ -44,6 +46,7 @@ object LANServerListener { val buffer = ByteArray(256) // this should be enough, if the packet is longer, it is probably invalid Log.log(LogMessageType.NETWORK_STATUS, LogLevels.INFO) { "Listening for LAN servers..." } latch.countDown() + active = true while (true) { try { val packet = DatagramPacket(buffer, buffer.size) @@ -75,6 +78,7 @@ object LANServerListener { latch.countDown() } SERVERS.clear() + active = false Log.log(LogMessageType.NETWORK_STATUS, LogLevels.INFO) { "Stop listening for LAN servers..." } }, "LAN Server Listener").start() latch.await()