package de.fanta.challenges.commands;
import de.fanta.challenges.Challenges;
import de.fanta.challenges.ChatUtil;
import java.util.Random;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Effect;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
public class TimerCommandTODO implements CommandExecutor {
private final Challenges plugin;
public TimerCommandTODO(Challenges plugin) {
this.plugin = plugin;
}
private int time;
private int sek;
private int min;
private int hrs;
private int tsincemlg = 0;
private String ssek;
private String smin;
private Random random = new Random();
private boolean mlg_active = false;
@Override
public boolean onCommand(CommandSender sender, Command cmd, String lable, String[] args) {
if ((plugin.getCurrentEditor() != null && ((Player) sender).getUniqueId().equals(plugin.getCurrentEditor().getUniqueId())) || sender.hasPermission("Challenges.editor.override")) {
if (args.length == 1) {
if (args[0].equalsIgnoreCase("start")) {
if (!this.plugin.getConfig().getBoolean("timer.enabled")) {
this.plugin.getConfig().set("timer.enabled", Boolean.valueOf(true));
Bukkit.broadcastMessage(Challenges.PREFIX + " §aDer Timer wird fortgesetzt!");
} else {
ChatUtil.sendWarningMessage(sender, "Der Timer läuft bereits!");
}
} else if (args[0].equalsIgnoreCase("pause")) {
if (this.plugin.getConfig().getBoolean("timer.enabled")) {
this.plugin.getConfig().set("timer.enabled", Boolean.valueOf(false));
Bukkit.broadcastMessage(Challenges.PREFIX + " §6Der Timer wurde angehalten");
} else {
ChatUtil.sendWarningMessage(sender, "Der Timer ist bereits pausiert!");
}
} else if (args[0].equalsIgnoreCase("reset")) {
SetTimer(0);
Bukkit.broadcastMessage(Challenges.PREFIX + " §cDer Timer wurde zurückgesetzt!");
} else if (args[0].equalsIgnoreCase("reverse")) {
this.plugin.getConfig().set("timer.reverse", Boolean.valueOf(!this.plugin.getConfig().getBoolean("timer.reverse")));
this.plugin.saveConfig();
if (this.plugin.getConfig().getBoolean("timer.reverse")) {
Bukkit.broadcastMessage(Challenges.PREFIX + " §5Der Timer läuft nun rückwärts!");
} else {
Bukkit.broadcastMessage(Challenges.PREFIX + " §9Der Timer läuft nun vorwärts!");
}
} else if (args[0].equalsIgnoreCase("forcemlg")) {
if (!this.mlg_active) {
this.mlg_active = true;
Bukkit.broadcastMessage(Challenges.PREFIX + " §bZeit für einen MLG! §6Viel Glück!");
for (Player p : Bukkit.getOnlinePlayers()) {
if ((((p.getGameMode() == GameMode.SURVIVAL) ? 1 : 0) & (!p.isDead() ? 1 : 0)) != 0) {
TPMLG(p);
}
}
} else {
ChatUtil.sendWarningMessage(sender, "Ein MLG findet bereits statt!");
}
} else {
ChatUtil.sendWarningMessage(sender, "Benutze: /timer start/pause/reset/reverse/set [Zeit in Sekunden]");
}
} else if (args.length >= 2) {
if (args[0].equalsIgnoreCase("set")) {
SetTimer(Integer.parseInt(args[1]));
Bukkit.broadcastMessage(Challenges.PREFIX + " §bDer Timer wurde auf §a" + this.hrs + ":" + this.smin + ":" + this.ssek + " §bgesetzt!");
} else {
ChatUtil.sendWarningMessage(sender, "Benutze: /timer start/pause/reset/reverse/set [Zeit in Sekunden]");
}
} else {
ChatUtil.sendNormalMessage(sender, "~~~~~ Timer command ~~~~~");
ChatUtil.sendNormalMessage(sender, "/timer start - Setze den Timer fort");
ChatUtil.sendNormalMessage(sender, "/timer pause - Pausiere den Timer");
ChatUtil.sendNormalMessage(sender, "/timer reset - Setze den Timer zurück");
ChatUtil.sendNormalMessage(sender, "/timer set [Zeit in Sekunden] - Setze den Timer auf eine bestimmte Zeit");
ChatUtil.sendNormalMessage(sender, "/timer reverse - Ändere ob der Timer vor- oder rückwärts läuft");
}
} else {
ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! " + plugin.getCurrentEditor().getName() + " muss die Map bearbeiten!");
}
return true;
}
public void LoadTimer() {
this.time = this.plugin.getConfig().getInt("timer.time");
UpdateStrings();
StartTimer();
}
public void StartTimer() {
Bukkit.getScheduler().scheduleSyncRepeatingTask(this.plugin, new Runnable() {
@Override
public void run() {
int rndnmbr = TimerCommandTODO.this.random.nextInt(750);
boolean ttimer = TimerCommandTODO.this.plugin.getConfig().getBoolean("timer.enabled");
int ttime = TimerCommandTODO.this.plugin.getConfig().getInt("timer.time");
int thrs = TimerCommandTODO.this.plugin.getConfig().getInt("timer.hrs");
String tsek = TimerCommandTODO.this.plugin.getConfig().getString("timer.sek");
String tmin = TimerCommandTODO.this.plugin.getConfig().getString("timer.min");
if (ttimer) {
TimerCommandTODO.this.tsincemlg++;
if (TimerCommandTODO.this.plugin.getConfig().getBoolean("mlg.enabled") && !TimerCommandTODO.this.mlg_active && Bukkit.getOnlinePlayers().size() >= 1 && (rndnmbr == 638 || TimerCommandTODO.this.tsincemlg >= TimerCommandTODO.this.plugin.getConfig().getInt("mlg.maxtime"))) {
Bukkit.broadcastMessage(Challenges.PREFIX + " §bZeit für einen MLG! §6Viel Glück!");
TimerCommandTODO.this.tsincemlg = 0;
for (Player p : Bukkit.getOnlinePlayers()) {
if ((((p.getGameMode() == GameMode.SURVIVAL) ? 1 : 0) & (!p.isDead() ? 1 : 0)) != 0) {
TimerCommandTODO.this.TPMLG(p);
}
}
}
if (TimerCommandTODO.this.plugin.getConfig().getBoolean("timer.reverse")) {
if (ttime <= 0) {
TimerCommandTODO.this.plugin.getConfig().set("timer.enabled", Boolean.valueOf(false));
for (Player p : Bukkit.getOnlinePlayers()) {
p.setGameMode(GameMode.SPECTATOR);
p.sendTitle("§4ZEIT ABGELAUFEN!", "§cChallenge fehgeschlagen", 10, 60, 10);
}
Bukkit.broadcastMessage(Challenges.PREFIX + " §4Die Zeit ist abgelaufen und die Challenge somit fehlgeschlagen!");
Bukkit.broadcastMessage(Challenges.PREFIX + " §aSeed: §b" + Bukkit.getWorlds().get(0).getSeed());
} else {
ttime--;
TimerCommandTODO.this.time = ttime;
TimerCommandTODO.this.UpdateStrings();
}
for (Player p : Bukkit.getOnlinePlayers()) {
p.sendActionBar(ChatColor.DARK_GREEN + "" + ChatColor.BOLD + thrs + ":" + tmin + ":" + tsek);
}
} else {
ttime++;
TimerCommandTODO.this.time = ttime;
TimerCommandTODO.this.UpdateStrings();
for (Player p : Bukkit.getOnlinePlayers()) {
p.sendActionBar(ChatColor.GREEN + "" + ChatColor.BOLD + thrs + ":" + tmin + ":" + tsek);
}
}
} else {
for (Player p : Bukkit.getOnlinePlayers()) {
p.sendActionBar(ChatColor.GOLD + "" + ChatColor.BOLD + "Der Timer ist pausiert.");
if (p.getGameMode() != GameMode.SPECTATOR)
p.getWorld().playEffect(p.getLocation(), Effect.ENDER_SIGNAL, 2);
}
}
}
}, 20L, 20L);
}
public void SetTimer(int t) {
this.plugin.getConfig().set("timer.enabled", Boolean.valueOf(false));
this.time = t;
UpdateStrings();
SaveTimer();
}
public void UpdateStrings() {
this.min = this.time / 60;
this.hrs = this.min / 60;
this.min %= 60;
this.sek = this.time % 60;
if (this.sek >= 10) {
this.ssek = Integer.toString(this.sek);
} else {
this.ssek = '0' + Integer.toString(this.sek);
}
if (this.min >= 10) {
this.smin = Integer.toString(this.min);
} else {
this.smin = '0' + Integer.toString(this.min);
}
SaveTimer();
}
public void SaveTimer() {
this.plugin.getConfig().set("timer.time", Integer.valueOf(this.time));
this.plugin.getConfig().set("timer.sek", this.ssek);
this.plugin.getConfig().set("timer.min", this.smin);
this.plugin.getConfig().set("timer.hrs", Integer.valueOf(this.hrs));
this.plugin.saveConfig();
}
@SuppressWarnings("deprecation")
public void TPMLG(Player p) {
p.closeInventory();
Inventory inv = Bukkit.createInventory(p, InventoryType.PLAYER, p.getName());
inv.setContents(p.getInventory().getContents());
p.getInventory().clear();
p.getInventory().setItemInHand(new ItemStack(Material.WATER_BUCKET));
int rndY = this.random.nextInt(20);
Location oldloc = p.getLocation();
Location newloc = new Location(Bukkit.getWorld("mlg_challenge"), p.getLocation().getBlockX(), (50 + rndY), p.getLocation().getBlockZ());
p.teleport(newloc);
MLGResult(p, oldloc, inv);
}
public void MLGResult(final Player p, final Location loc, final Inventory inv) {
Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() {
@Override
public void run() {
TimerCommandTODO.this.mlg_active = false;
if (!p.isDead() && p.getWorld() == Bukkit.getWorld("mlg_challenge")) {
if (TimerCommandTODO.this.plugin.getConfig().getBoolean("timer.enabled")) {
ChatUtil.sendNormalMessage(p, "§aDu hast den §bMLG §aerfolgreich absolviert! §6Weitere folgen...");
p.setInvulnerable(true);
TimerCommandTODO.this.MLGBack(p, loc, inv);
} else {
TimerCommandTODO.this.MLGBack(p, loc, inv);
}
} else if (Bukkit.getWorlds().get(0).getGameRuleValue("keepInventory").equals("true")) {
p.getInventory().setContents(inv.getContents());
}
}
}, 100L);
}
public void MLGBack(final Player p, Location loc, Inventory inv) {
p.teleport(loc);
p.getInventory().setContents(inv.getContents());
Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() {
@Override
public void run() {
p.setInvulnerable(false);
}
}, 60L);
}
}