package com.isitgeo.randomgift; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; import static com.isitgeo.randomgift.Enchantments.getEnchantment; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; public class GiftGenerator { private RandomGift plugin; private Debugger debug; private ItemStack giftItem; private List<String> playerList = new ArrayList<String>(); public GiftGenerator(RandomGift plugin, Debugger debug) { this.plugin = plugin; this.debug = debug; } public void check(Player player) { if (System.currentTimeMillis() - plugin.cooldown >= plugin.cooldownTime) { debug.log("Cooldown timer ready"); if (player.hasPermission("randomgift.trigger")) { debug.log("Checking " + player.getName() + " has trigger permission"); getPlayers(player.getName(), false, true); plugin.cooldown = System.currentTimeMillis(); } else { debug.log(player.getName() + " does not have trigger permission"); } } else { debug.log("Cooldown timer not ready"); } } public void getPlayers(String triggerPlayer, Boolean ignoreMinPlayers, Boolean displayFrom) { playerList.clear(); Player[] allPlayersList = plugin.getServer().getOnlinePlayers(); for (Player onlinePlayer : plugin.getServer().getOnlinePlayers()){ if (onlinePlayer.hasPermission("randomgift.receive")){ debug.log(onlinePlayer.getName() + " has randomgift.receive, added to list"); playerList.add(onlinePlayer.getName()); } } if (!ignoreMinPlayers) { if (plugin.allPlayers && allPlayersList.length < plugin.minimumPlayers) { debug.log("Not enough players currently online"); resetCooldownTimer(); return; } else { if (playerList.size() < plugin.minimumPlayers) { debug.log("Not enough players currently online"); resetCooldownTimer(); return; } } } if (allPlayersList.length < 1 || playerList.size() < 1) { if (triggerPlayer != "Console") { plugin.getServer().getPlayer(triggerPlayer).sendMessage(plugin.playerBroadcastTag + "No eligible online players!"); } else { plugin.getLogger().info("No eligible online players!"); } resetCooldownTimer(); return; } Random playerSelector = new Random(); int playerRandom = playerSelector.nextInt(playerList.size()); Player randomPlayer = plugin.getServer().getPlayer(playerList.get(playerRandom)); debug.log(randomPlayer.getName() + " has been selected for a gift"); generateGift(randomPlayer, triggerPlayer, displayFrom); } @SuppressWarnings("deprecation") public void generateGift(Player randomPlayer, String triggerPlayer, Boolean displayFrom) { Random giftSelection = new Random(); int randomSelection = giftSelection.nextInt(plugin.itemList.length); String[] giftArguments = plugin.itemList[randomSelection].split(" "); int giftQuantity = Integer.parseInt(giftArguments[1]); String[] giftDataValue; if (giftArguments.length > 1){ for (int i = 0; giftArguments.length > i; i++) { int giftItemID; if (i == 0){ if (!(giftArguments[0].contains(":"))) { giftItemID = Integer.parseInt(giftArguments[0]); giftItem = new ItemStack(Material.getMaterial(giftItemID), giftQuantity); } else { giftDataValue = giftArguments[0].split(":"); giftItemID = Integer.parseInt(giftDataValue[0]); giftItem = new ItemStack(Material.getMaterial(giftItemID), giftQuantity, (short) Integer.parseInt(giftDataValue[1])); } } if (i > 1) { String[] enchantmentArgs = giftArguments[i].split(":"); if (enchantmentArgs.length < 2) { plugin.getLogger().warning("Item \"" + plugin.itemList[randomSelection] + "\" is improperly defined, no gift given."); return; } String enchantmentName = enchantmentArgs[0]; enchantmentName = enchantmentName.toUpperCase(); switch (enchantmentName) { case "NAME": { String enchantmentNameName = enchantmentArgs[1].replace("_", " "); ItemMeta itemMeta = giftItem.getItemMeta(); itemMeta.setDisplayName(enchantmentNameName); giftItem.setItemMeta(itemMeta); break; } case "LORE": { String[] enchantmentLoreName = enchantmentArgs[1].replace("_", " ").split("\\|"); ItemMeta itemMeta = giftItem.getItemMeta(); itemMeta.setLore(Arrays.asList(enchantmentLoreName)); giftItem.setItemMeta(itemMeta); break; } default: { int enchantPower = Integer.parseInt(enchantmentArgs[1]); Enchantment enchantment = getEnchantment(enchantmentName); if (enchantment == null){ plugin.getLogger().warning("Enchantment \"" + enchantmentName + "\" is not valid, no gift given."); resetCooldownTimer(); return; } ItemMeta itemMeta = giftItem.getItemMeta(); itemMeta.addEnchant(enchantment, enchantPower, true); giftItem.setItemMeta(itemMeta); break; } } } } if (plugin.enableBroadcastMessage) { plugin.getServer().broadcastMessage(plugin.broadcastTag + plugin.broadcastMessage.replace("%p", randomPlayer.getName())); } if (triggerPlayer != randomPlayer.getName() && displayFrom) { randomPlayer.sendMessage(plugin.playerBroadcastTag + "Be sure to thank " + triggerPlayer + " for your RandomGift!"); } if (randomPlayer.getInventory().firstEmpty() == -1) { Location playerLocation = randomPlayer.getLocation(); playerLocation.getWorld().dropItem(playerLocation, giftItem); randomPlayer.sendMessage(plugin.playerBroadcastTag + "Your RandomGift has been dropped near you because your inventory is full."); } else { randomPlayer.getInventory().addItem(giftItem); } plugin.historicPlayer = randomPlayer.getName(); } else { plugin.getLogger().warning("Invalid item - Please check your configuration."); resetCooldownTimer(); return; } } private void resetCooldownTimer() { // If gift fails to be delivered, this method is called plugin.cooldown = System.currentTimeMillis() - plugin.cooldownTime; } }