-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathItemVarsExample.java
More file actions
93 lines (85 loc) · 3.58 KB
/
ItemVarsExample.java
File metadata and controls
93 lines (85 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package eu.okaeri.menu.test.example;
import eu.okaeri.menu.Menu;
import eu.okaeri.menu.navigation.NavigationUtils;
import eu.okaeri.menu.pane.StaticPane;
import org.bukkit.Material;
import org.bukkit.plugin.Plugin;
import java.util.Map;
import static eu.okaeri.menu.item.MenuItem.item;
/**
* Examples demonstrating item-level variables (.vars()).
* Variables defined once at item level are shared across name(), lore(), etc.
*/
public class ItemVarsExample {
/**
* Item-level variables shared across name and lore.
* Variables defined once with .vars() are automatically available in name(), lore(), etc.
*/
public static Menu createItemVarsMenu(Plugin plugin) {
return Menu.builder(plugin)
.title("&6Item-Level Variables")
.rows(3)
.pane(StaticPane.staticPane()
.name("main")
.bounds(0, 0, 3, 9)
// Example 1: Simple vars shared between name and lore
.item(1, 1, item()
.material(Material.DIAMOND)
.vars(Map.of(
"price", 100,
"currency", "coins"
))
.name("&bDiamond - <price> <currency>")
.lore("""
&7Price: &f<price> <currency>
&7Click to purchase!""")
.onClick(event -> event.sendMessage("&aPurchased for " + 100 + " coins!"))
.build())
// Example 2: Reactive vars with context-aware vars
.item(1, 3, item()
.material(Material.CLOCK)
.vars(ctx -> Map.of("count", ctx.getInt("counter"))) // Context-aware vars!
.name("&eCounter: <count>")
.lore("""
&7Current count: &f<count>
&eClick to increment!""")
.onClick(event -> {
event.set("counter", event.getInt("counter") + 1);
event.refresh();
})
.build())
// Example 3: Method-level vars override item-level vars
.item(1, 5, item()
.material(Material.EMERALD)
.vars(Map.of(
"item", "Emerald",
"price", 50
))
.name("&a<item>")
.lore("""
&7Default price: &f<price> coins
&7Sale price: &f<price> coins
&eSale is active!""",
Map.of("price", 25)) // Override item-level price for lore
.build())
// Example 4: Multiple placeholders from item-level vars
.item(1, 7, item()
.material(Material.ENCHANTED_BOOK)
.vars(Map.of(
"name", "Sharpness V",
"type", "Enchantment",
"rarity", "Epic",
"price", 250
))
.name("&d<name>")
.lore("""
&7Type: &f<type>
&7Rarity: &d<rarity>
&7Price: &6<price> coins
&eClick to purchase!""")
.build())
.item(2, 8, NavigationUtils.closeButton().build())
.build())
.build();
}
}