From ddc576a394cf67400303aa138b9e9805bfda8f01 Mon Sep 17 00:00:00 2001 From: Jakob K Date: Sat, 15 May 2021 21:25:45 +0200 Subject: [PATCH] Make the scroll buttons more flexible --- .../kotlin/net/axay/kspigot/gui/GUIBuilder.kt | 28 +++++++++++++++---- .../elements/GUISpaceCompoundScrollButton.kt | 5 ++-- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/net/axay/kspigot/gui/GUIBuilder.kt b/src/main/kotlin/net/axay/kspigot/gui/GUIBuilder.kt index e0a99586..6b6b3822 100644 --- a/src/main/kotlin/net/axay/kspigot/gui/GUIBuilder.kt +++ b/src/main/kotlin/net/axay/kspigot/gui/GUIBuilder.kt @@ -16,6 +16,8 @@ class GUIBuilder( val type: GUIType, private val guiCreator: GUICreator, ) { + private val guiPages = HashMap>() + /** * The title of this GUI. * This title will be visible for every page of @@ -41,7 +43,7 @@ class GUIBuilder( * GUI instance. */ var defaultPage = 1 - private val guiSlots = HashMap>() + private var onClickElement: ((GUIClickEvent) -> Unit)? = null /** @@ -50,7 +52,7 @@ class GUIBuilder( * @param page The index of the page. */ fun page(page: Int, builder: GUIPageBuilder.() -> Unit) { - guiSlots[page] = GUIPageBuilder(type, page).apply(builder).build() + guiPages[page] = GUIPageBuilder(type, page).apply(builder).build() } /** @@ -62,7 +64,7 @@ class GUIBuilder( } internal fun build() = guiCreator.createInstance( - GUIData(type, title, guiSlots, defaultPage, transitionTo, transitionFrom, onClickElement) + GUIData(type, title, guiPages, defaultPage, transitionTo, transitionFrom, onClickElement) ) } @@ -71,9 +73,12 @@ class GUIPageBuilder( val page: Int, ) { private val guiSlots = HashMap>() + var transitionTo: PageChangeEffect? = null var transitionFrom: PageChangeEffect? = null + internal fun build() = GUIPage(page, guiSlots, transitionTo, transitionFrom) + private fun defineSlots(slots: InventorySlotCompound, element: GUISlot) = slots.withInvType(type).forEach { curSlot -> curSlot.realSlotIn(type.dimensions)?.let { guiSlots[it] = element } @@ -302,7 +307,13 @@ class GUIPageBuilder( reverse: Boolean = false, ) = defineSlots( slots, - GUISpaceCompoundScrollButton(icon, compound, scrollDistance.absoluteValue, scrollTimes, reverse) + GUISpaceCompoundScrollButton( + icon, + compound, + scrollDistance = scrollDistance.absoluteValue, + scrollTimes = scrollTimes, + reverse + ) ) /** @@ -314,9 +325,16 @@ class GUIPageBuilder( icon: ItemStack, compound: GUIRectSpaceCompound, scrollTimes: Int = 1, + scrollLines: Int = 1, reverse: Boolean = false, ) = defineSlots( slots, - GUISpaceCompoundScrollButton(icon, compound, scrollTimes, reverse) + GUISpaceCompoundScrollButton( + icon, + compound, + scrollTimes = scrollTimes, + scrollLines = scrollLines, + reverse + ) ) } diff --git a/src/main/kotlin/net/axay/kspigot/gui/elements/GUISpaceCompoundScrollButton.kt b/src/main/kotlin/net/axay/kspigot/gui/elements/GUISpaceCompoundScrollButton.kt index 05ac8156..29273e4c 100644 --- a/src/main/kotlin/net/axay/kspigot/gui/elements/GUISpaceCompoundScrollButton.kt +++ b/src/main/kotlin/net/axay/kspigot/gui/elements/GUISpaceCompoundScrollButton.kt @@ -26,6 +26,7 @@ class GUISpaceCompoundScrollButton( icon: ItemStack, compound: GUIRectSpaceCompound, scrollTimes: Int = 1, + scrollLines: Int = 1, reverse: Boolean = false, - ) : this(icon, compound, compound.compoundWidth, scrollTimes, reverse) -} \ No newline at end of file + ) : this(icon, compound, scrollDistance = compound.compoundWidth * scrollLines, scrollTimes, reverse) +}