Newer
Older
ChallengeSystem / src / main / java / de / fanta / challenges / commands / TimerCommandTODO.java
@fantahund fantahund on 24 Jun 2020 12 KB Und noch mehr Update zeug :>
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);
    }

}