Помогите Остановка Scheduler

JolyHoska

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
JolyNoska
Можно таким образом остановить шедулер? (cancel(); внизу)
Код:
    public void run() {
        Iterator<Entry<String, Long>> iter = this.c.t.entrySet().iterator();
        while(iter.hasNext()) {
            Entry<String, Long> entry = (Entry<String, Long>)iter.next();
            long secondsLeft = ((Long)this.c.t.get(entry.getKey())).longValue() / 1010L - System.currentTimeMillis() / 1000L;
            if(secondsLeft <= 0L) {
                @SuppressWarnings("deprecation")
                Player p = Bukkit.getPlayer((String)entry.getKey());
                if(p != null) {
                    c.t.remove(entry.getKey());
                    p.sendMessage("§7[§6Анти-Релог§7] §rВы вышли из сражения, можно безапасно покидать сервер");
                }
            }
        }
        cancel();
    }
}
 
У меня есть еще метод:
Код:
    public void onRemove() {
        Bukkit.getScheduler().cancelTasks(this);
    }
 
Не используй Scheduler. Он огромную нагрузку создает на сервер. Используй HashMap.

Код:
private HashMap<Player, Long> name = new HashMap<Player, Long>();

name.put(K, V);
 
Последнее редактирование:
Код:
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;

import com.earth2me.essentials.Essentials;

public class Core extends JavaPlugin implements Listener {
    Map<String, Long> t = new ConcurrentHashMap<>();
    List<String> l = new ArrayList<>();

    public Core() {
    }
    public void onEnable() {
        this.getServer().getPluginManager().registerEvents(this, this);
    }
    public void onTime() {
        Bukkit.getScheduler().runTaskTimer(this, new Core$1(this), 0, 50);
    }
    public void onRemove() {
        Bukkit.getScheduler().cancelTasks(this);
    }
    @EventHandler
    public void onQuit(PlayerQuitEvent e) {
        Player p = e.getPlayer();
        if(t.containsKey(p.getName())) {
            t.remove(p.getName());
            l.add(p.getName());
            onRemove();
        }
    }
    @SuppressWarnings("deprecation")
    @EventHandler
    public void onJoin(PlayerJoinEvent e) {
        Player p = e.getPlayer();
        if(l.contains(p.getName())) {
            p.sendMessage("§7[§6Анти-Релог§7] §rВы получаете наказание за выход из режима PvP!");
            p.damage(20, p);
            p.teleport(p.getWorld().getSpawnLocation());
            l.remove(p.getName());
        }
    }
    @EventHandler(
        priority = EventPriority.LOWEST,
        ignoreCancelled = true
    )
    @SuppressWarnings("deprecation")
    public void onDam(EntityDamageByEntityEvent e) {
        Entity en = e.getEntity();
        Entity d = e.getDamager();
        if(en instanceof Player && (d instanceof Player || d instanceof Arrow && ((Arrow)d).getShooter() instanceof Player)) {
            Player p = d instanceof Player?(Player)d:(Player)((Arrow)d).getShooter();
            Player tar = (Player)en;
            if(tar == p) {
                return;
            }
            if(!t.containsKey(p.getName())) {
                tar.sendMessage("§7[§6Анти-Релог§7] §rВы вошли в PvP с §c"+tar.getName()+" §rвыход из сервера приведет к смерти!");
                t.put(p.getName(), Long.valueOf(System.currentTimeMillis()));
                onTime();
            }
            if(!t.containsKey(tar.getName())) {
                t.put(tar.getName(), Long.valueOf(System.currentTimeMillis()));
                tar.sendMessage("§7[§6Анти-Релог§7] §rВы вошли в PvP с §c"+p.getName()+" §rвыход из сервера приведет к смерти!");
                onTime();
            }
            Essentials ess;
            if(p.getGameMode() == GameMode.CREATIVE
                    || ess.getUser(p).isGodModeEnabled()) {
                ess.getUser(p).setGodModeEnabled(false);
                }
                p.setFlying(false);
                p.setGameMode(GameMode.SURVIVAL);
                p.sendMessage("§7[§6Защита§7] §rКреатив, флай и режим Бога запрещены в сражениях!");
            }
        }
    }
}
 
Зачем тут итератор в таком виде? Научись пользоваться for (Object o : iterable) { }, значительно удобнее и читабельнее.

