Skip to content

Commit 1714f8d

Browse files
committed
v1.0 finished!
1 parent 727e963 commit 1714f8d

File tree

7 files changed

+162
-119
lines changed

7 files changed

+162
-119
lines changed
Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,32 @@
11
package me.datatags.ultracosmeticsguiaddon;
22

3+
import org.bukkit.Bukkit;
34
import org.bukkit.event.EventHandler;
45
import org.bukkit.event.Listener;
56
import org.bukkit.event.player.PlayerJoinEvent;
67

78
public class ResourcePackListener implements Listener {
9+
public static final String PACK_URL = "https://github.com/dennishzg/uc-gui/releases/download/v1.0.0/UC-GUI-v1.0.0.zip";
10+
public static final byte[] PACK_HASH = hexStringToByteArray("69e2f55fed03602a0f220d8524fa00771456343b");
11+
private final UltraCosmeticsGUIAddon plugin;
12+
public ResourcePackListener(UltraCosmeticsGUIAddon plugin) {
13+
this.plugin = plugin;
14+
}
815
@EventHandler
916
public void onJoin(PlayerJoinEvent event) {
10-
event.getPlayer().setResourcePack(UltraCosmeticsGUIAddon.PACK_URL, UltraCosmeticsGUIAddon.PACK_HASH);
17+
//Bukkit.getScheduler().runTaskLater(plugin, () -> event.getPlayer().setResourcePack(PACK_URL, PACK_HASH), 20);
18+
event.getPlayer().setResourcePack(PACK_URL, PACK_HASH);
19+
}
20+
21+
// https://stackoverflow.com/a/140861
22+
/* s must be an even-length string. */
23+
private static byte[] hexStringToByteArray(String s) {
24+
int len = s.length();
25+
byte[] data = new byte[len / 2];
26+
for (int i = 0; i < len; i += 2) {
27+
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
28+
+ Character.digit(s.charAt(i+1), 16));
29+
}
30+
return data;
1131
}
1232
}
Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,35 @@
11
package me.datatags.ultracosmeticsguiaddon;
22

3+
import be.isach.ultracosmetics.UCAddon;
4+
import be.isach.ultracosmetics.UltraCosmetics;
5+
import be.isach.ultracosmetics.UltraCosmeticsData;
6+
import be.isach.ultracosmetics.menu.Menus;
7+
import me.datatags.ultracosmeticsguiaddon.menus.TexturedMainMenu;
8+
import me.datatags.ultracosmeticsguiaddon.menus.TexturedMenuPurchase;
9+
import org.bukkit.Material;
10+
import org.bukkit.event.HandlerList;
11+
import org.bukkit.inventory.ItemStack;
12+
import org.bukkit.inventory.meta.ItemMeta;
313
import org.bukkit.plugin.java.JavaPlugin;
414

