diff --git a/src/main/java/com/hibiscusmc/hmccosmetics/gui/Menu.java b/src/main/java/com/hibiscusmc/hmccosmetics/gui/Menu.java index ab7d8e08..7af9ffa6 100644 --- a/src/main/java/com/hibiscusmc/hmccosmetics/gui/Menu.java +++ b/src/main/java/com/hibiscusmc/hmccosmetics/gui/Menu.java @@ -16,6 +16,7 @@ import org.bukkit.inventory.ItemStack; import org.spongepowered.configurate.ConfigurationNode; import org.spongepowered.configurate.serialize.SerializationException; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -68,7 +69,25 @@ public class Menu { Player player = user.getPlayer(); for (ConfigurationNode config : config.node("items").childrenMap().values()) { - int slotNumber = Integer.valueOf(config.key().toString()); + + List slotString = null; + try { + slotString = config.node("slots").getList(String.class); + } catch (SerializationException e) { + continue; + } + if (slotString == null) { + HMCCosmeticsPlugin.getInstance().getLogger().info("Unable to get valid slot for " + config.key().toString()); + continue; + } + + List slots = getSlots(slotString); + + + if (slots == null) { + HMCCosmeticsPlugin.getInstance().getLogger().info("Slot is null for " + config.key().toString()); + continue; + } ItemStack item; @@ -95,12 +114,38 @@ public class Menu { if (cosmetic == null) return; user.toggleCosmetic(cosmetic); user.updateCosmetic(cosmetic.getSlot()); - gui.updateItem(slotNumber, guiItem); + for (int i : slots) { + gui.updateItem(i, guiItem); + } } }); - HMCCosmeticsPlugin.getInstance().getLogger().info("Added " + slotNumber + " as " + guiItem + " in the menu"); - gui.setItem(slotNumber, guiItem); + HMCCosmeticsPlugin.getInstance().getLogger().info("Added " + slots + " as " + guiItem + " in the menu"); + gui.setItem(slots, guiItem); } return gui; } + + private List getSlots(List slotString) { + List slots = new ArrayList<>(); + + for (String a : slotString) { + if (a.contains("-")) { + String[] split = a.split("-"); + int min = Integer.valueOf(split[0]); + int max = Integer.valueOf(split[1]); + slots.addAll(getSlots(min, max)); + } else { + slots.add(Integer.valueOf(a)); + } + } + + return slots; + } + + private List getSlots(int small, int max) { + List slots = new ArrayList<>(); + + for (int i = small; i <= max; i++) slots.add(i); + return slots; + } } diff --git a/src/main/resources/menus/examplemenu.yml b/src/main/resources/menus/examplemenu.yml index 74559df4..94892b40 100644 --- a/src/main/resources/menus/examplemenu.yml +++ b/src/main/resources/menus/examplemenu.yml @@ -1,7 +1,9 @@ title: "" rows: 5 items: - 1: + niftyHat: + slots: + - 1 item: material: LEATHER_HORSE_ARMOR amount: 1