Код:
public void run() {
    for (Entry<String, Long> entry : c.t.entrySet()) {
        String key = entry.getKey();
        long value = entry.getValue();
       
        long secondsLeft = value / 1010 - System.currentTimeMillis() / 1000;
        if (secondsLeft <= 0) {
            Player p = Bukkit.getPlayer(key);
            if (p != null) {
            c.t.remove(key);
            p.sendMessage("§7[§6Анти-Релог§7] §rВы вышли из сражения, можно безапасно покидать сервер.");
        }
    }
    cancel();
}

И ещё научись юзать статики. Ты создаёшь экземпляр класса, чтобы хранить игроков в кд, но вместо этого перед мапой можно просто поставить static. В общем тебе нужно подтянуть основы джавы, пиши сюда, если будут вопросы какие.
 
Зачем тут итератор в таком виде? Научись пользоваться for (Object o : iterable) { }, значительно удобнее и читабельнее.

Код:
public void run() {
    for (Entry<String, Long> entry : c.t.entrySet()) {
        String key = entry.getKey();
        long value = entry.getValue();
      
        long secondsLeft = value / 1010 - System.currentTimeMillis() / 1000;
        if (secondsLeft <= 0) {
            Player p = Bukkit.getPlayer(key);
            if (p != null) {
            c.t.remove(key);
            p.sendMessage("§7[§6Анти-Релог§7] §rВы вышли из сражения, можно безапасно покидать сервер.");
        }
    }
    cancel();
}

И ещё научись юзать статики. Ты создаёшь экземпляр класса, чтобы хранить игроков в кд, но вместо этого перед мапой можно просто поставить static. В общем тебе нужно подтянуть основы джавы, пиши сюда, если будут вопросы какие.
Спасибо большой, в общем должно получить так? 1 класс
Код:
public class Core extends JavaPlugin implements Listener {
    public static Map<String, Long> t = new ConcurrentHashMap<>();
    List<String> l = new ArrayList<>();

    public Core() {
    }
    public void onEnable() {
        this.getServer().getPluginManager().registerEvents(this, this);
    }
    public void onTime() {
        Bukkit.getScheduler().runTaskTimer(this, new Core$1(this), 0, 50).getTaskId();
    }
    public void onRemove() {
        Bukkit.getScheduler().cancelTasks(this);
    }
    @EventHandler
    public void onQuit(PlayerQuitEvent e) {
        Player p = e.getPlayer();
        if(t.containsKey(p.getName())) {
            t.remove(p.getName());
            l.add(p.getName());
            onRemove();
        }
    }
    @SuppressWarnings("deprecation")
    @EventHandler
    public void onJoin(PlayerJoinEvent e) {
        Player p = e.getPlayer();
        if(l.contains(p.getName())) {
            p.sendMessage("§7[§6Анти-Релог§7] §rВы получаете наказание за выход из режима PvP!");
            p.damage(20);
            p.teleport(p.getWorld().getSpawnLocation());
            l.remove(p.getName());
        }
    }
    @EventHandler(
        priority = EventPriority.LOWEST,
        ignoreCancelled = true
    )
    @SuppressWarnings("deprecation")
    public void onDam(EntityDamageByEntityEvent e) {
        Entity en = e.getEntity();
        Entity d = e.getDamager();
        if(en instanceof Player && (d instanceof Player || d instanceof Arrow && ((Arrow)d).getShooter() instanceof Player)) {
            Player p = d instanceof Player?(Player)d:(Player)((Arrow)d).getShooter();
            Player tar = (Player)en;
            if(tar == p) {
                return;
            }
            if(!t.containsKey(p.getName())) {
                tar.sendMessage("§7[§6Анти-Релог§7] §rВы вошли в PvP с §c"+tar.getName()+" §rвыход из сервера приведет к смерти!");
                t.put(p.getName(), Long.valueOf(System.currentTimeMillis()));
                onTime();
            }
            if(!t.containsKey(tar.getName())) {
                t.put(tar.getName(), Long.valueOf(System.currentTimeMillis()));
                tar.sendMessage("§7[§6Анти-Релог§7] §rВы вошли в PvP с §c"+p.getName()+" §rвыход из сервера приведет к смерти!");
                onTime();
            }
            Essentials ess = new Essentials();
            if(p.getGameMode() == GameMode.CREATIVE
                    || ess.getUser(p).isGodModeEnabled()
                    || p.isFlying()
                    || ess.getUser(p).getBase().getAllowFlight()
                    || p.hasMetadata("god")) {
                ess.getUser(p).setGodModeEnabled(false);
                ess.getUser(p).getBase().setAllowFlight(false);
                p.setFlying(false);
                p.setGameMode(GameMode.SURVIVAL);
                p.sendMessage("§7[§6Защита§7] §rКреатив, флай и режим Бога запрещены в сражениях!");
            }
        }
    }
}
2 класс
Код:
class Core$1 extends BukkitRunnable {
    Core c;
    Core$1(Core c) {
        this.c = c;
    }
    public void run() {
        for (Entry<String, Long> entry : Core.t.entrySet()) {
            String key = entry.getKey();
            long value = entry.getValue();
            long secondsLeft = value / 1010 - System.currentTimeMillis() / 1000;
            if (secondsLeft <= 0) {
                @SuppressWarnings("deprecation")
                Player p = Bukkit.getPlayer(key);
                if (p != null) {
                    Core.t.remove(key);
                    p.sendMessage("§7[§6Анти-Релог§7] §rВы вышли из сражения, можно безопасно покидать сервер!");
                }
            }
        }
    }
}
 
У меня к Вам еще один вопрос, Почему перед ArrayList не ставите <>(); так ж будет желтым подчеркиваться. Желтый цвет - не стобильность, значит приведет к лагам
 
У меня к Вам еще один вопрос, Почему перед ArrayList не ставите <>(); так ж будет желтым подчеркиваться. Желтый цвет - не стобильность, значит приведет к лагам
проорал знатно. Жёлтым подчёркивает говнокод а не стабильность
 
Вот переделанная более-менее адекватная версия (хотя я бы сделал по другому) - https://paste.md-5.net/wavuxitiyu.avrasm

проорал знатно. Жёлтым подчёркивает говнокод а не стабильность
Зависит от IDE. В IDEA, к примеру, жёлтым выделяется много чего, и не всё из этого говнокод.
 
У меня к Вам еще один вопрос, Почему перед ArrayList не ставите <>(); так ж будет желтым подчеркиваться. Желтый цвет - не стобильность, значит приведет к лагам
Сам ты не стабильность. Это не указан тип и все. Но оно все равно будет работать.
 
У меня к Вам еще один вопрос, Почему перед ArrayList не ставите <>(); так ж будет желтым подчеркиваться. Желтый цвет - не стобильность, значит приведет к лагам
ААааару во весь голос.
 
Извините, глупость сморозил, просто кто-то мне это сказал, да и в google нашел
 
Назад
Верх