5-
public class UltraCosmeticsGUIAddon extends JavaPlugin {
6-
public static final String PACK_URL = "https://github.com/dennishzg/uc-gui/releases/download/v1.0.0/UC-GUI-v1.0.0.zip";
7-
public static final byte[] PACK_HASH = hexStringToByteArray("69e2f55fed03602a0f220d8524fa00771456343b");
15+
public class UltraCosmeticsGUIAddon extends JavaPlugin implements UCAddon {
816
@Override
917
public void onEnable() {
18+
UltraCosmetics ultraCosmetics = UltraCosmeticsData.get().getPlugin();
19+
ultraCosmetics.registerAddon(this);
20+
reload(ultraCosmetics);
21+
}
22+
23+
@Override
24+
public void reload(UltraCosmetics ultraCosmetics) {
25+
HandlerList.unregisterAll(this);
1026
saveDefaultConfig();
1127
if (getConfig().getBoolean("Send pack to players", true)) {
12-
getServer().getPluginManager().registerEvents(new ResourcePackListener(), this);
13-
}
14-
}
15-
// https://stackoverflow.com/a/140861
16-
/* s must be an even-length string. */
17-
private static byte[] hexStringToByteArray(String s) {
18-
int len = s.length();
19-
byte[] data = new byte[len / 2];
20-
for (int i = 0; i < len; i += 2) {
21-
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
22-
+ Character.digit(s.charAt(i+1), 16));
28+
getServer().getPluginManager().registerEvents(new ResourcePackListener(this), this);
2329
}
24-
return data;
30+
getLogger().info("Loading menus");
31+
Menus menus = ultraCosmetics.getMenus();
32+
menus.setMainMenu(new TexturedMainMenu(ultraCosmetics));
33+
menus.setMenuPurchaseFactory(TexturedMenuPurchase::new);
2534
}
2635
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package me.datatags.ultracosmeticsguiaddon.buttons;
2+
3+
import be.isach.ultracosmetics.menu.Button;
4+
import be.isach.ultracosmetics.menu.ClickData;
5+
import be.isach.ultracosmetics.player.UltraPlayer;
6+
import org.bukkit.Material;
7+
import org.bukkit.inventory.ItemStack;
8+
import org.bukkit.inventory.meta.ItemMeta;
9+
10+
public class InvisibleButtonWrapper implements Button {
11+
private final Button wrapped;
12+
public InvisibleButtonWrapper(Button wrapped) {
13+
this.wrapped = wrapped;
14+
}
15+
@Override
16+
public ItemStack getDisplayItem(UltraPlayer ultraPlayer) {
17+
ItemStack stack = wrapped.getDisplayItem(ultraPlayer).clone();
18+
stack.setType(Material.MAP);
19+
ItemMeta meta = stack.getItemMeta();
20+
meta.setCustomModelData(1010);
21+
stack.setItemMeta(meta);
22+
return stack;
23+
}
24+
25+
@Override
26+
public void onClick(ClickData clickData) {
27+
wrapped.onClick(clickData);
28+
}
29+
}

src/main/java/me/datatags/ultracosmeticsguiaddon/buttons/InvisibleCategoryButton.java

Lines changed: 0 additions & 44 deletions
This file was deleted.

src/main/java/me/datatags/ultracosmeticsguiaddon/menus/TexturedMainMenu.java

Lines changed: 40 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@
44
import be.isach.ultracosmetics.UltraCosmeticsData;
55
import be.isach.ultracosmetics.config.MessageManager;
66
import be.isach.ultracosmetics.cosmetics.Category;
7+
import be.isach.ultracosmetics.menu.Button;
78
import be.isach.ultracosmetics.menu.Menu;
89
import be.isach.ultracosmetics.menu.buttons.ClearCosmeticButton;
910
import be.isach.ultracosmetics.menu.buttons.KeysButton;
1011
import be.isach.ultracosmetics.menu.buttons.OpenChestButton;
1112
import be.isach.ultracosmetics.menu.buttons.OpenCosmeticMenuButton;
1213
import be.isach.ultracosmetics.player.UltraPlayer;
1314
import be.isach.ultracosmetics.shaded.adventure.text.Component;
15+
import be.isach.ultracosmetics.shaded.adventure.text.format.NamedTextColor;
16+
import me.datatags.ultracosmeticsguiaddon.buttons.InvisibleButtonWrapper;
1417
import org.bukkit.inventory.Inventory;
1518

1619
/**
@@ -20,50 +23,20 @@
2023
* @since 08-23-2016
2124
*/
2225
public class TexturedMainMenu extends Menu {
23-
private final Component title = MessageManager.getMessage("Menu.Main.Title");
24-
private int[] layout;
26+
private final Component title = Component.text(generateTitle(), NamedTextColor.WHITE);
2527

26-
public TexturedMainMenu(UltraCosmetics ultraCosmetics) {
27-
super(ultraCosmetics);
28-
29-
switch (Category.enabledSize()) {
30-
case 10:
31-
layout = new int[] {9, 11, 13, 15, 17, 27, 29, 31, 33, 35};
32-
break;
33-
case 9:
34-
layout = new int[] {9, 11, 13, 15, 17, 28, 30, 32, 34};
35-
break;
36-
case 8:
37-
layout = new int[] {10, 12, 14, 16, 28, 30, 32, 34};
38-
break;
39-
case 7:
40-
layout = new int[] {10, 13, 16, 28, 30, 32, 34};
41-
break;
42-
case 6:
43-
layout = new int[] {10, 13, 16, 28, 31, 34};
44-
break;
45-
case 5:
46-
layout = new int[] {10, 16, 22, 29, 33};
47-
break;
48-
case 4:
49-
layout = new int[] {19, 21, 23, 25};
50-
break;
51-
case 3:
52-
layout = new int[] {20, 22, 24};
53-
break;
54-
case 2:
55-
layout = new int[] {21, 23};
56-
break;
57-
case 1:
58-
layout = new int[] {22};
59-
break;
28+
private static String generateTitle() {
29+
StringBuilder builder = new StringBuilder();
30+
for (int i = 0; i < 8; i++) {
31+
// Dice emoji
32+
builder.append("\uD83C\uDFB2");
6033
}
34+
// House emoji
35+
return builder.append("\uD83C\uDFE0").toString();
36+
}
6137

62-
if (UltraCosmeticsData.get().areTreasureChestsEnabled() && layout != null) {
63-
for (int i = 0; i < layout.length; i++) {
64-
layout[i] += 9;
65-
}
66-
}
38+
public TexturedMainMenu(UltraCosmetics ultraCosmetics) {
39+
super(ultraCosmetics);
6740
}
6841

6942
@Override
@@ -77,23 +50,32 @@ public void open(UltraPlayer player) {
7750

7851
@Override
7952
protected void putItems(Inventory inventory, UltraPlayer player) {
80-
if (Category.enabledSize() > 0) {
81-
int i = 0;
82-
boolean foundSuits = false;
83-
for (Category category : Category.enabled()) {
84-
// Avoid counting suits categories as different menu items
85-
if (category.isSuits()) {
86-
if (foundSuits) continue;
87-
foundSuits = true;
88-
}
89-
putItem(inventory, layout[i++], new OpenCosmeticMenuButton(getUltraCosmetics(), category), player);
90-
}
91-
}
92-
putItem(inventory, inventory.getSize() - 5, new ClearCosmeticButton(), player);
93-
if (UltraCosmeticsData.get().areTreasureChestsEnabled()) {
94-
putItem(inventory, 5, new KeysButton(ultraCosmetics), player);
95-
putItem(inventory, 3, new OpenChestButton(ultraCosmetics), player);
53+
putCategory(inventory, 2, Category.PETS, player);
54+
putCategory(inventory, 3, Category.GADGETS, player);
55+
putCategory(inventory, 4, Category.EFFECTS, player);
56+
putCategory(inventory, 5, Category.MOUNTS, player);
57+
putCategory(inventory, 6, Category.MORPHS, player);
58+
putCategory(inventory, 11, Category.HATS, player);
59+
putCategory(inventory, 12, Category.SUITS_HELMET, player);
60+
putCategory(inventory, 13, Category.EMOTES, player);
61+
putCategory(inventory, 14, Category.PROJECTILE_EFFECTS, player);
62+
putCategory(inventory, 15, Category.DEATH_EFFECTS, player);
63+
64+
InvisibleButtonWrapper openChest = new InvisibleButtonWrapper(new OpenChestButton(ultraCosmetics));
65+
InvisibleButtonWrapper keys = new InvisibleButtonWrapper(new KeysButton(ultraCosmetics));
66+
for (int i = 30; i < 33; i++) {
67+
putItem(inventory, i, openChest, player);
68+
putItem(inventory, i + 9, keys, player);
9669
}
70+
putInvisibleItem(inventory, 43, new ClearCosmeticButton(), player);
71+
}
72+
73+
protected void putCategory(Inventory inventory, int slot, Category category, UltraPlayer player) {
74+
putInvisibleItem(inventory, slot, new OpenCosmeticMenuButton(getUltraCosmetics(), category), player);
75+
}
76+
77+
protected void putInvisibleItem(Inventory inventory, int slot, Button button, UltraPlayer player) {
78+
putItem(inventory, slot, new InvisibleButtonWrapper(button), player);
9779
}
9880

9981
@Override
@@ -103,7 +85,7 @@ protected Component getName() {
10385

10486
@Override
10587
protected int getSize() {
106-
return UltraCosmeticsData.get().areTreasureChestsEnabled() ? 54 : 45;
88+
return 54;
10789
}
10890

10991
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package me.datatags.ultracosmeticsguiaddon.menus;
2+
3+
import be.isach.ultracosmetics.UltraCosmetics;
4+
import be.isach.ultracosmetics.menu.Button;
5+
import be.isach.ultracosmetics.menu.MenuPurchase;
6+
import be.isach.ultracosmetics.menu.PurchaseData;
7+
import be.isach.ultracosmetics.menu.buttons.PurchaseCancelButton;
8+
import be.isach.ultracosmetics.menu.buttons.PurchaseConfirmButton;
9+
import be.isach.ultracosmetics.menu.buttons.PurchaseShowcaseButton;
10+
import be.isach.ultracosmetics.player.UltraPlayer;
11+
import be.isach.ultracosmetics.shaded.adventure.text.Component;
12+
import be.isach.ultracosmetics.shaded.adventure.text.format.NamedTextColor;
13+
import me.datatags.ultracosmeticsguiaddon.UltraCosmeticsGUIAddon;
14+
import me.datatags.ultracosmeticsguiaddon.buttons.InvisibleButtonWrapper;
15+
import org.bukkit.inventory.Inventory;
16+
import org.bukkit.inventory.ItemStack;
17+
18+
public class TexturedMenuPurchase extends MenuPurchase {
19+
public TexturedMenuPurchase(UltraCosmetics ultraCosmetics, Component name, PurchaseData purchaseData) {
20+
super(ultraCosmetics, Component.text(generateTitle(), NamedTextColor.WHITE), purchaseData);
21+
}
22+
23+
private static String generateTitle() {
24+
StringBuilder builder = new StringBuilder();
25+
for (int i = 0; i < 8; i++) {
26+
// Dice emoji
27+
builder.append("\uD83C\uDFB2");
28+
}
29+
// Coin emoji
30+
return builder.append("\uD83E\uDE99").toString();
31+
}
32+
33+
@Override
34+
protected void putItems(Inventory inventory, UltraPlayer ultraPlayer) {
35+
putItem(inventory, 4, new PurchaseShowcaseButton(purchaseData), ultraPlayer);
36+
PurchaseConfirmButton confirmButton = new PurchaseConfirmButton(purchaseData, ultraCosmetics.getEconomyHandler());
37+
PurchaseCancelButton cancelButton = new PurchaseCancelButton(purchaseData);
38+
InvisibleButtonWrapper confirmWrapped = new InvisibleButtonWrapper(confirmButton);
39+
InvisibleButtonWrapper cancelWrapped = new InvisibleButtonWrapper(cancelButton);
40+
for (int i = 21; i < 24; i++) {
41+
putItem(inventory, i, confirmWrapped, ultraPlayer);
42+
putItem(inventory, i + 18, cancelWrapped, ultraPlayer);
43+
}
44+
}
45+
}

src/main/resources/plugin.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
name: UltraCosmeticsGUIAddon
22
version: 1.0
3-
api-version: 1.13
3+
api-version: 1.14
44
authors:
55
- datatags
66
- dennishzg
77
main: me.datatags.ultracosmeticsguiaddon.UltraCosmeticsGUIAddon
8+
depend:
9+
- UltraCosmetics

0 commit comments

Comments
 (0)