2016-08-20 21:35:22 +02:00
|
|
|
package com.Geekpower14.Quake.Arena;
|
|
|
|
|
|
|
|
import com.Geekpower14.Quake.Quake;
|
2019-10-12 16:03:55 +02:00
|
|
|
import com.Geekpower14.Quake.Utils.FireworkEffectPlayer;
|
2016-08-20 21:35:22 +02:00
|
|
|
import java.io.File;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Random;
|
|
|
|
import java.util.logging.Level;
|
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
import org.bukkit.ChatColor;
|
|
|
|
import org.bukkit.Color;
|
|
|
|
import org.bukkit.FireworkEffect;
|
|
|
|
import org.bukkit.Location;
|
|
|
|
import org.bukkit.configuration.file.FileConfiguration;
|
|
|
|
import org.bukkit.configuration.file.YamlConfiguration;
|
|
|
|
import org.bukkit.entity.EntityType;
|
|
|
|
import org.bukkit.entity.Firework;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.inventory.meta.FireworkMeta;
|
|
|
|
import org.bukkit.plugin.Plugin;
|
|
|
|
import org.bukkit.potion.PotionEffect;
|
|
|
|
import org.bukkit.scoreboard.DisplaySlot;
|
|
|
|
|
|
|
|
public class SArena extends Arena {
|
|
|
|
public SArena(Quake pl, String n, int ID) {
|
|
|
|
super(pl, n, ID);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Boolean reloadConfig() {
|
|
|
|
if (_etat != _pregame) {
|
|
|
|
stop();
|
|
|
|
}
|
|
|
|
testConfig();
|
|
|
|
loadConfig();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Boolean loadConfig() {
|
|
|
|
File fichier_config = new File(_plugin.getDataFolder(), "/arenas/" + _name + ".yml");
|
|
|
|
YamlConfiguration config = YamlConfiguration.loadConfiguration((File)fichier_config);
|
|
|
|
if (config.contains("Nombre")) {
|
|
|
|
int nombre = config.getInt("Nombre");
|
|
|
|
for (int i = 0; i < nombre; i++) {
|
|
|
|
String nom = config.getString("spawn" + i);
|
|
|
|
_spawns.add(i, str2loc(nom));
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
List<Location> s = new ArrayList();
|
|
|
|
for(String spawn : config.getStringList("Spawns")) {
|
|
|
|
s.add(str2loc(spawn));
|
|
|
|
}
|
|
|
|
_spawns = s;
|
|
|
|
}
|
|
|
|
_map = config.getString("Map");
|
|
|
|
_maxplayer = config.getInt("MaxPlayers");
|
|
|
|
_minplayer = config.getInt("MinPlayers");
|
|
|
|
_Active = config.getBoolean("Active");
|
|
|
|
_NaturalDeath = config.getBoolean("Natural-Death");
|
|
|
|
_Auto_Respawn = config.getBoolean("Auto-Respawn");
|
|
|
|
_VIP = config.getBoolean("VIP");
|
|
|
|
_goal = config.getInt("Goal");
|
|
|
|
_starting = config.getInt("Time-Before");
|
|
|
|
_after = config.getLong("Time-After");
|
|
|
|
_Coins_Win = config.getInt("Coins-per-Win");
|
|
|
|
_Coins_Kill = config.getInt("Coins-per-Kill");
|
|
|
|
_VIP_M = config.getDouble("VIP-Multiplicator");
|
|
|
|
_VIPP_M = config.getDouble("VIP+-Multiplicator");
|
|
|
|
_Global_Chat = config.getBoolean("Global-Chat");
|
|
|
|
_Sneak = config.getBoolean("Sneak");
|
|
|
|
ArrayList<PotionEffect> l = new ArrayList<>();
|
|
|
|
for (String popo : config.getStringList("Potions"))
|
|
|
|
l.add(StrToPo(popo));
|
|
|
|
_potions = l;
|
|
|
|
if(config.contains("Nombre"))
|
|
|
|
saveConfig();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Boolean testConfig() {
|
|
|
|
YamlConfiguration config = YamlConfiguration.loadConfiguration((File)new File(_plugin.getDataFolder(), "/arenas/" + _name + ".yml"));
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Version", Quake._version);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Name", _name);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Type", "Solo");
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Map", "Unknown");
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Active", true);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Natural-Death", false);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Auto-Respawn", false);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "VIP", false);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Goal", 25);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Time-Before", 30);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Time-After", 15);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Coins-per-Win", 20);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Coins-per-Kill", 1);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "VIP-Multiplicator", 2);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "VIP+-Multiplicator", 3);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Global-Chat", false);
|
|
|
|
ArrayList<String> l = new ArrayList<>();
|
|
|
|
l.add("SPEED:2");
|
|
|
|
l.add("JUMP:1");
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Potions", l);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "MaxPlayers", 11);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "MinPlayers", 2);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Sneak", true);
|
|
|
|
setDefaultConfig((FileConfiguration)config, "Spawns", new ArrayList());
|
|
|
|
try {
|
|
|
|
config.save(new File(_plugin.getDataFolder(), "/arenas/" + _name + ".yml"));
|
|
|
|
} catch (IOException e) {
|
|
|
|
_plugin.getLogger().warning("save default de " + _name + " impossible !");
|
|
|
|
disable();
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Boolean saveConfig() {
|
|
|
|
YamlConfiguration config = YamlConfiguration.loadConfiguration((File)new File(_plugin.getDataFolder(), "/arenas/" + _name + ".yml"));
|
|
|
|
config.set("Name", _name);
|
|
|
|
config.set("Type", "Solo");
|
|
|
|
config.set("Map", _map);
|
|
|
|
config.set("Active", _Active);
|
|
|
|
config.set("VIP", _VIP);
|
|
|
|
config.set("Global-Chat", _Global_Chat);
|
|
|
|
config.set("Natural-Death", _NaturalDeath);
|
|
|
|
config.set("Auto-Respawn", _Auto_Respawn);
|
|
|
|
config.set("Sneak", _Sneak);
|
|
|
|
ArrayList<String> l = new ArrayList<>();
|
|
|
|
for(PotionEffect popo : _potions)
|
|
|
|
l.add(PoToStr(popo));
|
|
|
|
|
|
|
|
config.set("Potions", l);
|
|
|
|
config.set("MaxPlayers", _maxplayer);
|
|
|
|
config.set("MinPlayers", _minplayer);
|
|
|
|
config.set("Sneak", _Sneak);
|
|
|
|
ArrayList<String> s = new ArrayList<>();
|
|
|
|
for(Location loc : _spawns)
|
|
|
|
s.add(loc2str(loc));
|
|
|
|
|
|
|
|
config.set("Spawns", s);
|
|
|
|
try {
|
|
|
|
config.save(new File(_plugin.getDataFolder(), "/arenas/" + _name + ".yml"));
|
|
|
|
_plugin.saveConfig();
|
|
|
|
} catch (IOException e) {
|
|
|
|
_plugin.getLogger().warning("save de " + _name + "impossible !");
|
|
|
|
disable();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void joinArena(Player player) {
|
|
|
|
if (_spawns.isEmpty()) {
|
|
|
|
player.sendMessage(_plugin._trad.get("Game.Arena.error.NoSpawn"));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (_etat > _pregame && !Quake.hasPermission(player, "Quake.JoinInGame")) {
|
|
|
|
player.sendMessage(_plugin._trad.get("Game.Arena.error.inGame"));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (_VIP && !Quake.hasPermission(player, "Quake.VIP")) {
|
|
|
|
player.sendMessage(_plugin._trad.get("Game.Arena.error.VIP"));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (_full && !Quake.hasPermission(player, "Quake.VIP")) {
|
|
|
|
player.sendMessage(_plugin._trad.get("Game.Arena.error.full"));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (_players.size() > _maxplayer - 1) {
|
|
|
|
_full = true;
|
|
|
|
}
|
|
|
|
APlayer ap = new APlayer(_plugin, this, player);
|
|
|
|
_players.put(player.getName(), ap);
|
|
|
|
broadcast(_plugin._trad.get("Game.Arena.Message.Join").replace("[PLAYER]", player.getName()).replace("[NUMBER]", "" + _players.size()).replace("[MAX]", "" + _maxplayer));
|
|
|
|
if (_players.size() >= _minplayer && _etat == _pregame) {
|
|
|
|
startDelayed();
|
|
|
|
}
|
|
|
|
if (_etat > _pregame && Quake.hasPermission(player, "Quake.JoinInGame")) {
|
|
|
|
tp(player);
|
|
|
|
cleaner(player);
|
|
|
|
updateScore();
|
|
|
|
ap.setInvincible(40L);
|
|
|
|
final Player p = player;
|
|
|
|
Bukkit.getScheduler().scheduleSyncDelayedTask(_plugin, new Runnable() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
giveStuff(p);
|
|
|
|
}
|
|
|
|
}, 20);
|
|
|
|
Bukkit.getScheduler().scheduleSyncDelayedTask((Plugin)_plugin, new Runnable() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
giveEffect(p);
|
|
|
|
giveEffect(p);
|
|
|
|
}
|
|
|
|
}, 35);
|
|
|
|
} else {
|
|
|
|
tp(player);
|
|
|
|
cleaner(player);
|
|
|
|
player.getInventory().setItem(8, getLeaveDoor());
|
|
|
|
player.getInventory().setHeldItemSlot(0);
|
|
|
|
try {
|
|
|
|
player.updateInventory();
|
|
|
|
}
|
|
|
|
catch (Exception p) {
|
|
|
|
// empty catch block
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void leaveArena(Player player) {
|
|
|
|
APlayer ap = getAPlayer(player);
|
|
|
|
SArena.quitcleaner(player);
|
|
|
|
player.setScoreboard(_scoremanager.getNewScoreboard());
|
|
|
|
if (_players.size() <= 2 && !_stopping && _etat == _ingame) {
|
|
|
|
stop();
|
|
|
|
}
|
|
|
|
if (_players.size() < _minplayer && !_stopping && _etat <= _starting) {
|
|
|
|
resetCountdown();
|
|
|
|
}
|
|
|
|
if (_plugin._lobby._lobbyspawn != null) {
|
|
|
|
player.teleport(_plugin._lobby._lobbyspawn);
|
|
|
|
} else {
|
|
|
|
Location wo = (Location)_spawns.get(0);
|
|
|
|
if (wo != null) {
|
|
|
|
player.teleport(wo.getWorld().getSpawnLocation());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ap.RestoreInventory();
|
|
|
|
_players.remove(player.getName());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void CrashLeaveArena(Player player) {
|
|
|
|
_players.remove(player.getName());
|
|
|
|
if (_players.size() <= 1 && !_stopping && _etat == _ingame) {
|
|
|
|
stop();
|
|
|
|
}
|
|
|
|
if (_players.size() < _minplayer && !_stopping && _etat <= _starting) {
|
|
|
|
resetCountdown();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void updateScore() {
|
|
|
|
if(_players.size() <= 0)
|
|
|
|
return;
|
|
|
|
|
|
|
|
for(APlayer player2 : _players.values())
|
|
|
|
_objective.getScore(player2.getName()).setScore(player2._score);
|
|
|
|
|
|
|
|
for(APlayer player2 : _players.values())
|
|
|
|
player2.getPlayer().setScoreboard(_objective.getScoreboard());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void stop() {
|
|
|
|
_stopping = true;
|
|
|
|
_plugin.getServer().getScheduler().cancelTask(_timer);
|
|
|
|
for(APlayer play : _players.values()) {
|
|
|
|
Player player = play.getPlayer();
|
|
|
|
SArena.quitcleaner(player);
|
|
|
|
player.setScoreboard(_scoremanager.getNewScoreboard());
|
|
|
|
if(_plugin._lobby._lobbyspawn != null)
|
|
|
|
player.teleport(_plugin._lobby._lobbyspawn);
|
|
|
|
play.RestoreInventory();
|
|
|
|
}
|
|
|
|
_stopping = false;
|
|
|
|
resetArena();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void start() {
|
|
|
|
_etat = _ingame;
|
|
|
|
if (_objective != null) {
|
|
|
|
_objective.unregister();
|
|
|
|
}
|
|
|
|
_objective = _board.registerNewObjective(_name, "dummy");
|
|
|
|
_objective.setDisplaySlot(DisplaySlot.SIDEBAR);
|
|
|
|
_objective.setDisplayName("Score");
|
|
|
|
for(APlayer play : _players.values()) {
|
|
|
|
Player player = play.getPlayer();
|
|
|
|
cleaner(player);
|
|
|
|
giveStuff(player);
|
|
|
|
tp(player);
|
|
|
|
updateScore();
|
|
|
|
giveEffect(player);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void addspawn(Location loc) {
|
|
|
|
_spawns.add(loc);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void removespawn(String args) {
|
|
|
|
_spawns.remove(Integer.parseInt(args));
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void win(final Player player) {
|
|
|
|
getGainWin(player);
|
|
|
|
_finished = true;
|
|
|
|
nbroadcast(ChatColor.GOLD + "#" + ChatColor.GRAY + "--------------------" + ChatColor.GOLD + "#");
|
|
|
|
nbroadcast("" + ChatColor.GRAY);
|
|
|
|
nbroadcast(_plugin._trad.get("Game.Arena.Message.Won").replace("[NAME]", player.getName()));
|
|
|
|
nbroadcast("" + ChatColor.GRAY);
|
|
|
|
nbroadcast(ChatColor.GOLD + "#" + ChatColor.GRAY + "--------------------" + ChatColor.GOLD + "#");
|
|
|
|
_plugin.getLogger().log(Level.INFO, _plugin._trad.get("Game.Arena.Message.Won").replace("[NAME]", player.getName()));
|
|
|
|
final int nb = (int)((double)_after * 1.5);
|
|
|
|
final int infoxp = Bukkit.getScheduler().scheduleSyncRepeatingTask(_plugin, new Runnable() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
if(_compteur >= nb)
|
|
|
|
return;
|
|
|
|
|
2019-10-12 16:03:55 +02:00
|
|
|
FireworkEffectPlayer.playFirework(player);
|
2016-08-20 21:35:22 +02:00
|
|
|
_compteur++;
|
|
|
|
}
|
|
|
|
}, 5, 5);
|
2019-10-12 13:56:34 +02:00
|
|
|
Bukkit.getScheduler().scheduleSyncDelayedTask((Plugin)_plugin, new Runnable() {
|
2016-08-20 21:35:22 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
_plugin.getServer().getScheduler().cancelTask(infoxp);
|
|
|
|
stop();
|
|
|
|
}
|
|
|
|
}, _after * 20);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Location getTp(Player player) {
|
|
|
|
int higher = _spawns.size() - 1;
|
|
|
|
if (_spawns.size() < 0) {
|
|
|
|
higher = 0;
|
|
|
|
}
|
|
|
|
int random = (int)(Math.random() * (double)higher);
|
|
|
|
Location loc = (Location)_spawns.get(random);
|
|
|
|
return loc;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|