Skip to content

Commit d71214c

Browse files
committed
Add a parameter to disable reloading
1 parent 6c274db commit d71214c

File tree

9 files changed

+33
-22
lines changed

9 files changed

+33
-22
lines changed

interfaces/src/main/kotlin/com/noxcrew/interfaces/interfaces/ChestInterface.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ public class ChestInterface internal constructor(
2424

2525
override fun createPane(): Pane = Pane()
2626

27-
override suspend fun open(player: Player, parent: InterfaceView?): ChestInterfaceView {
27+
override suspend fun open(player: Player, parent: InterfaceView?, reload: Boolean): ChestInterfaceView {
2828
val view = ChestInterfaceView(player, this, parent)
29-
view.open()
29+
view.open(reload)
3030
return view
3131
}
3232
}

interfaces/src/main/kotlin/com/noxcrew/interfaces/interfaces/CombinedInterface.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ public class CombinedInterface internal constructor(
1919

2020
override fun createPane(): CombinedPane = CombinedPane(rows)
2121

22-
override suspend fun open(player: Player, parent: InterfaceView?): CombinedInterfaceView {
22+
override suspend fun open(player: Player, parent: InterfaceView?, reload: Boolean): CombinedInterfaceView {
2323
val view = CombinedInterfaceView(player, this, parent)
24-
view.open()
24+
view.open(reload)
2525
return view
2626
}
2727
}

interfaces/src/main/kotlin/com/noxcrew/interfaces/interfaces/Interface.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public interface Interface<I : Interface<I, P>, P : Pane> {
3333
public suspend fun open(
3434
player: Player,
3535
parent: InterfaceView? =
36-
InterfacesListeners.INSTANCE.convertHolderToInterfaceView(player.openInventory.topInventory.getHolder(false))
36+
InterfacesListeners.INSTANCE.convertHolderToInterfaceView(player.openInventory.topInventory.getHolder(false)),
37+
reload: Boolean = true,
3738
): InterfaceView
3839

3940
/** Returns the [gridPoint] relative to the player's inventory within this inventory. */

interfaces/src/main/kotlin/com/noxcrew/interfaces/interfaces/PlayerInterface.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ public class PlayerInterface internal constructor(
2323

2424
override fun createPane(): PlayerPane = PlayerPane()
2525

26-
override suspend fun open(player: Player, parent: InterfaceView?): PlayerInterfaceView {
26+
override suspend fun open(player: Player, parent: InterfaceView?, reload: Boolean): PlayerInterfaceView {
2727
val view = PlayerInterfaceView(player, this)
28-
view.open()
28+
view.open(reload)
2929
return view
3030
}
3131
}

interfaces/src/main/kotlin/com/noxcrew/interfaces/menu/BaseInventoryMenu.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ public interface BaseInventoryMenu {
1616
player: Player,
1717
parent: InterfaceView? =
1818
InterfacesListeners.INSTANCE.convertHolderToInterfaceView(player.openInventory.topInventory.getHolder(false)),
19+
reload: Boolean = true,
1920
): InterfaceView?
2021

2122
/** Opens a rendered [menu] for the given [player]. */
22-
public suspend fun open(player: Player, parent: InterfaceView?, menu: Interface<*, *>): InterfaceView? {
23+
public suspend fun open(player: Player, parent: InterfaceView?, menu: Interface<*, *>, reload: Boolean = true): InterfaceView? {
2324
// Quit if the coroutine is no longer active
2425
if (!coroutineContext.isActive) return null
2526

@@ -31,6 +32,6 @@ public interface BaseInventoryMenu {
3132
if (parent?.isTreeOpened == false) return null
3233

3334
// Finally open the actual menu!
34-
return menu.open(player, parent)
35+
return menu.open(player, parent, reload)
3536
}
3637
}

interfaces/src/main/kotlin/com/noxcrew/interfaces/menu/PlayerInventoryMenu.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ public abstract class PlayerInventoryMenu : BaseInventoryMenu {
2525
configure(player)
2626
}
2727

28-
override suspend fun open(player: Player, parent: InterfaceView?): PlayerInterfaceView? {
28+
override suspend fun open(player: Player, parent: InterfaceView?, reload: Boolean): PlayerInterfaceView? {
2929
val menu = exceptionHandler.execute(
3030
InterfacesExceptionContext(
3131
player,
3232
InterfacesOperation.BUILDING_PLAYER,
3333
null,
3434
),
3535
) { buildMenu(player) } ?: return null
36-
return open(player, parent, menu) as PlayerInterfaceView
36+
return open(player, parent, menu, reload) as PlayerInterfaceView
3737
}
3838
}

interfaces/src/main/kotlin/com/noxcrew/interfaces/menu/SimpleInventoryMenu.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public abstract class SimpleInventoryMenu<B : InterfaceBuilder<out Pane, *>> : B
2121
/** Configures the GUI for the given [player]. */
2222
protected abstract suspend fun B.configure(player: Player)
2323

24-
override suspend fun open(player: Player, parent: InterfaceView?): InterfaceView? {
24+
override suspend fun open(player: Player, parent: InterfaceView?, reload: Boolean): InterfaceView? {
2525
val menu = exceptionHandler.execute(
2626
InterfacesExceptionContext(
2727
player,
@@ -35,6 +35,6 @@ public abstract class SimpleInventoryMenu<B : InterfaceBuilder<out Pane, *>> : B
3535
}
3636
} ?: return null
3737

38-
return open(player, parent, menu)
38+
return open(player, parent, menu, reload)
3939
}
4040
}

interfaces/src/main/kotlin/com/noxcrew/interfaces/view/AbstractInterfaceView.kt

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ public abstract class AbstractInterfaceView<I : InterfacesInventory, T : Interfa
9292
/** Whether the title of the inventory should be re-painted. */
9393
protected var refreshTitle: Boolean = true
9494

95+
/** Whether all properties should be fully reloaded. */
96+
protected var fullyReload: Boolean = false
97+
9598
/** Whether a click is being processed. */
9699
public var isProcessingClick: Boolean = false
97100

@@ -269,7 +272,7 @@ public abstract class AbstractInterfaceView<I : InterfacesInventory, T : Interfa
269272
applyTransforms(builder.transforms, initial = true, renderIfEmpty = true)
270273
}
271274

272-
override suspend fun reopen(newParent: InterfaceView?): Boolean {
275+
override suspend fun reopen(newParent: InterfaceView?, reload: Boolean): Boolean {
273276
// The player has since disconnected, close the menu properly!
274277
if (Bukkit.isStopping() || !player.isConnected) {
275278
if (shouldStillBeOpened) {
@@ -291,11 +294,11 @@ public abstract class AbstractInterfaceView<I : InterfacesInventory, T : Interfa
291294
if (newParent != null) {
292295
parent = newParent
293296
}
294-
open()
297+
open(reload)
295298
return true
296299
}
297300

298-
override suspend fun open() {
301+
override suspend fun open(reload: Boolean) {
299302
// Don't open an interface for an offline player
300303
if (!player.isConnected || !coroutineContext.isActive) return
301304

@@ -308,6 +311,12 @@ public abstract class AbstractInterfaceView<I : InterfacesInventory, T : Interfa
308311
openIfClosed.set(true)
309312
shouldBeOpened.set(true)
310313

314+
// Only fully re-evaluate all properties if this menu wants to, or if this menu is the first
315+
// in a chain (parent is not there or this is the first non-player interface)
316+
if (reload && (builder.alwaysReloadProperties || parent == null || parent is PlayerInterfaceView)) {
317+
fullyReload = true
318+
}
319+
311320
// If we want to redraw the title we use a new inventory always
312321
if (backing.builder.redrawTitleOnReopen) {
313322
refreshTitle = true
@@ -337,7 +346,7 @@ public abstract class AbstractInterfaceView<I : InterfacesInventory, T : Interfa
337346
if (parent == null) {
338347
close()
339348
} else {
340-
parent.open()
349+
parent.open(reload = false)
341350
}
342351
}
343352

@@ -352,10 +361,6 @@ public abstract class AbstractInterfaceView<I : InterfacesInventory, T : Interfa
352361
this,
353362
),
354363
) {
355-
// Only fully re-evaluate all properties if this menu wants to, or if this menu is the first
356-
// in a chain (parent is not there or this is the first non-player interface)
357-
val fullyReload = builder.alwaysReloadProperties || parent == null || parent is PlayerInterfaceView
358-
359364
// Run the initialize method on any state properties to refresh them,
360365
// ensure we only refresh every property once even if we need it multiple
361366
// times!
@@ -379,6 +384,9 @@ public abstract class AbstractInterfaceView<I : InterfacesInventory, T : Interfa
379384
}
380385
}
381386
}
387+
388+
// Mark that we have done a reload
389+
fullyReload = false
382390
}
383391
} finally {
384392
queueAllTriggers.set(false)

interfaces/src/main/kotlin/com/noxcrew/interfaces/view/InterfaceView.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public interface InterfaceView {
3434
public val isTreeOpened: Boolean
3535

3636
/** Opens up this view. */
37-
public suspend fun open()
37+
public suspend fun open(reload: Boolean = true)
3838

3939
/** Re-opens only if this menu should still be. */
4040
public suspend fun reopenIfIntended(): Boolean {
@@ -51,6 +51,7 @@ public interface InterfaceView {
5151
public suspend fun reopen(
5252
newParent: InterfaceView? =
5353
InterfacesListeners.INSTANCE.convertHolderToInterfaceView(player.openInventory.topInventory.getHolder(false)),
54+
reload: Boolean = true,
5455
): Boolean
5556

5657
/** Closes this view. */

0 commit comments

Comments
 (0)