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 }