| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- package me.lethunderhawk.minion.ui;
- import me.lethunderhawk.fluxapi.FluxService;
- import me.lethunderhawk.fluxapi.util.gui.InventoryGUI;
- import me.lethunderhawk.fluxapi.util.gui.InventoryManager;
- import me.lethunderhawk.main.Main;
- import me.lethunderhawk.fluxapi.util.UnItalic;
- import me.lethunderhawk.minion.api.MinionLevelData;
- import me.lethunderhawk.minion.manager.MinionManager;
- import me.lethunderhawk.minion.registry.MinionRegistry;
- import me.lethunderhawk.minion.runtime.PlacedMinion;
- import net.kyori.adventure.text.Component;
- import net.kyori.adventure.text.format.NamedTextColor;
- import org.bukkit.Material;
- import org.bukkit.entity.Player;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.meta.ItemMeta;
- import org.bukkit.plugin.java.JavaPlugin;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.UUID;
- public class MinionMenu extends InventoryGUI implements InventoryGUI.AutoCloseHandler {
- private final PlacedMinion minion;
- public MinionMenu(PlacedMinion minion) {
- super(minion.getType().getName() + " " + minion.getRomanLevel(), 54);
- this.minion = minion;
- buildContents();
- }
- private void buildContents() {
- fillGlassPaneBackground();
- ItemStack minionItem = minion.getHelmetItem().clone();
- ItemMeta minionMeta = minionItem.getItemMeta();
- minionMeta.displayName(UnItalic.text(minion.getType().getName() + " " + minion.getRomanLevel()).color(NamedTextColor.BLUE));
- List<Component> minionLore = minion.getHelmetItem().lore();
- minionMeta.lore(minionLore);
- minionItem.setItemMeta(minionMeta);
- setItem(4, minionItem);
- // Next tier info
- ItemStack nextTier = buildNextTierItem();
- setItemWithClickAction(5, nextTier, (p, type) -> {
- p.sendMessage("not implemented yet");
- });
- // Collect resources button
- ItemStack collectItem = buildCollectResourcesItem();
- setItemWithClickAction(48, collectItem, (p, type) -> {
- minion.pickupAllItems();
- });
- // Quick upgrade button
- ItemStack upgradeItem = buildQuickUpgradeItem();
- setItemWithClickAction(50, upgradeItem, (p, type) -> {
- JavaPlugin plugin = FluxService.get(Main.class);
- PlacedMinion newMinion = minion.getUpgrade(plugin);
- if(newMinion != null) {
- MinionManager.stopAndUnregister(minion);
- MinionManager.startAndRegister(newMinion, plugin);
- InventoryManager.openFor(p, new MinionMenu(newMinion));
- }else{
- p.sendMessage("§cAlready at max tier.");
- }
- });
- // Fuel slot
- ItemStack fuelItem = buildFuelSlot();
- setItem(19, fuelItem);
- ItemStack settingsItem = buildSettingsItem();
- setItemWithClickAction(3, settingsItem, (p, type) -> {
- new MinionSettingsMenu(minion).open(p);
- });
- ItemStack pickupMinionItem = buildPickupMinionItem();
- setItemWithClickAction(53, pickupMinionItem, (p, type) -> {
- InventoryManager.close(p.getUniqueId());
- p.getInventory().addItem(minion.getHelmetItem());
- minion.pickupAllItems();
- MinionManager.stopAndUnregister(minion);
- p.sendMessage(Component.text("Removed Minion!", NamedTextColor.RED));
- });
- // Display collected resources in border slots
- int[] displaySlots = {21, 22, 23, 24, 25,
- 30, 31, 32, 33, 34,
- 39, 40, 41, 42, 43};
- ItemStack[] resources = minion.getCollectedResources();
- ItemStack lockedStorage = buildLockedSlot();
- for (int i = 0; i < displaySlots.length; i++) {
- if (resources == null || i >= resources.length) {
- setItem(displaySlots[i], lockedStorage);
- } else {
- int finalI = i;
- setItemWithClickAction(displaySlots[i], resources[i], (p, type) -> {
- minion.pickupItem(finalI);
- updateDisplay(p);
- });
- }
- }
- }
- private ItemStack buildLockedSlot() {
- ItemStack lockedStorage = new ItemStack(Material.WHITE_STAINED_GLASS_PANE);
- ItemMeta lockedStorageMeta = lockedStorage.getItemMeta();
- lockedStorageMeta.displayName(Component.text("Locked Storage", NamedTextColor.RED));
- lockedStorage.setItemMeta(UnItalic.removeItalicFromMeta(lockedStorageMeta));
- return lockedStorage;
- }
- private ItemStack buildSettingsItem() {
- ItemStack settingsItem = new ItemStack(Material.REDSTONE_TORCH);
- ItemMeta settingsMeta = settingsItem.getItemMeta();
- settingsMeta.displayName(Component.text("§aMinion Settings"));
- List<Component> settingsLore = new ArrayList<>();
- settingsLore.add(Component.text("§7Configure how this"));
- settingsLore.add(Component.text("§7minion behaves!"));
- settingsMeta.lore(settingsLore);
- settingsItem.setItemMeta(settingsMeta);
- return settingsItem;
- }
- private ItemStack buildFuelSlot() {
- ItemStack fuelItem = new ItemStack(Material.ORANGE_STAINED_GLASS_PANE);
- ItemMeta fuelMeta = fuelItem.getItemMeta();
- fuelMeta.displayName(Component.text("§aFuel"));
- List<Component> fuelLore = new ArrayList<>();
- fuelLore.add(Component.text("§7Increase the speed of your"));
- fuelLore.add(Component.text("§7minion by adding minion fuel"));
- fuelLore.add(Component.text("§7items here."));
- fuelLore.add(Component.text(""));
- fuelLore.add(Component.text("§cNote: §7You cant take fuel "));
- fuelLore.add(Component.text("§7back out after you place it "));
- fuelLore.add(Component.text("§7here!"));
- fuelLore.add(Component.text("§7Current Fuel: §eNone"));
- fuelMeta.lore(fuelLore);
- fuelItem.setItemMeta(fuelMeta);
- return fuelItem;
- }
- private ItemStack buildQuickUpgradeItem() {
- ItemStack upgradeItem = new ItemStack(Material.DIAMOND);
- ItemMeta upgradeMeta = upgradeItem.getItemMeta();
- upgradeMeta.displayName(Component.text("Quick-Upgrade your Minion", NamedTextColor.GREEN));
- List<Component> upgradeLore = new ArrayList<>();
- upgradeLore.add(Component.text("Click here to upgrade your", NamedTextColor.GRAY));
- upgradeLore.add(Component.text("minion to the next tier.", NamedTextColor.GRAY));
- upgradeLore.add(Component.text(""));
- MinionLevelData nextLevel = getNextLevelData();
- if(nextLevel == null || nextLevel.getTimeBetweenActions().equals(minion.getSpeedAsString())){
- upgradeLore.add(Component.text("Time Between Actions: ", NamedTextColor.GRAY).append(Component.text(minion.getSpeedAsString(), NamedTextColor.GREEN)));
- }else{
- upgradeLore.add(Component.text("Time Between Actions: ", NamedTextColor.GRAY)
- .append(Component.text(minion.getSpeedAsString() + " ➜ ", NamedTextColor.DARK_GRAY))
- .append(Component.text(nextLevel.getTimeBetweenActions(), NamedTextColor.GREEN)));
- }
- if(nextLevel == null || nextLevel.getMaxStorageItems() == minion.getMaxStorageItems()){
- upgradeLore.add(Component.text("Max Storage: ", NamedTextColor.GRAY)
- .append(Component.text( minion.getMaxStorageItems(), NamedTextColor.YELLOW)));
- }else{
- upgradeLore.add(Component.text("Max Storage: ", NamedTextColor.GRAY)
- .append(Component.text(minion.getMaxStorageItems() + " ➜ ", NamedTextColor.DARK_GRAY))
- .append(Component.text( nextLevel.getMaxStorageItems(), NamedTextColor.YELLOW)));
- }
- upgradeMeta.lore(upgradeLore);
- upgradeItem.setItemMeta(UnItalic.removeItalicFromMeta(upgradeMeta));
- return upgradeItem;
- }
- private ItemStack buildPickupMinionItem() {
- ItemStack pickupItem = new ItemStack(Material.BEDROCK);
- ItemMeta pickupMeta = pickupItem.getItemMeta();
- pickupMeta.displayName(Component.text("§cPickup Minion"));
- List<Component> pickupLore = new ArrayList<>();
- pickupLore.add(Component.text("§7Click to pickup this"));
- pickupLore.add(Component.text("§7minion and all its"));
- pickupLore.add(Component.text("§7upgrades!"));
- pickupLore.add(Component.text(""));
- pickupLore.add(Component.text("§cWarning: This will"));
- pickupLore.add(Component.text("§cstop the minion!"));
- pickupMeta.lore(pickupLore);
- pickupItem.setItemMeta(pickupMeta);
- return pickupItem;
- }
- private ItemStack buildCollectResourcesItem() {
- ItemStack collectItem = new ItemStack(Material.CHEST);
- ItemMeta collectMeta = collectItem.getItemMeta();
- collectMeta.displayName(Component.text("§aCollect All"));
- List<Component> collectLore = new ArrayList<>();
- collectLore.add(Component.text("Click to collect all", NamedTextColor.GRAY));
- collectLore.add(Component.text("resources from this", NamedTextColor.GRAY));
- collectLore.add(Component.text("minion!", NamedTextColor.GRAY));
- collectMeta.lore(collectLore);
- collectItem.setItemMeta(UnItalic.removeItalicFromMeta(collectMeta));
- return collectItem;
- }
- private ItemStack buildNextTierItem(){
- ItemStack nextTier = new ItemStack(Material.GOLD_INGOT);
- ItemMeta nextTierItemMeta = nextTier.getItemMeta();
- nextTierItemMeta.displayName(Component.text("Next tier info", NamedTextColor.GREEN));
- List<Component> nextTierLore = new ArrayList<>();
- nextTierLore.add(Component.text("View the items required to", NamedTextColor.GRAY));
- nextTierLore.add(Component.text("upgrade this minion to the next", NamedTextColor.GRAY));
- nextTierLore.add(Component.text("tier.", NamedTextColor.GRAY));
- nextTierLore.add(Component.text(""));
- MinionLevelData nextLevel = getNextLevelData();
- if(nextLevel == null || nextLevel.getTimeBetweenActions().equals(minion.getSpeedAsString())){
- nextTierLore.add(Component.text("Time Between Actions: ", NamedTextColor.GRAY).append(Component.text(minion.getSpeedAsString(), NamedTextColor.GREEN)));
- }else{
- nextTierLore.add(Component.text("Time Between Actions: ", NamedTextColor.GRAY)
- .append(Component.text(minion.getSpeedAsString() + " ➜ ", NamedTextColor.DARK_GRAY))
- .append(Component.text(nextLevel.getTimeBetweenActions(), NamedTextColor.GREEN)));
- }
- if(nextLevel == null || nextLevel.getMaxStorageItems() == minion.getMaxStorageItems()){
- nextTierLore.add(Component.text("Max Storage: ", NamedTextColor.GRAY)
- .append(Component.text( minion.getMaxStorageItems(), NamedTextColor.YELLOW)));
- }else{
- nextTierLore.add(Component.text("Max Storage: ", NamedTextColor.GRAY)
- .append(Component.text(minion.getMaxStorageItems() + " ➜ ", NamedTextColor.DARK_GRAY))
- .append(Component.text( nextLevel.getMaxStorageItems(), NamedTextColor.YELLOW)));
- }
- nextTierItemMeta.lore(nextTierLore);
- nextTier.setItemMeta(UnItalic.removeItalicFromMeta(nextTierItemMeta));
- return nextTier;
- }
- private MinionLevelData getNextLevelData(){
- return MinionRegistry.get(minion.getType().getId()).getLevelTable().get(minion.getLevel() + 1);
- }
- private void updateDisplay(Player player) {
- buildContents();
- player.updateInventory();
- }
- @Override
- public void onClosedByPlayer(Player player) {
- // Save minion data when menu is closed
- //minion.saveData();
- }
- @Override
- public void update() {
- buildContents();
- }
- public UUID getMinionId() {
- return minion.getMinionId();
- }
- // Helper class for storage menu
- private static class MinionStorageMenu extends InventoryGUI {
- private final PlacedMinion minion;
- public MinionStorageMenu(PlacedMinion minion) {
- super(minion.getType().getName() + " Storage", 54);
- this.minion = minion;
- buildContents();
- }
- private void buildContents() {
- fillBackground(Material.GRAY_STAINED_GLASS_PANE, " ");
- // List<ItemStack> storage = minion.getStorageContents();
- // for (int i = 0; i < Math.min(storage.size(), 36); i++) {
- // setItem(i, storage.get(i));
- // }
- // Back button
- ItemStack backItem = new ItemStack(Material.ARROW);
- ItemMeta backMeta = backItem.getItemMeta();
- backMeta.displayName(Component.text("Go Back", NamedTextColor.RED));
- backItem.setItemMeta(backMeta);
- setItemWithClickAction(49, backItem, (p, type) -> {
- new MinionMenu(minion).open(p);
- });
- }
- @Override
- public void update() {
- }
- }
- // Helper class for settings menu
- private static class MinionSettingsMenu extends InventoryGUI {
- private final PlacedMinion minion;
- public MinionSettingsMenu(PlacedMinion minion) {
- super(minion.getType().getName() + " Settings", 27);
- this.minion = minion;
- buildContents();
- }
- private void buildContents() {
- fillBackground(Material.GRAY_STAINED_GLASS_PANE, " ");
- // Back button
- ItemStack backItem = new ItemStack(Material.ARROW);
- ItemMeta backMeta = backItem.getItemMeta();
- backMeta.displayName(Component.text("Go Back", NamedTextColor.RED));
- backItem.setItemMeta(backMeta);
- setItemWithClickAction(22, backItem, (p, type) -> {
- new MinionMenu(minion).open(p);
- });
- }
- @Override
- public void update() {
- }
- }
- }
|