package vulcanprisons.shadowslayz3499.vulcancore.crystals; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; import vulcanprisons.shadowslayz3499.vulcancore.VulcanCore; import vulcanprisons.shadowslayz3499.vulcancore.rarity.DefaultRarity; import vulcanprisons.shadowslayz3499.vulcancore.utils.ItemMetadata; import vulcanprisons.shadowslayz3499.vulcancore.utils.ItemUtils; import vulcanprisons.shadowslayz3499.vulcancore.utils.Util; public class CrystalRightClick implements Listener { @EventHandler public void onCrystalClick(PlayerInteractEvent event) { if (event.getAction() != Action.RIGHT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_AIR) return; Player player = event.getPlayer(); ItemStack inHand = player.getItemInHand(); if (inHand == null || inHand.getType() == Material.AIR) return; if (!ItemMetadata.hasMetadata(inHand, "crystal")) return; String type = (String) ItemMetadata.getMetadata(inHand, "crystal"); Inventory inventory = getCrystalInventory(DefaultRarity.valueOf(type.toUpperCase())); player.openInventory(inventory); rollShard(DefaultRarity.valueOf(type.toUpperCase()), player, inventory); if (inHand.getAmount() == 1) { player.setItemInHand(null); return; } inHand.setAmount(inHand.getAmount() - 1); } private void rollShard(DefaultRarity type, Player player, Inventory inventory) { CrystalMaps.closedInventory.put(player.getUniqueId().toString(), false); new BukkitRunnable() { int update = 0; ItemStack reward; public void run() { if (!player.isOnline()) { this.cancel(); return; } if (CrystalMaps.closedInventory.containsKey(player.getUniqueId().toString()) && CrystalMaps.closedInventory.get(player.getUniqueId().toString()) == true) { CrystalMaps.closedInventory.remove(player.getUniqueId().toString()); this.cancel(); return; } update++; if (update <= 40) { update(inventory, type, player); reward = inventory.getItem(4); return; } if (update <= 80) { if (update % 4 != 0) return; update(inventory, type, player); reward = inventory.getItem(4); } if (update <= 160) { if (update % 8 != 0) return; update(inventory, type, player); reward = inventory.getItem(4); return; } if (update > 160) { CrystalMaps.reward.put(player.getUniqueId().toString(), reward); for (int i = 0; i < inventory.getSize(); i++) { if (i == 22) { inventory.setItem(i, reward); continue; } inventory.setItem(i, VulcanCore.getInstance().glassPaneItems.glassPaneItems.get(15)); } this.cancel(); return; } } }.runTaskTimer(VulcanCore.getInstance(), 0, 1); } private void updateGlassPanes(Inventory inv) { inv.setItem(18, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); inv.setItem(26, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); inv.setItem(27, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); inv.setItem(35, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); inv.setItem(36, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); inv.setItem(44, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); inv.setItem(46, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); inv.setItem(52, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); } private void updateCrystal(Inventory inv) { inv.setItem(16, inv.getItem(6)); inv.setItem(6, inv.getItem(5)); inv.setItem(5, inv.getItem(4)); inv.setItem(4, inv.getItem(3)); inv.setItem(3, inv.getItem(2)); inv.setItem(2, inv.getItem(10)); } private void update(Inventory inventory, DefaultRarity type, Player player) { updateGlassPanes(inventory); if (type == DefaultRarity.SIMPLE) inventory.setItem(10, CrystalRewards.getSimpleItem(CrystalRewards.getReward(type), player)); if (type == DefaultRarity.UNCOMMON) inventory.setItem(10, CrystalRewards.getUncommonItem(CrystalRewards.getReward(type), player)); if (type == DefaultRarity.ELITE) inventory.setItem(10, CrystalRewards.getEliteItem(CrystalRewards.getReward(type), player)); if (type == DefaultRarity.ULTIMATE) inventory.setItem(10, CrystalRewards.getUltimateItem(CrystalRewards.getReward(type), player)); if (type == DefaultRarity.LEGENDARY) inventory.setItem(10, CrystalRewards.getLegendaryItem(CrystalRewards.getReward(type), player)); if (type == DefaultRarity.GODLY) inventory.setItem(10, CrystalRewards.getGodlyItem(CrystalRewards.getReward(type), player)); updateCrystal(inventory); } private Inventory getCrystalInventory(DefaultRarity type) { String name = Util.translateMessage("&8&lSimple Loot Crystal"); if (type == DefaultRarity.UNCOMMON) name = Util.translateMessage("&a&lUncommon Loot Crystal"); if (type == DefaultRarity.ELITE) name = Util.translateMessage("&9&lElite Loot Crystal"); if (type == DefaultRarity.ULTIMATE) name = Util.translateMessage("&e&lUltimate Loot Crystal"); if (type == DefaultRarity.LEGENDARY) name = Util.translateMessage("&6&lLegendary Loot Crystal"); if (type == DefaultRarity.GODLY) name = Util.translateMessage("&c&lGodly Loot Crystal"); Inventory inv = Bukkit.createInventory(null, 54, name); for (int i = 0; i < inv.getSize(); i++) { inv.setItem(i, VulcanCore.getInstance().glassPaneItems.glassPaneItems.get(15)); } inv.setItem(13, ItemUtils.make(1, Material.COMPASS)); inv.setItem(18, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); inv.setItem(26, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); inv.setItem(27, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); inv.setItem(35, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); inv.setItem(36, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); inv.setItem(44, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); inv.setItem(46, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); inv.setItem(52, VulcanCore.getInstance().glassPaneItems.getRandomGlassPane()); return inv; } }