package nautilus.game.arcade.managers; import java.util.HashSet; import java.util.LinkedList; import java.util.Random; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTitle; import mineplex.core.reward.IReward; import mineplex.core.reward.RewardManager; import mineplex.core.reward.RewardRarity; import mineplex.core.reward.rewards.InventoryReward; import mineplex.core.treasure.animation.Animation; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.Game.GameState; import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.FireworkEffect; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemStack; public class GameLootManager implements Listener { private ArcadeManager Manager; private RewardManager _rewardManager; private HashSet _players = new HashSet(); private long _startTime = 0; public GameLootManager(ArcadeManager manager) { Manager = manager; Manager.GetPluginManager().registerEvents(this, Manager.GetPlugin()); _rewardManager = new RewardManager(Manager.GetDonation(), Manager.getInventoryManager(), false); //Chest _rewardManager.addReward(new InventoryReward(Manager.getInventoryManager(), "Treasure Chest", "Treasure Chest", 1, 1, new ItemStack(Material.CHEST), RewardRarity.COMMON, 3, false)); //Key _rewardManager.addReward(new InventoryReward(Manager.getInventoryManager(), "Treasure Key", "Treasure Key", 1, 1, new ItemStack(Material.DIAMOND), RewardRarity.UNCOMMON, 500, false)); } @EventHandler public void registerPlayers(GameStateChangeEvent event) { if (!Manager.IsRewardAchievements()) return; if (event.GetState() != GameState.Live) return; for (Player player : event.GetGame().GetPlayers(true)) _players.add(player); _startTime = System.currentTimeMillis(); } @EventHandler public void unregisterPlayer(PlayerQuitEvent event) { _players.remove(event.getPlayer()); } @EventHandler(priority = EventPriority.MONITOR) public void giveLoot(final GameStateChangeEvent event) { if (!Manager.IsRewardAchievements()) return; if (event.GetState() != GameState.Dead) return; UtilServer.getServer().getScheduler().scheduleSyncDelayedTask(Manager.GetPlugin(), new Runnable() { public void run() { for (Player player : _players) { giveReward(player); } } }, 240); //Delay after Achievements _players.clear(); } public void giveReward(Player player) { double chance = (System.currentTimeMillis() - _startTime)/3600000d; if (Math.random() > chance) return; IReward reward = _rewardManager.nextReward(player, null, false, false); String name = reward.giveReward(player); String outputName = reward.getRarity().getColor() + name; //Self Display UtilTitle.display(C.cDGreen + C.Bold + "Loot", "You found " + outputName, 20, 120, 20, player); Random _random = new Random(); //Announce if (reward.getRarity() != RewardRarity.COMMON) { Bukkit.broadcastMessage(F.main("Loot", F.name(player.getName()) + " found the " + reward.getRarity().getName() + " treasure " + outputName)); } //Effect if (reward.getRarity() == RewardRarity.UNCOMMON) { FireworkEffect effect = FireworkEffect.builder().withColor(Color.fromRGB(_random.nextInt(255), _random.nextInt(255), _random.nextInt(255))) .withFade(Color.fromRGB(_random.nextInt(255), _random.nextInt(255), _random.nextInt(255))) .with(FireworkEffect.Type.STAR) .build(); UtilFirework.playFirework(player.getEyeLocation(), effect); } else if (reward.getRarity() == RewardRarity.RARE) { FireworkEffect effect = FireworkEffect.builder().with(FireworkEffect.Type.BALL).withColor(Color.YELLOW).withFade(Color.WHITE).build(); UtilFirework.playFirework(player.getEyeLocation(), effect); } else if (reward.getRarity() == RewardRarity.LEGENDARY) { FireworkEffect effect = FireworkEffect.builder().with(FireworkEffect.Type.BALL_LARGE).withColor(Color.RED).withFade(Color.BLACK).build(); UtilFirework.playFirework(player.getEyeLocation(), effect); } } @EventHandler public void command(PlayerCommandPreprocessEvent event) { if (!event.getPlayer().isOp()) return; //TODO Remove if (event.getMessage().startsWith("/lootdebug")) { event.getPlayer().sendMessage(C.cGreen + C.Bold + "Loot Debug..."); giveReward(event.getPlayer()); event.setCancelled(true); } } }