From 74bf90cad4b3918b543309b776587dac2bcc485d Mon Sep 17 00:00:00 2001 From: bluefireoly Date: Sat, 17 Oct 2020 13:23:55 +0200 Subject: [PATCH 1/2] Updated counterMessageCallback --- .../net/axay/kspigot/game/GamePhases.kt | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/main/kotlin/net/axay/kspigot/game/GamePhases.kt b/src/main/kotlin/net/axay/kspigot/game/GamePhases.kt index 4a56041d..09926620 100644 --- a/src/main/kotlin/net/axay/kspigot/game/GamePhases.kt +++ b/src/main/kotlin/net/axay/kspigot/game/GamePhases.kt @@ -11,40 +11,40 @@ class GamePhaseSystem(vararg gamePhases: GamePhase) { } fun buildCounterMessageCallback( - beforeTime: String? = null, - afterTime: String? = null, - hours: String = "h", - minutes: String = "m", - seconds: String = "s" + beforeTime: String? = null, + afterTime: String? = null, + hourPlural: String = "h", + minutePlural: String = "m", + secondPlural: String = "s", + hourSingular: String = hourPlural, + minuteSingular: String = minutePlural, + secondSingular: String = secondPlural ): (Long) -> String = { curSeconds -> StringBuilder().apply { - append(beforeTime) + if (beforeTime != null) + append(beforeTime) val hourTime = (curSeconds / 3600) val minuteTime = ((curSeconds % 3600) / 60) val secondsTime = (curSeconds % 60) - if (hourTime != 0L) - append("${hourTime.toString().run { if (length < 2) "0$this" else this }}:") + if (hourTime != 0L) { + append("$hourTime ${if (hourTime == 1L) hourSingular else hourPlural}") + if (minuteTime != 0L) append(" ") + } - if ((hourTime != 0L && secondsTime != 0L) || (minuteTime != 0L && secondsTime != 0L)) - append("${minuteTime.toString().run { if (length < 2) "0$this" else this }}:") - else if (minuteTime != 0L) - append(minuteTime.toString().run { if (length < 2) "0$this" else this }) + if (minuteTime != 0L) { + append("$minuteTime ${if (minuteTime == 1L) minuteSingular else minutePlural}") + if (secondsTime != 0L) append(" ") + } - if (secondsTime != 0L) - append(secondsTime.toString().run { if (length < 2) "0$this" else this }) + if (secondsTime != 0L || (hourTime == 0L && minuteTime == 0L)) { + append("$secondsTime ${if (secondsTime == 1L) secondSingular else secondPlural}") + } - append(" ").append(kotlin.run { - return@run when { - secondsTime != 0L -> seconds - minuteTime != 0L -> minutes - else -> hours - } - }) - - append(afterTime) + if (afterTime != null) + append(afterTime) }.toString() } From 259c9fe13a6ae28fc04cce6edaae650c9678ec9f Mon Sep 17 00:00:00 2001 From: bluefireoly Date: Sat, 17 Oct 2020 14:16:41 +0200 Subject: [PATCH 2/2] Moved gui elements to a seperate package --- .../kspigot/inventory/InventoryGUIElements.kt | 76 ------------------- .../inventory/elements/InventoryGUIButton.kt | 18 +++++ .../InventoryGUIButtonInventoryChange.kt | 26 +++++++ .../elements/InventoryGUIButtonPageChange.kt | 25 ++++++ .../elements/InventoryGUIFreeSlot.kt | 9 +++ .../elements/InventoryGUIPlaceholder.kt | 16 ++++ 6 files changed, 94 insertions(+), 76 deletions(-) create mode 100644 src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIButton.kt create mode 100644 src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIButtonInventoryChange.kt create mode 100644 src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIButtonPageChange.kt create mode 100644 src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIFreeSlot.kt create mode 100644 src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIPlaceholder.kt diff --git a/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIElements.kt b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIElements.kt index 5be704da..7efa60c9 100644 --- a/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIElements.kt +++ b/src/main/kotlin/net/axay/kspigot/inventory/InventoryGUIElements.kt @@ -23,80 +23,4 @@ abstract class InventoryGUIElement( protected abstract fun onClickElement(clickEvent: InventoryGUIClickEvent) -} - -// Element implementations - -open class InventoryGUIButton( - inventoryGUIElementData: InventoryGUIElementData, - val action: (InventoryGUIClickEvent) -> Unit, -) : InventoryGUIElement(inventoryGUIElementData) { - - override fun onClickElement(clickEvent: InventoryGUIClickEvent) { - clickEvent.bukkitEvent.isCancelled = true - action(clickEvent) - } - -} - -class InventoryGUIPlaceholder( - inventoryGUIElementData: InventoryGUIElementData -) : InventoryGUIElement(inventoryGUIElementData) { - - override fun onClickElement(clickEvent: InventoryGUIClickEvent) { - clickEvent.bukkitEvent.isCancelled = true - } - -} - -class InventoryGUIButtonPageChange( - inventoryGUIElementData: InventoryGUIElementData, - calculator: InventoryGUIPageChangeCalculator, - onChange: ((InventoryGUIClickEvent) -> Unit)? -) - : InventoryGUIButton(inventoryGUIElementData, { - - val currentPage = it.gui.currentPage - val newPage = it.gui.getPage(calculator.calculateNewPage(it.gui.currentPageInt, it.gui.data.pages.keys)) - if (newPage != null) { - - val effect = (newPage.transitionTo ?: currentPage.transitionFrom) - ?: PageChangeEffect.INSTANT - - it.gui.changePage(effect, currentPage, newPage) - - onChange?.invoke(it) - - } - - }) - -class InventoryGUIButtonInventoryChange( - inventoryGUIElementData: InventoryGUIElementData, - changeToGUICallback: () -> InventoryGUI<*>, - changeToPageInt: Int?, - onChange: ((InventoryGUIClickEvent) -> Unit)? -) - : InventoryGUIButton(inventoryGUIElementData, { - - val changeToGUI = changeToGUICallback.invoke() - - val effect = (changeToGUI.data.transitionTo ?: it.gui.data.transitionFrom) - ?: InventoryChangeEffect.INSTANT - - val changeToPage = changeToGUI.getPage(changeToPageInt) ?: changeToGUI.currentPage - - changeToGUI.changeGUI(effect, it.gui.currentPage, changeToPage) - - it.bukkitEvent.whoClicked.openGUI(changeToGUI) - - onChange?.invoke(it) - - }) - - -// FREE SLOT - -class InventoryGUIFreeSlot : InventoryGUISlot() { - override fun onClick(clickEvent: InventoryGUIClickEvent) { /* do nothing */ } } \ No newline at end of file diff --git a/src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIButton.kt b/src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIButton.kt new file mode 100644 index 00000000..83383f89 --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIButton.kt @@ -0,0 +1,18 @@ +package net.axay.kspigot.inventory.elements + +import net.axay.kspigot.inventory.ForInventory +import net.axay.kspigot.inventory.InventoryGUIClickEvent +import net.axay.kspigot.inventory.InventoryGUIElement +import net.axay.kspigot.inventory.InventoryGUIElementData + +open class InventoryGUIButton( + inventoryGUIElementData: InventoryGUIElementData, + val action: (InventoryGUIClickEvent) -> Unit, +) : InventoryGUIElement(inventoryGUIElementData) { + + override fun onClickElement(clickEvent: InventoryGUIClickEvent) { + clickEvent.bukkitEvent.isCancelled = true + action(clickEvent) + } + +} \ No newline at end of file diff --git a/src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIButtonInventoryChange.kt b/src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIButtonInventoryChange.kt new file mode 100644 index 00000000..6c00bc92 --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIButtonInventoryChange.kt @@ -0,0 +1,26 @@ +package net.axay.kspigot.inventory.elements + +import net.axay.kspigot.inventory.* + +class InventoryGUIButtonInventoryChange( + inventoryGUIElementData: InventoryGUIElementData, + changeToGUICallback: () -> InventoryGUI<*>, + changeToPageInt: Int?, + onChange: ((InventoryGUIClickEvent) -> Unit)? +) + : InventoryGUIButton(inventoryGUIElementData, { + + val changeToGUI = changeToGUICallback.invoke() + + val effect = (changeToGUI.data.transitionTo ?: it.gui.data.transitionFrom) + ?: InventoryChangeEffect.INSTANT + + val changeToPage = changeToGUI.getPage(changeToPageInt) ?: changeToGUI.currentPage + + changeToGUI.changeGUI(effect, it.gui.currentPage, changeToPage) + + it.bukkitEvent.whoClicked.openGUI(changeToGUI) + + onChange?.invoke(it) + +}) \ No newline at end of file diff --git a/src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIButtonPageChange.kt b/src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIButtonPageChange.kt new file mode 100644 index 00000000..0d5f3648 --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIButtonPageChange.kt @@ -0,0 +1,25 @@ +package net.axay.kspigot.inventory.elements + +import net.axay.kspigot.inventory.* + +class InventoryGUIButtonPageChange( + inventoryGUIElementData: InventoryGUIElementData, + calculator: InventoryGUIPageChangeCalculator, + onChange: ((InventoryGUIClickEvent) -> Unit)? +) + : InventoryGUIButton(inventoryGUIElementData, { + + val currentPage = it.gui.currentPage + val newPage = it.gui.getPage(calculator.calculateNewPage(it.gui.currentPageInt, it.gui.data.pages.keys)) + if (newPage != null) { + + val effect = (newPage.transitionTo ?: currentPage.transitionFrom) + ?: PageChangeEffect.INSTANT + + it.gui.changePage(effect, currentPage, newPage) + + onChange?.invoke(it) + + } + +}) \ No newline at end of file diff --git a/src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIFreeSlot.kt b/src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIFreeSlot.kt new file mode 100644 index 00000000..7c385e1a --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIFreeSlot.kt @@ -0,0 +1,9 @@ +package net.axay.kspigot.inventory.elements + +import net.axay.kspigot.inventory.ForInventory +import net.axay.kspigot.inventory.InventoryGUIClickEvent +import net.axay.kspigot.inventory.InventoryGUISlot + +class InventoryGUIFreeSlot : InventoryGUISlot() { + override fun onClick(clickEvent: InventoryGUIClickEvent) { /* do nothing */ } +} \ No newline at end of file diff --git a/src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIPlaceholder.kt b/src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIPlaceholder.kt new file mode 100644 index 00000000..3543f5a6 --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/inventory/elements/InventoryGUIPlaceholder.kt @@ -0,0 +1,16 @@ +package net.axay.kspigot.inventory.elements + +import net.axay.kspigot.inventory.ForInventory +import net.axay.kspigot.inventory.InventoryGUIClickEvent +import net.axay.kspigot.inventory.InventoryGUIElement +import net.axay.kspigot.inventory.InventoryGUIElementData + +class InventoryGUIPlaceholder( + inventoryGUIElementData: InventoryGUIElementData +) : InventoryGUIElement(inventoryGUIElementData) { + + override fun onClickElement(clickEvent: InventoryGUIClickEvent) { + clickEvent.bukkitEvent.isCancelled = true + } + +} \ No newline at end of file