package me.gtacraft;
import com.google.common.collect.Lists;
import me.gtacraft.api.GTAGunsAPI;
import me.gtacraft.config.ConfigFile;
import me.gtacraft.config.ConfigFolder;
import me.gtacraft.gun.Gun;
import me.gtacraft.gun.GunData;
import me.gtacraft.gun.GunFactory;
import me.gtacraft.listener.GunListener;
import me.gtacraft.listener.PlayerListener;
import me.gtacraft.player.GunHolder;
import me.gtacraft.util.ExplosionUtil;
import me.gtacraft.util.GunUtil;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import java.io.File;
import java.util.List;
/**
* Created by Connor on 4/27/14. Designed for the GTA-Guns project.
*/
public class GTAGuns extends JavaPlugin {
private static GTAGuns instance;
private ConfigFolder gunsFolder;
public void onEnable() {
instance = this;
saveDefaultConfig();
gunsFolder = new ConfigFolder(this, new File(getDataFolder(), File.separator+"guns"));
reloadGuns();
Bukkit.getPluginManager().registerEvents(new GunListener(), this);
PlayerListener l = new PlayerListener();
Bukkit.getPluginManager().registerEvents(l, this);
for (Player p : Bukkit.getOnlinePlayers()) {
l.onPlayerJoin(new PlayerJoinEvent(p, ""));
}
Bukkit.getScheduler().scheduleAsyncRepeatingTask(this, new PlayerUpdateTimer(), GunHolder.TICK_INTERVAL, GunHolder.TICK_INTERVAL);
}
private void initConfig() {
reloadConfig();
GUN_NAME_TEXT = getConfig().getString("gunItemDisplay").replace("{->}", "»")
.replace("{<-}", "«")
.replace("{*}", "▪")
.replace("{|>}", "▶")
.replace("{<|}", "◀");
RELOAD_TEXT = ChatColor.translateAlternateColorCodes('&', getConfig().getString("reloadingText")).replace("{->}", "»")
.replace("{<-}", "«")
.replace("{*}", "▪")
.replace("{|>}", "▶")
.replace("{<|}", "◀");
}
public void reloadGuns() {
initConfig();
gunsFolder = new ConfigFolder(this, new File(getDataFolder(), File.separator+"guns"));
for (ConfigFile f : gunsFolder.getConfigFiles()) {
GunFactory.blueprint(null, f.getFile(), "");
}
}
private class PlayerUpdateTimer extends BukkitRunnable {
public void run() {
boolean dirty = false;
for (GunHolder holder : GunHolder.getAllHolders().values()) {
if (holder.tick())
dirty = true;
}
GunHolder.cleanNull();
}
}
public static GTAGuns getInstnace() {
return instance;
}
public void onDisable() {
saveDefaultConfig();
for (Item i : ExplosionUtil.getDeniedItems()) {
i.remove();
}
}
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (!(sender.isOp())) {
sender.sendMessage(ChatColor.RED+"You do not have permission to use this command!");
return true;
}
if (args.length < 1) {
sender.sendMessage(ChatColor.RED+"Format: /"+label+" <give,reload> (player) (gun)");
return true;
}
if (args[0].equalsIgnoreCase("give")) {
if (args.length >= 2 && (args[1].equalsIgnoreCase("all") || args[1].equalsIgnoreCase("*"))) {
if (!(sender instanceof Player)) {
sender.sendMessage(ChatColor.RED+"You must be a player to use this command!");
return true;
}
Player player = (Player)sender;
GunHolder holder = GunHolder.getHolder(player);
if (holder.getCurrentWeapon() == null) {
player.sendMessage(ChatColor.RED+"Please hold the gun you wish to give to everyone!");
return true;
}
player.getInventory().remove(player.getItemInHand());
GunData give = holder.getCurrentWeapon();
for (Player online : Bukkit.getOnlinePlayers()) {
if (online.equals(player))
continue;
GTAGunsAPI.giveGun(online, give.getModel());
online.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lYou were given a &e"+give.getModel().getAttribute("name").getStringValue()+"&c&l!"));
}
player.sendMessage(ChatColor.GREEN+"You gave "+ChatColor.YELLOW+ (Bukkit.getOnlinePlayers().length-1)+ChatColor.GREEN+" people the gun in your hand!");
return true;
}
if (args.length < 3) {
sender.sendMessage(ChatColor.RED+"Format: /"+label+" give <player> <gun>");
return true;
}
Player find = Bukkit.getPlayer(args[1]);
if (find == null) {
sender.sendMessage(ChatColor.RED+"The given player must be online to use this command!");
return true;
}
Gun g = GunFactory.getGun(args[2].replace("_", " "));
if (g == null) {
sender.sendMessage(ChatColor.RED+"The given gun does not exist!");
return true;
}
ItemStack stack = GunUtil.getGunStack(g);
find.getInventory().addItem(stack);
find.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lYou were given a &e"+g.getAttribute("name").getStringValue()+"&c&l!"));
sender.sendMessage(ChatColor.GREEN+"Gun given to "+find.getName()+"!");
return true;
} else {
GunFactory.reload();
GunHolder.resetAll();
sender.sendMessage(ChatColor.GREEN+"Weapons reloaded!");
return true;
}
}
public static String GUN_NAME_TEXT;
public static String RELOAD_TEXT;
}