Skip to content

Commit 5a65f3c

Browse files
Add some javadoc
1 parent e832dd4 commit 5a65f3c

10 files changed

Lines changed: 186 additions & 2 deletions

File tree

invui/src/main/java/xyz/xenondevs/invui/gui/ScrollGui.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
import java.util.function.Consumer;
1010
import java.util.function.Supplier;
1111

12+
/**
13+
* A {@link Gui} that displays content in lines that can be scrolled through.
14+
* @param <C> The content type.
15+
*/
1216
public sealed interface ScrollGui<C> extends Gui permits AbstractScrollGui {
1317

1418
/**

invui/src/main/java/xyz/xenondevs/invui/gui/SlotElement.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
import xyz.xenondevs.invui.inventory.Inventory;
88
import xyz.xenondevs.invui.item.ItemProvider;
99

10+
/**
11+
* Represents an element in a slot in a {@link Gui}.
12+
* You will rarely need to use this interface directly.
13+
*/
1014
public sealed interface SlotElement {
1115

1216
@Nullable

invui/src/main/java/xyz/xenondevs/invui/gui/TabGui.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
import java.util.function.Consumer;
88
import java.util.function.Supplier;
99

10+
/**
11+
* A {@link Gui} that displays multiple tabs, which themselves are {@link Gui Guis} as well.
12+
*/
1013
public sealed interface TabGui extends Gui permits TabGuiImpl {
1114

1215
/**

invui/src/main/java/xyz/xenondevs/invui/i18n/Languages.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
import java.util.Map;
1717
import java.util.function.Function;
1818

19+
/**
20+
* Handles localization of items and window titles.
21+
*/
1922
public class Languages {
2023

2124
private static final Languages INSTANCE = new Languages();

invui/src/main/java/xyz/xenondevs/invui/inventory/event/UpdateReason.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package xyz.xenondevs.invui.inventory.event;
22

3+
import xyz.xenondevs.invui.inventory.Inventory;
4+
5+
/**
6+
* A reason for an {@link Inventory} update.
7+
*/
38
public interface UpdateReason {
49

510
/**

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

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,28 +39,74 @@ public sealed interface BoundItem extends Item permits AbstractBoundItem {
3939
*/
4040
boolean isBound();
4141

42+
/**
43+
* Creates a new {@link Builder} for a {@link BoundItem} that can be bound to any {@link Gui}.
44+
*
45+
* @return A new {@link Builder} for a {@link BoundItem}.
46+
*/
4247
static Builder<Gui> gui() {
4348
return new CustomBoundItem.Builder<>();
4449
}
4550

51+
/**
52+
* Creates a new {@link Builder} for a {@link BoundItem} that can be bound to a {@link PagedGui}.
53+
* The item will be automatically updated when the bound {@link PagedGui PagedGui's} page or content changes.
54+
*
55+
* @return A new {@link Builder} for a {@link BoundItem}.
56+
*/
4657
static Builder<PagedGui<?>> pagedGui() {
4758
return new CustomBoundItem.Builder.Paged();
4859
}
4960

61+
/**
62+
* Creates a new {@link Builder} for a {@link BoundItem} that can be bound to a {@link ScrollGui}.
63+
* The item will be automatically updated when the bound {@link ScrollGui ScrollGui's} line or content changes.
64+
*
65+
* @return A new {@link Builder} for a {@link BoundItem}.
66+
*/
5067
static Builder<ScrollGui<?>> scrollGui() {
5168
return new CustomBoundItem.Builder.Scroll();
5269
}
5370

71+
/**
72+
* Creates a new {@link Builder} for a {@link BoundItem} that can be bound to a {@link TabGui}.
73+
* The item will be automatically updated when the bound {@link TabGui TabGui's} tab changes.
74+
*
75+
* @return A new {@link Builder} for a {@link BoundItem}.
76+
*/
5477
static Builder<TabGui> tabGui() {
5578
return new CustomBoundItem.Builder.Tab();
5679
}
5780

81+
/**
82+
* A builder for a {@link BoundItem}.
83+
*
84+
* @param <G> The type of {@link Gui} this item can be bound to.
85+
*/
5886
sealed interface Builder<G extends Gui> extends Item.Builder<Builder<G>> permits CustomBoundItem.Builder {
5987

88+
/**
89+
* Adds a bind handler that is called when the item is bound to a {@link Gui}.
90+
*
91+
* @param handler The bind handler.
92+
* @return This builder.
93+
*/
6094
Builder<G> addBindHandler(BiConsumer<Item, G> handler);
6195

96+
/**
97+
* Adds a click handler that is called when the item is clicked.
98+
*
99+
* @param handler The click handler, receiving the {@link Item} itself, the bound {@link Gui} and the {@link Click}.
100+
* @return This builder.
101+
*/
62102
Builder<G> addClickHandler(TriConsumer<Item, G, Click> handler);
63103

104+
/**
105+
* Sets the item provider that provides the item for a specific player and {@link Gui}.
106+
*
107+
* @param itemProvider The item provider.
108+
* @return This builder.
109+
*/
64110
Builder<G> setItemProvider(BiFunction<Player, G, ItemProvider> itemProvider);
65111

66112
}

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

Lines changed: 95 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,9 @@ public sealed interface Item permits AbstractItem, BoundItem {
1919

2020
/**
2121
* Gets the {@link ItemProvider}.
22-
* This method gets called every time a {@link Window} is notified ({@link #notifyWindows()}).
22+
* This method gets called every time a {@link Window} is updated, triggered by ({@link #notifyWindows()}).
2323
*
2424
* @param viewer The {@link Player} that sees the {@link Item}.
25-
*
2625
* @return The {@link ItemProvider}
2726
*/
2827
ItemProvider getItemProvider(Player viewer);
@@ -45,44 +44,138 @@ public sealed interface Item permits AbstractItem, BoundItem {
4544
*/
4645
void handleClick(ClickType clickType, Player player, Click click);
4746

47+
/**
48+
* Creates a new {@link Builder} for an {@link Item}.
49+
*
50+
* @return A new {@link Builder} for an {@link Item}.
51+
*/
4852
static Builder<?> builder() {
4953
return new CustomItem.Builder();
5054
}
5155

56+
/**
57+
* Creates a simple {@link Item} with a static {@link ItemStack}.
58+
*
59+
* @param itemStack The {@link ItemStack} to display.
60+
* @return A simple {@link Item}.
61+
*/
5262
static Item simple(ItemStack itemStack) {
5363
return builder().setItemProvider(new ItemWrapper(itemStack)).build();
5464
}
5565

66+
/**
67+
* Creates a simple {@link Item} with a static {@link ItemProvider}.
68+
*
69+
* @param itemProvider The {@link ItemProvider} to display.
70+
* @return A simple {@link Item}.
71+
*/
5672
static Item simple(ItemProvider itemProvider) {
5773
return builder().setItemProvider(itemProvider).build();
5874
}
5975

76+
/**
77+
* Creates a simple {@link Item} that resolves its {@link ItemProvider} using the provided function.
78+
* The function is called every time it is updated, triggered by {@link #notifyWindows()}.
79+
*
80+
* @param itemProvider The function that resolves the {@link ItemProvider}, receiving the viewing {@link Player}.
81+
* @return A simple {@link Item}.
82+
*/
6083
static Item simple(Function<Player, ItemProvider> itemProvider) {
6184
return builder().setItemProvider(itemProvider).build();
6285
}
6386

87+
/**
88+
* A builder for an {@link Item}.
89+
*
90+
* @param <S> The type of the builder itself.
91+
*/
6492
interface Builder<S extends Builder<S>> {
6593

94+
/**
95+
* Sets the {@link ItemProvider} of the {@link Item}.
96+
*
97+
* @param itemProvider The {@link ItemProvider}.
98+
* @return This builder.
99+
*/
66100
S setItemProvider(ItemProvider itemProvider);
67101

102+
/**
103+
* Sets the function that resolves the {@link ItemProvider}, receiving the viewing {@link Player}.
104+
* The function is called every time it is updated, triggered by {@link Item#notifyWindows()}.
105+
*
106+
* @param itemProvider The function that resolves the {@link ItemProvider}.
107+
* @return This builder.
108+
*/
68109
S setItemProvider(Function<Player, ItemProvider> itemProvider);
69110

111+
/**
112+
* Configures the {@link Item} to automatically cycle through a given array of {@link ItemProvider ItemProviders}.
113+
*
114+
* @param period The period in ticks between each cycle.
115+
* @param itemProvider The first {@link ItemProvider}.
116+
* @param itemProviders The rest of the {@link ItemProvider ItemProviders}.
117+
* @return This builder.
118+
*/
70119
default S setCyclingItemProvider(int period, ItemProvider itemProvider, ItemProvider... itemProviders) {
71120
return setCyclingItemProvider(period, List.of(ArrayUtils.concat(ItemProvider[]::new, itemProvider, itemProviders)));
72121
}
73122

123+
/**
124+
* Configures the {@link Item} to automatically cycle through a given list of {@link ItemProvider ItemProviders}.
125+
*
126+
* @param period The period in ticks between each cycle.
127+
* @param itemProviders The {@link ItemProvider ItemProviders}.
128+
* @return This builder.
129+
*/
74130
S setCyclingItemProvider(int period, List<? extends ItemProvider> itemProviders);
75131

132+
/**
133+
* Configures the resulting {@link Item} to resolve the {@link ItemProvider} set via {@link #setItemProvider(Function)}
134+
* asynchronously. Once resolved, the {@link ItemProvider} will stay like this and the function will never be called again.
135+
* (Not even when calling {@link Item#notifyWindows()})
136+
*
137+
* @param placeholder The {@link ItemProvider} to display while the actual {@link ItemProvider} is being resolved.
138+
* @return This builder.
139+
*/
76140
S async(ItemProvider placeholder);
77141

142+
/**
143+
* Configures the resulting to automatically call {@link #notifyWindows()} every period ticks, while it is
144+
* being displayed in a {@link Window}.
145+
*
146+
* @param period The period in ticks between each update.
147+
* @return This builder.
148+
*/
78149
S updatePeriodically(long period);
79150

151+
/**
152+
* Configures the resulting {@link Item} to automatically call {@link #notifyWindows()} when it is clicked.
153+
*
154+
* @return This builder.
155+
*/
80156
S updateOnClick();
81157

158+
/**
159+
* Adds a click handler that is called when the {@link Item} is clicked.
160+
*
161+
* @param clickHandler The click handler, receiving the {@link Item} itself and the {@link Click}.
162+
* @return This builder.
163+
*/
82164
S addClickHandler(BiConsumer<Item, Click> clickHandler);
83165

166+
/**
167+
* Adds a modifier that is run on the {@link Item} when it is being built.
168+
*
169+
* @param modifier The modifier.
170+
* @return This builder.
171+
*/
84172
S addModifier(Consumer<Item> modifier);
85173

174+
/**
175+
* Builds the {@link Item}.
176+
*
177+
* @return The {@link Item}.
178+
*/
86179
Item build();
87180

88181
}

invui/src/main/java/xyz/xenondevs/invui/util/ColorPalette.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
import java.io.IOException;
77
import java.io.InputStream;
88

9+
/**
10+
* Utility for converting images into the color space used by maps in Minecraft.
11+
*/
912
public class ColorPalette {
1013

1114
private static final byte[] colorCache;

invui/src/main/java/xyz/xenondevs/invui/util/ItemUtils.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import org.bukkit.inventory.ItemStack;
55
import org.jspecify.annotations.Nullable;
66

7+
/**
8+
* Generic item-related utilities.
9+
*/
710
public class ItemUtils {
811

912
/**

invui/src/main/java/xyz/xenondevs/invui/util/TriConsumer.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,30 @@
11
package xyz.xenondevs.invui.util;
22

3+
/**
4+
* A functional interface that takes three arguments and returns no result.
5+
*
6+
* @param <A> The first argument type
7+
* @param <B> The second argument type
8+
* @param <C> The third argument type
9+
*/
310
@FunctionalInterface
411
public interface TriConsumer<A, B, C> {
512

13+
/**
14+
* Performs this operation on the given arguments.
15+
*
16+
* @param a The first operand
17+
* @param b The second operand
18+
* @param c The third operand
19+
*/
620
void accept(A a, B b, C c);
721

22+
/**
23+
* Returns a composed {@code TriConsumer} that performs, in sequence, this operation followed by the {@code after} operation.
24+
*
25+
* @param after The operation to perform after this operation
26+
* @return A composed {@code TriConsumer} that performs in sequence this operation followed by the {@code after} operation
27+
*/
828
default TriConsumer<A, B, C> andThen(TriConsumer<? super A, ? super B, ? super C> after) {
929
return (a, b, c) -> {
1030
accept(a, b, c);

0 commit comments

Comments
 (0)