Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Не могу отменить Scheduler.

Warrner

Активный участник
Пользователь
Баллы
61
Код:
package me.rejomy.container.handlers;

import me.rejomy.container.SpawnSystem;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.*********ventory.ItemStack;

import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class EntityDamageEvent implements Listener {

    private int scheduler;
    private Map<String, Integer> map = new HashMap<>();

    @EventHandler(priority = EventPriority.MONITOR)
    public void onDamage(org.bukkit.event.entity.EntityDamageEvent event) {
        if (event.isCancelled() || !SpawnSystem.instance.getConfig().getBoolean("Prevent-Death.stop-death"))
            return;

        if (event.getEntity() instanceof Player) {

            Player victim = (Player) event.getEntity();

            if(victim == null || !victim.isOnline()) return;

            if (victim.getHealth() - event.getFinalDamage() <= 0) {
                victim.setHealth(victim.getMaxHealth());
                victim.damage(1);
                victim.setHealth(victim.getMaxHealth());

                if (SpawnSystem.ar != null && SpawnSystem.ar.getPvpManager().isInPvP(victim))
                    SpawnSystem.ar.getPvpManager().stopPvP(victim);

                for (ItemStack is : victim.getInventory().getContents())
                    if (is != null) {
                        victim.getWorld().dropItemNaturally(victim.getLocation(), is);
                        victim.getInventory().remove(is);
                    }
                if (victim.getInventory().getHelmet() != null) {
                    victim.getWorld().dropItemNaturally(victim.getLocation(), victim.getInventory().getHelmet());
                    victim.getInventory().setHelmet(null);
                }
                if (victim.getInventory().getChestplate() != null) {
                    victim.getWorld().dropItemNaturally(victim.getLocation(), victim.getInventory().getChestplate());
                    victim.getInventory().setChestplate(null);
                }
                if (victim.getInventory().getLeggings() != null) {
                    victim.getWorld().dropItemNaturally(victim.getLocation(), victim.getInventory().getLeggings());
                    victim.getInventory().setLeggings(null);
                }
                if (victim.getInventory().getBoots() != null) {
                    victim.getWorld().dropItemNaturally(victim.getLocation(), victim.getInventory().getBoots());
                    victim.getInventory().setBoots(null);
                }

                if (SpawnSystem.instance.getConfig().getBoolean("Prevent-Death.Rebirth.enable")) {

                    if(event.getCause().equals(org.bukkit.event.entity.EntityDamageEvent.DamageCause.VOID)) {
                        victim.performCommand("spawn");
                    }

                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "gamemode "
                            + SpawnSystem.instance.getConfig().getString("Prevent-Death.Rebirth.pre-gamemode") + " " + victim.getName());

                    Event death = new PlayerDeathEvent(victim, Arrays.asList(victim.getInventory().getContents()), victim.getExpToLevel(), "Death");
                    Bukkit.getPluginManager().callEvent(death);

                    if (!map.containsKey(victim.getName())) {
                        map.put(victim.getName(), SpawnSystem.instance.utils.getDelay(victim));
                    }

                    scheduler = Bukkit.getScheduler().scheduleSyncRepeatingTask(SpawnSystem.instance, () -> {
                        if(map.get(victim.getName()) == null) {
                            Bukkit.getLogger().info("Map == null EntityDamage Event 81 java " + victim.getName() + " SCHEDULER " + Bukkit.getScheduler().isCurrentlyRunning(scheduler));
                            Bukkit.getScheduler().cancelTask(scheduler);

                            Bukkit.getLogger().info("Map == null EntityDamage Event 81 java " + victim.getName() + " SCHEDULER post " + Bukkit.getScheduler().isCurrentlyRunning(scheduler));
                            return;
                        }

                        int delay = map.get(victim.getName()) - 1;

                        map.put(victim.getName(), delay);

                        victim.sendTitle(SpawnSystem.instance.utils.getMessage("Prevent-Death.Rebirth.Delay.titles.One"),
                                SpawnSystem.instance.utils.getMessage("Prevent-Death.Rebirth.Delay.titles.Two")
                                        .replace("{delay}", String.valueOf(delay)));

                        if (delay <= 0) {

                            Bukkit.getLogger().info("EntityDamage Event 81 java " + victim.getName() + " SCHEDULER " + Bukkit.getScheduler().isCurrentlyRunning(scheduler));
                            Bukkit.getScheduler().cancelTask(scheduler);
                            Bukkit.getLogger().info("EntityDamage Event 81 java " + victim.getName() + " SCHEDULER " + Bukkit.getScheduler().isCurrentlyRunning(scheduler));

                            Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "gamemode "
                                    + SpawnSystem.instance.getConfig().getString("Prevent-Death.Rebirth.post-gamemode") + " " + victim.getName());

                            File spawn = new File(SpawnSystem.instance.getDataFolder() + File.separator + "spawn.yml");
                            FileConfiguration spw = YamlConfiguration.loadConfiguration(spawn);

                            victim.teleport(new Location(
                                    Bukkit.getWorld(spw.getString("World")),
                                    spw.getDouble("Respawn.X"),
                                    spw.getDouble("Respawn.Y"),
                                    spw.getDouble("Respawn.Z"),
                                    spw.getInt("Respawn.Yw"),
                                    spw.getInt("Respawn.Pc")));

                            victim.sendTitle(SpawnSystem.instance.utils.getMessage("Prevent-Death.titles.Respawn.One"),
                                    SpawnSystem.instance.utils.getMessage("Prevent-Death.titles.Respawn.Two"));

                            map.remove(victim.getName());
                        }
                    }, 20, 20);

                }

                    victim.sendTitle(SpawnSystem.instance.utils.getMessage("Prevent-Death.titles.Death.One"),
                            SpawnSystem.instance.utils.getMessage("Prevent-Death.titles.Death.Two")
                                    .replaceAll("\\{killer}", event.getCause().name()));

                if (victim.getMaxHealth() > 0) {
                    victim.setHealth(victim.getMaxHealth());
                } else {
                    victim.setMaxHealth(20.0);
                    victim.setHealth(victim.getMaxHealth());
                }

                victim.setFoodLevel(20);
                victim.setExp(0);

                event.setCancelled(true);
            }

        }
    }

}
Шедулер даже не кастуется, строка перед отменой шедулера
Код:
Bukkit.getScheduler().isCurrentlyRunning(scheduler));
выводит false. Так-же как и перед. Это происходит если игрок умерает в бездне,получая гм3 еще раз умерает, и запускается 2 шедулера, от обычных падений как не странно, всё хорошо. Я могу сразу перемещать на спавн, но мне нужно решить эту проблему другим путём. Я могу не дать игроку умереть 2 раза, но мне нужно чтобы такого не было. Простым языком, игрок остается в гм 3 и в консоль спамит
Код:
                            Bukkit.getLogger().info("Map == null EntityDamage Event 81 java " + victim.getName() + " SCHEDULER " + Bukkit.getScheduler().isCurrentlyRunning(scheduler));
 

Поделиться этой страницей

Назад
Верх