1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Warrner, 8 янв 2023.

  1. Автор темы
    Warrner

    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));
     

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