Skip to content

Commit 21cd6c6

Browse files
committed
feat: implement new GUI handlers and rework inventory management for improved functionality
1 parent a08ba6f commit 21cd6c6

47 files changed

Lines changed: 2569 additions & 2125 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.idea/modules.xml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 0 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

surf-api-bukkit/surf-api-bukkit-api/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,9 @@ description = "surf-api-bukkit-api"
2121
configurations.all {
2222
exclude(group = "org.spigotmc", module = "spigot-api")
2323
}
24+
25+
kotlin {
26+
compilerOptions {
27+
optIn.add("dev.slne.surf.surfapi.core.api.util.InternalSurfApi")
28+
}
29+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package dev.slne.surf.surfapi.bukkit.api.inventory
2+
3+
import dev.slne.surf.surfapi.bukkit.api.inventory.gui.Gui
4+
import dev.slne.surf.surfapi.bukkit.api.inventory.item.GuiItem
5+
import dev.slne.surf.surfapi.bukkit.api.inventory.item.UpdatableGuiItem
6+
import dev.slne.surf.surfapi.bukkit.api.inventory.pane.utils.Mask
7+
import dev.slne.surf.surfapi.bukkit.api.inventory.pane.utils.Pattern
8+
import dev.slne.surf.surfapi.core.api.util.InternalSurfApi
9+
import dev.slne.surf.surfapi.core.api.util.requiredService
10+
import org.bukkit.NamespacedKey
11+
import org.bukkit.inventory.Inventory
12+
import java.util.*
13+
14+
@InternalSurfApi
15+
interface InventoryBridge {
16+
17+
fun getGuiByInventory(inventory: Inventory): Gui?
18+
fun createGuiItem(key: NamespacedKey?, uuid: UUID?, init: GuiItem.() -> Unit): GuiItem
19+
fun createUpdatableGuiItem(
20+
key: NamespacedKey?,
21+
uuid: UUID?,
22+
init: UpdatableGuiItem.() -> Unit,
23+
): UpdatableGuiItem
24+
25+
fun createMask(vararg mask: String): Mask
26+
fun createPattern(vararg pattern: String): Pattern
27+
28+
companion object {
29+
val instance = requiredService<InventoryBridge>()
30+
}
31+
}

surf-api-bukkit/surf-api-bukkit-api/src/main/kotlin/dev/slne/surf/surfapi/bukkit/api/inventory/dsl/gui.kt

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
package dev.slne.surf.surfapi.bukkit.api.inventory.dsl
44

5-
import dev.slne.surf.surfapi.bukkit.api.inventory.gui.types.ChestGui
5+
import dev.slne.surf.surfapi.bukkit.api.inventory.gui.MergedGui
6+
import dev.slne.surf.surfapi.bukkit.api.inventory.gui.types.ChestGuiImpl
67
import dev.slne.surf.surfapi.bukkit.api.inventory.gui.types.ChestSinglePlayerGui
7-
import dev.slne.surf.surfapi.bukkit.api.inventory.gui.utils.MergedGui
8-
import dev.slne.surf.surfapi.bukkit.api.inventory.pane.components.PagingButtons
9-
import dev.slne.surf.surfapi.bukkit.api.inventory.pane.panes.PaginatedPane
10-
import dev.slne.surf.surfapi.bukkit.api.inventory.pane.panes.StaticPane
8+
import dev.slne.surf.surfapi.bukkit.api.inventory.pane.components.PagingButtonsImpl
9+
import dev.slne.surf.surfapi.bukkit.api.inventory.pane.panes.PaginatedPaneImpl
10+
import dev.slne.surf.surfapi.bukkit.api.inventory.pane.panes.StaticPaneImpl
1111
import dev.slne.surf.surfapi.bukkit.api.inventory.utils.Slot
1212
import net.kyori.adventure.text.Component
1313
import org.bukkit.entity.Player
@@ -22,15 +22,15 @@ annotation class MenuMarker
2222

2323
fun MergedGui.pagingButtons(
2424
slot: Slot,
25-
paginatedPane: PaginatedPane,
25+
paginatedPane: PaginatedPaneImpl,
2626
length: @Range(from = 1, to = 9) Int = 9,
27-
init: (@PaneMarker PagingButtons).() -> Unit,
28-
): PagingButtons {
27+
init: (@PaneMarker PagingButtonsImpl).() -> Unit,
28+
): PagingButtonsImpl {
2929
contract {
3030
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
3131
}
3232

33-
return PagingButtons(slot, paginatedPane, length).apply {
33+
return PagingButtonsImpl(slot, paginatedPane, length).apply {
3434
init()
3535
addPane(this)
3636
}
@@ -40,13 +40,13 @@ fun MergedGui.paginatedPane(
4040
slot: Slot,
4141
height: @Range(from = 1, to = 6) Int,
4242
length: @Range(from = 1, to = 9) Int = 9,
43-
init: (@PaneMarker PaginatedPane).() -> Unit,
44-
): PaginatedPane {
43+
init: (@PaneMarker PaginatedPaneImpl).() -> Unit,
44+
): PaginatedPaneImpl {
4545
contract {
4646
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
4747
}
4848

49-
return PaginatedPane(slot, length, height).apply {
49+
return PaginatedPaneImpl(slot, length, height).apply {
5050
init()
5151
addPane(this)
5252
}
@@ -56,34 +56,34 @@ fun MergedGui.staticPane(
5656
slot: Slot,
5757
height: @Range(from = 1, to = 6) Int,
5858
length: @Range(from = 1, to = 9) Int = 9,
59-
init: (@PaneMarker StaticPane).() -> Unit,
60-
): StaticPane {
59+
init: (@PaneMarker StaticPaneImpl).() -> Unit,
60+
): StaticPaneImpl {
6161
contract {
6262
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
6363
}
6464

65-
return StaticPane(slot, length, height).apply {
65+
return StaticPaneImpl(slot, length, height).apply {
6666
init()
6767
addPane(this)
6868
}
6969
}
7070

7171
fun menu(
7272
title: Component,
73-
size: ChestGui.ChestGuiSize = ChestGui.ChestGuiSize.SIX_ROWS,
74-
init: @MenuMarker ChestGui.() -> Unit,
75-
): ChestGui {
73+
size: ChestGuiImpl.ChestGuiSize = ChestGuiImpl.ChestGuiSize.SIX_ROWS,
74+
init: @MenuMarker ChestGuiImpl.() -> Unit,
75+
): ChestGuiImpl {
7676
contract {
7777
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
7878
}
7979

80-
return ChestGui(title, size).apply { init() }
80+
return ChestGuiImpl(title, size).apply { init() }
8181
}
8282

8383
fun playerMenu(
8484
title: Component,
8585
player: Player,
86-
size: ChestGui.ChestGuiSize = ChestGui.ChestGuiSize.SIX_ROWS,
86+
size: ChestGuiImpl.ChestGuiSize = ChestGuiImpl.ChestGuiSize.SIX_ROWS,
8787
init: @MenuMarker ChestSinglePlayerGui.() -> Unit,
8888
): ChestSinglePlayerGui {
8989
contract {
@@ -94,21 +94,21 @@ fun playerMenu(
9494
}
9595

9696

97-
fun ChestGui.childMenu(
97+
fun ChestGuiImpl.childMenu(
9898
title: Component,
99-
size: ChestGui.ChestGuiSize = ChestGui.ChestGuiSize.SIX_ROWS,
100-
init: @MenuMarker ChestGui.() -> Unit,
101-
): ChestGui {
99+
size: ChestGuiImpl.ChestGuiSize = ChestGuiImpl.ChestGuiSize.SIX_ROWS,
100+
init: @MenuMarker ChestGuiImpl.() -> Unit,
101+
): ChestGuiImpl {
102102
contract {
103103
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
104104
}
105105

106-
return ChestGui(title, size, this).apply { init() }
106+
return ChestGuiImpl(title, size, this).apply { init() }
107107
}
108108

109109
fun ChestSinglePlayerGui.childPlayerMenu(
110110
title: Component,
111-
size: ChestGui.ChestGuiSize = ChestGui.ChestGuiSize.SIX_ROWS,
111+
size: ChestGuiImpl.ChestGuiSize = ChestGuiImpl.ChestGuiSize.SIX_ROWS,
112112
init: @MenuMarker ChestSinglePlayerGui.() -> Unit,
113113
): ChestSinglePlayerGui {
114114
contract {

surf-api-bukkit/surf-api-bukkit-api/src/main/kotlin/dev/slne/surf/surfapi/bukkit/api/inventory/dsl/markers.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,15 @@ package dev.slne.surf.surfapi.bukkit.api.inventory.dsl
33
@Target(AnnotationTarget.CLASS, AnnotationTarget.TYPE)
44
@DslMarker
55
annotation class PaneMarker
6+
7+
@Target(AnnotationTarget.CLASS, AnnotationTarget.TYPE)
8+
@DslMarker
9+
annotation class GuiDsl
10+
11+
@Target(AnnotationTarget.CLASS, AnnotationTarget.TYPE)
12+
@DslMarker
13+
annotation class GuiItemDsl
14+
15+
@Target(AnnotationTarget.CLASS, AnnotationTarget.TYPE)
16+
@DslMarker
17+
annotation class GuiClickDsl

0 commit comments

Comments
 (0)