NullValkyrie

Minecraft 1.19 multipurpose plugin for spigot servers with a lot of features where most modern servers have.
git clone https://codeberg.org/night0721/NullValkyrie
Log | Files | Refs | README | LICENSE

InventoryListener.java (9599B)


      1 package me.night.nullvalkyrie.ui.inventory;
      2 
      3 import me.night.nullvalkyrie.NullValkyrie;
      4 import me.night.nullvalkyrie.database.UserDataManager;
      5 import me.night.nullvalkyrie.entities.items.Items;
      6 import me.night.nullvalkyrie.util.RandomCollection;
      7 import me.night.nullvalkyrie.util.Util;
      8 import org.bukkit.ChatColor;
      9 import org.bukkit.Material;
     10 import org.bukkit.entity.Player;
     11 import org.bukkit.event.EventHandler;
     12 import org.bukkit.event.Listener;
     13 import org.bukkit.event.inventory.InventoryClickEvent;
     14 import org.bukkit.inventory.ItemStack;
     15 import org.bukkit.inventory.meta.ItemMeta;
     16 import org.bukkit.scheduler.BukkitRunnable;
     17 
     18 import java.util.ArrayList;
     19 import java.util.Collections;
     20 import java.util.List;
     21 @SuppressWarnings("ConstantConditions")
     22 public class InventoryListener implements Listener {
     23     public static RandomCollection<String> randomCollection;
     24 
     25     public InventoryListener() {
     26         randomCollection = new RandomCollection<>();
     27         for (Items e : Items.values()) {
     28             randomCollection.add(e.getWeight(), e.getName());
     29         }
     30     }
     31 
     32     @EventHandler
     33     public void onClick(InventoryClickEvent e) {
     34         if (e.getCurrentItem() == null) return;
     35         if (e.getView().getTitle().equals(Menu.title)) {
     36             e.setCancelled(true);
     37             Player player = (Player) e.getWhoClicked();
     38             switch (e.getRawSlot()) {
     39                 case 0:
     40                     break;
     41                 case 20:
     42                     player.setHealth(0);
     43                     player.sendMessage(ChatColor.RED + "又做兵 抵死");
     44                     break;
     45                 case 22:
     46                     player.teleport(player.getWorld().getSpawnLocation());
     47                     break;
     48                 case 24:
     49                     player.closeInventory();
     50                     player.openInventory(Shop.GUI);
     51                     return;
     52                 default:
     53                     return;
     54             }
     55             player.closeInventory();
     56         }
     57         if (e.getView().getTitle().equals(Shop.title)) {
     58             e.setCancelled(true);
     59             Player player = (Player) e.getWhoClicked();
     60             if (e.getRawSlot() == 0) {
     61                 player.closeInventory();
     62             }
     63         }
     64         if (e.getView().getTitle().equals(LuckyDraw.title)) {
     65             e.setCancelled(true);
     66             Player player = (Player) e.getWhoClicked();
     67             if (e.getRawSlot() == 0) {
     68                 player.closeInventory();
     69             } else if (e.getRawSlot() == 22) {
     70                 if (randomCollection.getAll().size() == 0) {
     71                     player.closeInventory();
     72                     player.sendMessage(ChatColor.RED + "You already got all the rewards!");
     73                     return;
     74                 }
     75                 new UserDataManager().updateUserBank(player.getUniqueId().toString(), -100);
     76                 List<String> colors = List.of("WHITE", "ORANGE", "MAGENTA", "LIGHT_BLUE", "YELLOW", "LIME", "PINK", "GRAY", "LIGHT_GRAY", "CYAN", "PURPLE", "BLUE", "BROWN", "GREEN", "RED", "BLACK");
     77                 List<String> slot1 = new ArrayList<>(colors);
     78                 List<String> slot2 = new ArrayList<>(colors);
     79                 List<String> slot3 = new ArrayList<>(colors);
     80                 List<String> slot4 = new ArrayList<>(colors);
     81                 List<String> slot5 = new ArrayList<>(colors);
     82                 List<String> slot6 = new ArrayList<>(colors);
     83                 List<String> slot7 = new ArrayList<>(colors);
     84                 List<String> slot8 = new ArrayList<>(colors);
     85                 Collections.shuffle(slot1);
     86                 Collections.shuffle(slot2);
     87                 Collections.shuffle(slot3);
     88                 Collections.shuffle(slot4);
     89                 Collections.shuffle(slot5);
     90                 Collections.shuffle(slot6);
     91                 Collections.shuffle(slot7);
     92                 Collections.shuffle(slot8);
     93                 int[] slots = new int[]{11, 13, 15, 20, 24, 29, 31, 33};
     94                 new BukkitRunnable() {
     95                     int i = 0;
     96                     int ii = 0;
     97                     int time = 0;
     98 
     99                     @Override
    100                     public void run() {
    101                         if (colors.size() - 1 <= i) i = 0;
    102                         if (ii == 8) ii = 0;
    103                         if (time == 20) {
    104                             cancel();
    105                             return;
    106                         }
    107                         for (int slot : slots) {
    108                             if (slot == 11) {
    109                                 ItemStack item = new ItemStack(Material.valueOf(slot1.get(i) + "_STAINED_GLASS_PANE"), 1);
    110                                 LuckyDraw.GUI.setItem(slot, item);
    111                             }
    112                             if (slot == 13) {
    113                                 ItemStack item = new ItemStack(Material.valueOf(slot2.get(i) + "_STAINED_GLASS_PANE"), 1);
    114                                 LuckyDraw.GUI.setItem(slot, item);
    115                             }
    116                             if (slot == 15) {
    117                                 ItemStack item = new ItemStack(Material.valueOf(slot3.get(i) + "_STAINED_GLASS_PANE"), 1);
    118                                 LuckyDraw.GUI.setItem(slot, item);
    119                             }
    120                             if (slot == 20) {
    121                                 ItemStack item = new ItemStack(Material.valueOf(slot4.get(i) + "_STAINED_GLASS_PANE"), 1);
    122                                 LuckyDraw.GUI.setItem(slot, item);
    123                             }
    124                             if (slot == 24) {
    125                                 ItemStack item = new ItemStack(Material.valueOf(slot5.get(i) + "_STAINED_GLASS_PANE"), 1);
    126                                 LuckyDraw.GUI.setItem(slot, item);
    127                             }
    128                             if (slot == 29) {
    129                                 ItemStack item = new ItemStack(Material.valueOf(slot6.get(i) + "_STAINED_GLASS_PANE"), 1);
    130                                 LuckyDraw.GUI.setItem(slot, item);
    131                             }
    132                             if (slot == 31) {
    133                                 ItemStack item = new ItemStack(Material.valueOf(slot7.get(i) + "_STAINED_GLASS_PANE"), 1);
    134                                 LuckyDraw.GUI.setItem(slot, item);
    135                             }
    136                             if (slot == 33) {
    137                                 ItemStack item = new ItemStack(Material.valueOf(slot8.get(i) + "_STAINED_GLASS_PANE"), 1);
    138                                 LuckyDraw.GUI.setItem(slot, item);
    139                             }
    140                         }
    141                         i++;
    142                         ii++;
    143                         time++;
    144                     }
    145                 }.runTaskTimer(NullValkyrie.getPlugin(NullValkyrie.class), 1L, 5L);
    146                 new BukkitRunnable() {
    147                     @Override
    148                     public void run() {
    149                         for (int slot : slots) {
    150                             LuckyDraw.GUI.setItem(slot, new ItemStack(Material.AIR));
    151                         }
    152                         String s = randomCollection.getRandom();
    153                         if (s != null) {
    154                             randomCollection.remove(s);
    155                             int slot = 0;
    156                             for (Items e : Items.values())
    157                                 if (e.getName().equals(s))
    158                                     slot = e.getSlot();
    159                             LuckyDraw.GUI.remove(Items.getByName(s).getMaterial());
    160                             ItemStack got = new ItemStack(Material.BLACK_STAINED_GLASS_PANE);
    161                             ItemMeta gotmeta = got.getItemMeta();
    162                             gotmeta.setDisplayName(ChatColor.RED + "You already got this reward!");
    163                             got.setItemMeta(gotmeta);
    164                             LuckyDraw.GUI.setItem(slot, got);
    165                             for (String s1 : randomCollection.getAll()) {
    166                                 ItemStack item = new ItemStack(Items.getByName(s1).getMaterial());
    167                                 ItemMeta meta = item.getItemMeta();
    168                                 meta.setDisplayName(ChatColor.GREEN + Items.getByName(s1).getName());
    169                                 List<String> lore = meta.getLore() == null ? new ArrayList<>() : meta.getLore();
    170                                 lore.add(0, "");
    171                                 lore.add(1, Util.color("&bChance: " + randomCollection.getChance(s1) + "%"));
    172                                 lore.add(2, Items.getByName(s1).getRarity().getDisplay());
    173                                 meta.setLore(lore);
    174                                 item.setItemMeta(meta);
    175                                 LuckyDraw.GUI.setItem(Items.getByName(s1).getSlot(), item);
    176                             }
    177                             Items it = Items.getByName(s);
    178                             ItemStack item = new ItemStack(it.getMaterial(), 1);
    179                             ItemMeta meta = item.getItemMeta();
    180                             if (meta == null) return;
    181                             meta.setDisplayName(ChatColor.GOLD + it.getName());
    182                             meta.setLore(List.of(it.getRarity().getDisplay()));
    183                             item.setItemMeta(meta);
    184                             player.getInventory().addItem(item);
    185                         } else player.closeInventory();
    186                     }
    187                 }.runTaskLater(NullValkyrie.getPlugin(NullValkyrie.class), 5L * 20L);
    188 
    189             }
    190         }
    191     }
    192 }