322 lines
11 KiB
Java
Raw Normal View History

2012-07-17 15:50:34 -06:00
package me.Travja.HungerArena;
2012-07-18 07:14:50 +10:00
2012-08-29 17:58:39 -06:00
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
2012-07-18 07:14:50 +10:00
import java.util.ArrayList;
import java.util.HashSet;
2012-08-25 11:58:12 -06:00
import java.util.List;
2012-08-29 17:58:39 -06:00
import java.util.logging.Level;
2012-07-18 07:14:50 +10:00
import java.util.logging.Logger;
2012-10-08 17:55:42 -06:00
2012-07-18 07:14:50 +10:00
import net.milkbowl.vault.economy.Economy;
2012-10-08 17:55:42 -06:00
2012-10-22 21:05:25 -06:00
import org.bukkit.Bukkit;
2012-07-18 07:14:50 +10:00
import org.bukkit.ChatColor;
2012-10-08 17:55:42 -06:00
import org.bukkit.Location;
import org.bukkit.World;
2012-07-18 07:14:50 +10:00
import org.bukkit.command.CommandExecutor;
import org.bukkit.configuration.file.FileConfiguration;
2012-08-29 17:58:39 -06:00
import org.bukkit.configuration.file.YamlConfiguration;
2012-10-08 17:55:42 -06:00
import org.bukkit.entity.Player;
2012-07-18 07:14:50 +10:00
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
2012-10-22 21:05:25 -06:00
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
2012-07-18 07:14:50 +10:00
public class Main extends JavaPlugin{
static final Logger log = Logger.getLogger("Minecraft");
public ArrayList<String> Playing = new ArrayList<String>();
public ArrayList<String> Ready = new ArrayList<String>();
public ArrayList<String> Dead = new ArrayList<String>();
public ArrayList<String> Quit = new ArrayList<String>();
public ArrayList<String> Out = new ArrayList<String>();
public ArrayList<String> Watching = new ArrayList<String>();
public ArrayList<String> NeedConfirm = new ArrayList<String>();
2012-10-08 17:55:42 -06:00
public ArrayList<Location> location = new ArrayList<Location>();
public ArrayList<Player> Tele = new ArrayList<Player>();
2012-07-18 07:14:50 +10:00
public HashSet<String> Frozen = new HashSet<String>();
2012-08-25 11:58:12 -06:00
public List<String> worlds;
2012-07-18 07:14:50 +10:00
public Listener DeathListener = new DeathListener(this);
public Listener SpectatorListener = new SpectatorListener(this);
public Listener FreezeListener = new FreezeListener(this);
public Listener JoinAndQuitListener = new JoinAndQuitListener(this);
public Listener ChatListener = new ChatListener(this);
public Listener Chests = new Chests(this);
public Listener PvP = new PvP(this);
public Listener CommandBlock = new CommandBlock(this);
2012-07-17 15:50:34 -06:00
public Listener Damage = new DmgListener(this);
public Listener Teleport = new TeleportListener(this);
2012-07-18 07:14:50 +10:00
public Listener Signs = new Signs(this);
public Listener BlockStorage = new BlockStorage(this);
2012-07-17 15:50:34 -06:00
public Listener WinGames = new WinGamesListener(this);
2012-07-18 07:14:50 +10:00
public CommandExecutor HaCommands = new HaCommands(this);
public CommandExecutor SponsorCommands = new SponsorCommands(this);
public CommandExecutor SpawnsCommand = new SpawnsCommand(this);
public boolean canjoin;
public boolean exists;
2012-08-25 10:09:49 -06:00
public boolean restricted;
2012-08-29 17:58:39 -06:00
public boolean open = true;
2012-07-17 17:06:57 -06:00
public FileConfiguration config;
2012-08-29 17:58:39 -06:00
public FileConfiguration spawns = null;
public File spawnsFile = null;
2012-10-08 17:55:42 -06:00
public FileConfiguration data = null;
public File dataFile = null;
public File managementFile = null;
public FileConfiguration management = null;
2012-10-22 21:05:25 -06:00
public ArrayList<ItemStack> Reward = new ArrayList<ItemStack>();
public ArrayList<ItemStack> Cost = new ArrayList<ItemStack>();
public ArrayList<ItemStack> Fee = new ArrayList<ItemStack>();
2012-07-17 15:50:34 -06:00
public boolean vault = false;
2012-10-22 21:05:25 -06:00
public boolean eco = false;
2012-07-17 15:50:34 -06:00
public Economy econ = null;
2012-10-22 21:05:25 -06:00
int i = 0;
2012-07-18 07:14:50 +10:00
public void onEnable(){
2012-07-17 17:06:57 -06:00
config = this.getConfig();
2012-07-18 07:14:50 +10:00
config.options().copyDefaults(true);
this.saveDefaultConfig();
2012-10-08 17:55:42 -06:00
spawns = this.getSpawns();
2012-08-29 17:58:39 -06:00
spawns.options().copyDefaults(true);
this.saveSpawns();
2012-10-08 17:55:42 -06:00
data = this.getData();
data.options().copyDefaults(true);
this.saveData();
management = this.getManagement();
management.options().copyDefaults(true);
this.saveManagement();
2012-07-17 17:06:57 -06:00
log.info("[HungerArena] enabled v" + getDescription().getVersion());
2012-07-18 07:14:50 +10:00
getServer().getPluginManager().registerEvents(DeathListener, this);
getServer().getPluginManager().registerEvents(SpectatorListener, this);
getServer().getPluginManager().registerEvents(FreezeListener, this);
getServer().getPluginManager().registerEvents(JoinAndQuitListener, this);
getServer().getPluginManager().registerEvents(ChatListener, this);
getServer().getPluginManager().registerEvents(Chests, this);
getServer().getPluginManager().registerEvents(PvP, this);
getServer().getPluginManager().registerEvents(CommandBlock, this);
getServer().getPluginManager().registerEvents(Signs, this);
getServer().getPluginManager().registerEvents(BlockStorage, this);
2012-07-17 15:50:34 -06:00
getServer().getPluginManager().registerEvents(WinGames, this);
getServer().getPluginManager().registerEvents(Damage, this);
2012-07-18 07:14:50 +10:00
getCommand("Ha").setExecutor(HaCommands);
getCommand("Sponsor").setExecutor(SponsorCommands);
getCommand("Startpoint").setExecutor(SpawnsCommand);
2012-10-08 17:55:42 -06:00
for(String spawnlocations:spawns.getStringList("Spawns")){
String[] coords = spawnlocations.split(",");
if(coords[4].equalsIgnoreCase("true")){
double x = Double.parseDouble(coords[0]);
double y = Double.parseDouble(coords[1]);
double z = Double.parseDouble(coords[2]);
String world = coords[3];
World w = getServer().getWorld(world);
Location loc = new Location(w, x, y, z);
location.add(loc);
}
}
System.out.println("[HungerArena] Loaded " + location.size() + " tribute spawns!");
2012-07-17 15:50:34 -06:00
if (setupEconomy()) {
2012-10-22 21:05:25 -06:00
log.info("[HungerArena] Found Vault! Hooking in for economy!");
2012-07-17 15:50:34 -06:00
}
if (config.getDouble("config.version") != 1.3) {
config.set("config.version", 1.3);
2012-10-22 21:05:25 -06:00
config.set("rewardEco.enabled", false);
config.set("rewardEco.reward", 100);
2012-07-17 15:50:34 -06:00
}
2012-10-22 21:05:25 -06:00
if (config.getBoolean("rewardEco.enabled", true) || config.getBoolean("sponsorEco.enabled", true) || config.getBoolean("EntryFee.eco", true)) {
2012-07-17 15:50:34 -06:00
if (vault == true) {
2012-10-22 21:05:25 -06:00
log.info("Economy hook deployed.");
eco = true;
}else{
log.info("You want economy support... yet you either don't have Vault or don't have an economy plugin. Sorry, can't give you it.");
2012-07-17 15:50:34 -06:00
}
}
2012-10-22 21:05:25 -06:00
if (!eco) {
2012-07-17 15:50:34 -06:00
if (vault == true) {
log.info(ChatColor.GREEN + "We see that you have Vault on your server. To set economy support to true, enable it in the config.");
}
}
2012-10-22 21:05:25 -06:00
try{
for(String rewards: config.getStringList("Reward")){
String[] rinfo = rewards.split(",");
Reward.add(new ItemStack(Integer.parseInt(rinfo[0]), Integer.parseInt(rinfo[1])));
}
for(String scost: config.getStringList("Sponsor_Cost")){
String[] sinfo = scost.split(",");
Cost.add(new ItemStack(Integer.parseInt(sinfo[0]), Integer.parseInt(sinfo[1])));
}
if(config.getBoolean("EntryFee.enabled")){
for(String fee: config.getStringList("EntryFee.fee")){
String[] finfo = fee.split(",");
Fee.add(new ItemStack(Integer.parseInt(finfo[0]), Integer.parseInt(finfo[1])));
}
}
}catch(Exception e){
log.warning("Could not add a reward/sponsor/entry cost! One of the rewards/costs is not a number!");
}
2012-08-25 11:58:12 -06:00
worlds = config.getStringList("worlds");
if(worlds.isEmpty()){
2012-08-25 10:09:49 -06:00
restricted = false;
2012-08-25 11:58:12 -06:00
}else if(!worlds.isEmpty()){
2012-08-25 10:09:49 -06:00
restricted = true;
}
2012-07-18 07:14:50 +10:00
}
2012-07-17 15:50:34 -06:00
public void onDisable(){
log.info("[HungerArena] disabled v" + getDescription().getVersion());
}
public boolean setupEconomy() {
if (getServer().getPluginManager().getPlugin("Vault") == null) {
return false;
}
RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
if (rsp == null) {
return false;
}
econ = rsp.getProvider();
vault = true;
return econ != null;
}
2012-10-08 17:55:42 -06:00
public void reloadSpawns() {
if (spawnsFile == null) {
spawnsFile = new File(getDataFolder(), "spawns.yml");
}
spawns = YamlConfiguration.loadConfiguration(spawnsFile);
// Look for defaults in the jar
InputStream defConfigStream = this.getResource("spawns.yml");
if (defConfigStream != null) {
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
spawns.setDefaults(defConfig);
}
}
public FileConfiguration getSpawns() {
if (spawns == null) {
this.reloadSpawns();
}
return spawns;
}
public void saveSpawns() {
if (spawns == null || spawnsFile == null) {
return;
}
try {
getSpawns().save(spawnsFile);
} catch (IOException ex) {
this.getLogger().log(Level.SEVERE, "Could not save config to " + spawnsFile, ex);
}
}
public void reloadData() {
if (dataFile == null) {
dataFile = new File(getDataFolder(), "Data.yml");
}
data = YamlConfiguration.loadConfiguration(dataFile);
// Look for defaults in the jar
InputStream defConfigStream = this.getResource("Data.yml");
if (defConfigStream != null) {
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
data.setDefaults(defConfig);
}
}
public FileConfiguration getData() {
if (data == null) {
this.reloadData();
}
return data;
}
public void saveData() {
if (data == null || dataFile == null) {
return;
}
try {
getData().save(dataFile);
} catch (IOException ex) {
this.getLogger().log(Level.SEVERE, "Could not save config to " + dataFile, ex);
}
}
public void reloadManagement() {
if (managementFile == null) {
managementFile = new File(getDataFolder(), "commandAndBlockManagement.yml");
}
management = YamlConfiguration.loadConfiguration(managementFile);
// Look for defaults in the jar
InputStream defConfigStream = this.getResource("commandAndBlockManagement.yml");
if (defConfigStream != null) {
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
management.setDefaults(defConfig);
}
}
public FileConfiguration getManagement() {
if (management == null) {
this.reloadManagement();
}
return management;
}
public void saveManagement() {
if (management == null || managementFile == null) {
return;
}
try {
getManagement().save(managementFile);
} catch (IOException ex) {
this.getLogger().log(Level.SEVERE, "Could not save config to " + managementFile, ex);
}
}
2012-10-22 21:05:25 -06:00
public void winner(){
String[] Spawncoords = spawns.getString("Spawn_coords").split(",");
World spawnw = getServer().getWorld(Spawncoords[3]);
double spawnx = Double.parseDouble(Spawncoords[0]);
double spawny = Double.parseDouble(Spawncoords[1]);
double spawnz = Double.parseDouble(Spawncoords[2]);
Location Spawn = new Location(spawnw, spawnx, spawny, spawnz);
if(Playing.size()== 1 && canjoin== false){
//Announce winner
for(i = 0; i < Playing.size(); i++){
String winnername = Playing.get(i++);
Player winner = getServer().getPlayerExact(winnername);
String winnername2 = winner.getName();
getServer().broadcastMessage(ChatColor.GREEN + winnername2 + " is the victor of this Hunger Games!");
winner.getInventory().clear();
winner.getInventory().setBoots(null);
winner.getInventory().setChestplate(null);
winner.getInventory().setHelmet(null);
winner.getInventory().setLeggings(null);
for(PotionEffect pe: winner.getActivePotionEffects()){
PotionEffectType potion = pe.getType();
winner.removePotionEffect(potion);
}
Tele.add(winner);
winner.teleport(Spawn);
if(!config.getBoolean("rewardEco.enabled")){
for(ItemStack Rewards: Reward){
winner.getInventory().addItem(Rewards);
}
}else{
econ.depositPlayer(winner.getName(), config.getDouble("eco.reward"));
}
Playing.clear();
}
//Show spectators
for(String s1: Watching){
Player spectator = getServer().getPlayerExact(s1);
spectator.setAllowFlight(false);
spectator.teleport(Spawn);
for(Player online:getServer().getOnlinePlayers()){
online.showPlayer(spectator);
}
}
if(config.getString("Auto_Restart").equalsIgnoreCase("True")){
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
public void run(){
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "ha restart");
}
}, 220L);
}
}
}
2012-07-18 07:14:50 +10:00
}