Skip to content

Commit db2942a

Browse files
committed
/sp gui, GUI Complete, need prettification
InventoryInteractEvent was not being fired, although their children do. Prefix Menu works, `/sp gui` works with many pages.
1 parent 3ce2cda commit db2942a

3 files changed

Lines changed: 61 additions & 21 deletions

File tree

README.md

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,30 @@ A plugin aiming to allow for simple player-selected prefixes that can be used in
1111
>
1212
> Documentation is made for existing versions, more for our sake.
1313
14-
## Requirements
14+
# Requirements
1515

1616
- Paper-based Server (ie: [PurpurMC](https://purpurmc.org/))
1717
- This plugin takes advantage of Mini-Message from Paper.
1818
- [PlaceholderAPI Plugin](https://github.com/PlaceholderAPI/PlaceholderAPI)
1919

20-
## Features
20+
# Features
2121

22+
- Does not interact with any other plugins directly.
23+
- The plugin uses and hold prefixes in a placeholder, it will not affect permission groups.
24+
- Supports PlaceholderAPI Placeholders.
25+
- Supports Mini-Message formatting.
26+
- Supports multiple types of requirements: PERMISSION, STATISTIC, ADVANCEMENT, COMPARE_INT
2227

23-
24-
## Placeholders, Commands, and Permissions
28+
# Placeholders, Commands, and Permissions
2529

2630
`%sp_prefix%`
2731
> Placeholder for the prefix. Use this in your chat plugin.
2832
>
2933
> Example Usage: `%sp_prefix% %player_displayname% » {message}`
3034
35+
`/sp gui`
36+
> Opens a generated GUI that organizes the prefixes by prefix-id.
37+
3138
`/sp reset`
3239
> Resets your prefix.
3340
@@ -37,7 +44,7 @@ A plugin aiming to allow for simple player-selected prefixes that can be used in
3744
`/sp reload`
3845
> Reloads the plugin.
3946
40-
## Configuration
47+
# Configuration
4148

4249
```yml
4350
saving-type: "file"
@@ -59,14 +66,14 @@ prefix-id:
5966
- "compare_int %placeholder% < 1"
6067
```
6168
62-
### Configuration Settings
69+
## Configuration Settings
6370
6471
| Setting | Description | Valid Values |
6572
|----------------|---------------------------------------------|---------------|
6673
| saving-type | What type of saving system should this use? | `PDC`, `FILE` |
6774
| default-prefix | Fallback prefix, supports Placeholders. | String |
6875

69-
#### Saving Types
76+
### Saving Types
7077

7178
These are the current implementations of the saving types...
7279

@@ -181,6 +188,11 @@ Format: `compare_int <placeholder> <operator> <value>`
181188
>
182189
> <u>Example</u>: `compare_int %player_absorption% > 0` (Player has absorption value greater than 0).
183190

191+
<u>**Unimplemented**</u>
192+
193+
- Compare String, Case Sensitive
194+
- Compare String, Case Insensitive
195+
184196
## WIP Features
185197

186198
- Chest GUI

src/main/java/adhdmc/simpleprefixes/gui/chest/PrefixMenu.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public class PrefixMenu {
2626
public static final NamespacedKey nskPrefixId = new NamespacedKey(SimplePrefixes.getPlugin(), "prefix_id");
2727
public static final NamespacedKey nskUnlocked = new NamespacedKey(SimplePrefixes.getPlugin(), "prefix_unlocked");
2828
public static final NamespacedKey nskPrefixMenu = new NamespacedKey(SimplePrefixes.getPlugin(), "prefix_menu");
29+
public static final NamespacedKey nskPage = new NamespacedKey(SimplePrefixes.getPlugin(), "prefix_page");
2930
private final int PER_PAGE = 45;
3031
private final MiniMessage mini = SimplePrefixes.getMiniMessage();
3132

@@ -68,22 +69,23 @@ private List<String> getPlayerPrefixOptions(Player p) {
6869
return prefixes;
6970
}
7071

72+
// TODO: Everything within this section should be configurable.
7173
private ItemStack generatePrefixItem(Player player, Prefix prefix) {
72-
ItemStack item = new ItemStack(Material.NAME_TAG);
74+
boolean unlocked = RequirementUtil.getInstance().isEarnedPrefix(player, prefix);
75+
ItemStack item = (unlocked) ? new ItemStack(Material.NAME_TAG) : new ItemStack(Material.BARRIER);
7376
ItemMeta meta = item.getItemMeta();
7477
assert prefix.displayName != null;
7578
assert prefix.prefix != null;
76-
String papiDisplayName = "<reset>" + PlaceholderAPI.setPlaceholders(player, prefix.displayName);
77-
String papiPrefix = "<reset>" + PlaceholderAPI.setPlaceholders(player, prefix.prefix);
78-
boolean unlocked = RequirementUtil.getInstance().isEarnedPrefix(player, prefix);
79-
String unlockedLore = "<reset>" + (unlocked ? "<aqua><bold>✔ UNLOCKED" : "<red><bold>✗ LOCKED"); // TODO: Make Configurable
79+
String papiDisplayName = "<!i><white>" + PlaceholderAPI.setPlaceholders(player, prefix.displayName);
80+
String papiPrefix = "<!i><white>" + PlaceholderAPI.setPlaceholders(player, prefix.prefix);
81+
String unlockedLore = "<!i><white>" + (unlocked ? "<aqua><bold>✔ UNLOCKED" : "<red><bold>✗ LOCKED");
8082
meta.displayName(mini.deserialize(papiDisplayName));
8183
List<Component> lore = new ArrayList<>();
8284
lore.add(mini.deserialize(papiPrefix));
8385
lore.add(mini.deserialize(""));
8486
lore.add(mini.deserialize(unlockedLore));
8587
for (String line : prefix.description) {
86-
String papiLine = "<reset>" + PlaceholderAPI.setPlaceholders(player, line);
88+
String papiLine = "<!i><white>" + PlaceholderAPI.setPlaceholders(player, line);
8789
lore.add(mini.deserialize(papiLine));
8890
}
8991
meta.lore(lore);
@@ -101,6 +103,8 @@ private ItemStack generatePageArrowItem(int page, int prefixes, boolean forward)
101103
ItemStack item = new ItemStack(Material.ARROW);
102104
ItemMeta meta = item.getItemMeta();
103105
String displayName = forward ? "<bold>Next Page >>" : "<bold><< Prev Page";
106+
int toPage = forward ? page+1 : page-1;
107+
meta.getPersistentDataContainer().set(nskPage, PersistentDataType.INTEGER, toPage);
104108
meta.displayName(mini.deserialize(displayName));
105109
item.setItemMeta(meta);
106110
return item;
Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,35 @@
11
package adhdmc.simpleprefixes.gui.chest.listener;
22

3-
import adhdmc.simpleprefixes.SimplePrefixes;
43
import adhdmc.simpleprefixes.gui.chest.PrefixMenu;
5-
import net.kyori.adventure.text.minimessage.MiniMessage;
4+
import adhdmc.simpleprefixes.util.PrefixUtil;
5+
import org.bukkit.entity.Player;
66
import org.bukkit.event.EventHandler;
77
import org.bukkit.event.Listener;
8-
import org.bukkit.event.inventory.InventoryInteractEvent;
8+
import org.bukkit.event.inventory.InventoryClickEvent;
9+
import org.bukkit.event.inventory.InventoryDragEvent;
910
import org.bukkit.event.inventory.InventoryType;
1011
import org.bukkit.inventory.Inventory;
1112
import org.bukkit.inventory.ItemStack;
13+
import org.bukkit.persistence.PersistentDataContainer;
14+
import org.bukkit.persistence.PersistentDataType;
1215

1316
public class PrefixMenuListener implements Listener {
1417

1518
@EventHandler
16-
public void onInventoryInteractEvent(InventoryInteractEvent event) {
19+
public void onInventoryClick(InventoryClickEvent event) {
20+
Inventory inventory = event.getInventory();
21+
if (!isPrefixMenu(inventory)) return;
22+
if (!(event.getWhoClicked() instanceof Player player)) return;
23+
ItemStack item = event.getCurrentItem();
24+
if (item == null) return;
1725
event.setCancelled(true);
18-
SimplePrefixes.getPlugin().getServer().broadcast(MiniMessage.miniMessage().deserialize("<red>SERVER READ INPUT"));
19-
event.getWhoClicked().sendRichMessage("<green>YOU CLICKED IT!");
20-
if (!isPrefixMenu(event.getInventory())) return;
21-
event.getWhoClicked().sendRichMessage("<blue>CANCELLED!");
26+
evalSelection(event.getCurrentItem(), player);
27+
}
28+
29+
@EventHandler
30+
public void onInventoryDrag(InventoryDragEvent event) {
31+
Inventory inventory = event.getInventory();
32+
if (!isPrefixMenu(inventory)) return;
2233
event.setCancelled(true);
2334
}
2435

@@ -29,4 +40,17 @@ private boolean isPrefixMenu(Inventory inv) {
2940
return item.getItemMeta().getPersistentDataContainer().has(PrefixMenu.nskPrefixMenu);
3041
}
3142

43+
private void evalSelection(ItemStack item, Player p) {
44+
if (item == null) return;
45+
Integer newPage = item.getItemMeta().getPersistentDataContainer().get(PrefixMenu.nskPage, PersistentDataType.INTEGER);
46+
if (newPage != null) {
47+
Inventory newMenu = PrefixMenu.getInstance().generatePrefixMenu(p, newPage);
48+
p.openInventory(newMenu);
49+
return;
50+
}
51+
PersistentDataContainer pdc = item.getItemMeta().getPersistentDataContainer();
52+
String prefixId = pdc.get(PrefixMenu.nskPrefixId, PersistentDataType.STRING);
53+
if (prefixId == null) return;
54+
if (pdc.has(PrefixMenu.nskUnlocked)) PrefixUtil.getInstance().setPrefix(p, prefixId);
55+
}
3256
}

0 commit comments

Comments
 (0)