Skip to content

Commit 12c545e

Browse files
Improve exception messages for binding items to incorrect gui type
1 parent cc48833 commit 12c545e

File tree

5 files changed

+22
-4
lines changed

5 files changed

+22
-4
lines changed

invui/src/main/java/xyz/xenondevs/invui/item/AbstractPagedGuiBoundItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public abstract class AbstractPagedGuiBoundItem extends AbstractBoundItem {
1515
@Override
1616
public void bind(Gui gui) {
1717
if (!(gui instanceof PagedGui<?> pagedGui))
18-
throw new IllegalArgumentException("PageItem can only be used in a PagedGui");
18+
throw new IllegalArgumentException("AbstractPagedGuiBoundItem can only be bound to a PagedGui");
1919

2020
super.bind(gui);
2121
pagedGui.addPageChangeHandler(notifier);

invui/src/main/java/xyz/xenondevs/invui/item/AbstractScrollGuiBoundItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public abstract class AbstractScrollGuiBoundItem extends AbstractBoundItem {
1515
@Override
1616
public void bind(Gui gui) {
1717
if (!(gui instanceof ScrollGui<?> scrollGui))
18-
throw new IllegalArgumentException("ScrollItem can only be used in a ScrollGui");
18+
throw new IllegalArgumentException("AbstractScrollGuiBoundItem can only be bound to a ScrollGui");
1919

2020
super.bind(gui);
2121
scrollGui.addScrollHandler(notifier);

invui/src/main/java/xyz/xenondevs/invui/item/AbstractTabGuiBoundItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public abstract class AbstractTabGuiBoundItem extends AbstractBoundItem {
1515
@Override
1616
public void bind(Gui gui) {
1717
if (!(gui instanceof TabGui tabGui))
18-
throw new IllegalArgumentException("TabItem can only be used in a TabGui");
18+
throw new IllegalArgumentException("AbstractTabGuiBoundItem can only be bound to a TabGui");
1919

2020
super.bind(gui);
2121
tabGui.addTabChangeHandler(notifier);

invui/src/main/java/xyz/xenondevs/invui/item/BoundItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public sealed interface BoundItem extends Item permits AbstractBoundItem {
5555
* @return A new {@link Builder} for a {@link BoundItem}.
5656
*/
5757
static Builder<Gui> builder() {
58-
return new CustomBoundItem.Builder<>();
58+
return new CustomBoundItem.Builder<>(Gui.class);
5959
}
6060

6161
/**

invui/src/main/java/xyz/xenondevs/invui/item/CustomBoundItem.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
class CustomBoundItem<G extends Gui> extends AbstractBoundItem {
2525

26+
private final Class<? extends Gui> guiClass;
2627
private final TriConsumer<? super Item, ? super G, ? super Click> clickHandler;
2728
private final QuadConsumer<? super Item, ? super G, ? super Player, ? super Integer> selectHandler;
2829
private volatile BiFunction<? super Player, ? super G, ? extends ItemProvider> itemProvider;
@@ -32,13 +33,15 @@ class CustomBoundItem<G extends Gui> extends AbstractBoundItem {
3233
private @Nullable BukkitTask updateTask;
3334

3435
public CustomBoundItem(
36+
Class<? extends Gui> guiClass,
3537
BiConsumer<? super Item, ? super G> bindHandler,
3638
BiConsumer<? super Item, ? super G> unbindHandler,
3739
TriConsumer<? super Item, ? super G, ? super Click> clickHandler,
3840
QuadConsumer<? super Item, ? super G, ? super Player, ? super Integer> selectHandler,
3941
BiFunction<? super Player, ? super G, ? extends ItemProvider> itemProvider,
4042
int updatePeriod
4143
) {
44+
this.guiClass = guiClass;
4245
this.bindHandler = bindHandler;
4346
this.unbindHandler = unbindHandler;
4447
this.clickHandler = clickHandler;
@@ -61,6 +64,8 @@ public ItemProvider getItemProvider(Player viewer) {
6164
@SuppressWarnings("unchecked")
6265
@Override
6366
public void bind(Gui gui) {
67+
if (!guiClass.isAssignableFrom(gui.getClass()))
68+
throw new IllegalArgumentException("This item can only be bound to a " + guiClass.getSimpleName());
6469
bindHandler.accept(this, (G) gui);
6570
super.bind(gui);
6671
}
@@ -105,6 +110,7 @@ public void removeViewer(AbstractWindow<?> who, int how) {
105110

106111
non-sealed static class Builder<G extends Gui> implements BoundItem.Builder<G> {
107112

113+
private final Class<? extends Gui> guiClass;
108114
protected BiConsumer<Item, G> bindHandler = (item, gui) -> {};
109115
protected BiConsumer<Item, G> unbindHandler = (item, gui) -> {};
110116
private TriConsumer<Item, G, Click> clickHandler = (item, gui, click) -> {};
@@ -117,6 +123,10 @@ non-sealed static class Builder<G extends Gui> implements BoundItem.Builder<G> {
117123
private boolean updateOnClick;
118124
private int updatePeriod = -1;
119125

126+
public Builder(Class<? extends Gui> guiClass) {
127+
this.guiClass = guiClass;
128+
}
129+
120130
@Override
121131
public Builder<G> setItemProvider(ItemProvider itemProvider) {
122132
this.itemProviderFn = (viewer, gui) -> itemProvider;
@@ -229,6 +239,7 @@ public BoundItem build() {
229239
CustomBoundItem<G> customItem;
230240
if (asyncPlaceholder != null && itemProviderFn != null) {
231241
customItem = new CustomBoundItem<>(
242+
guiClass,
232243
bindHandler,
233244
unbindHandler,
234245
clickHandler,
@@ -254,6 +265,7 @@ public BoundItem build() {
254265
}
255266
} else {
256267
customItem = new CustomBoundItem<>(
268+
guiClass,
257269
bindHandler,
258270
unbindHandler,
259271
clickHandler,
@@ -271,6 +283,8 @@ public BoundItem build() {
271283
static class Paged extends Builder<PagedGui<?>> {
272284

273285
Paged() {
286+
super(PagedGui.class);
287+
274288
var pageChangeHandler = new AtomicReference<BiConsumer<Integer, Integer>>();
275289
var pageCountChangeHandler = new AtomicReference<BiConsumer<Integer, Integer>>();
276290

@@ -292,6 +306,8 @@ static class Paged extends Builder<PagedGui<?>> {
292306
static class Scroll extends Builder<ScrollGui<?>> {
293307

294308
Scroll() {
309+
super(ScrollGui.class);
310+
295311
var scrollHandler = new AtomicReference<BiConsumer<Integer, Integer>>();
296312
var lineCountChangeHandler = new AtomicReference<BiConsumer<Integer, Integer>>();
297313

@@ -314,6 +330,8 @@ static class Scroll extends Builder<ScrollGui<?>> {
314330
static class Tab extends Builder<TabGui> {
315331

316332
Tab() {
333+
super(TabGui.class);
334+
317335
var tabChangeHandler = new AtomicReference<BiConsumer<Integer, Integer>>();
318336

319337
bindHandler = bindHandler.andThen((item, gui) -> {

0 commit comments

Comments
 (0)