Advertisement
Nuubles

Timer 4

Mar 15th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.38 KB | None | 0 0
  1. package net.karanteeni.core.timers;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.Map.Entry;
  6. import java.util.logging.Level;
  7.  
  8. import org.bukkit.Bukkit;
  9. import org.bukkit.plugin.Plugin;
  10. import org.bukkit.scheduler.BukkitRunnable;
  11. import org.bukkit.scheduler.BukkitTask;
  12.  
  13. import net.karanteeni.core.KaranteeniCore;
  14.  
  15. public class KaranteeniTimerInitiater {
  16.     private final Map<KaranteeniTimer, Integer> listeners = new HashMap<KaranteeniTimer, Integer>();
  17.     private final BukkitTask timer;
  18.     private int tickCount = 0;
  19.     private Plugin plugin = KaranteeniCore.getPlugin(KaranteeniCore.class);
  20.    
  21.     /**
  22.      * Creates and starts the timer
  23.      */
  24.     public KaranteeniTimerInitiater()
  25.     {
  26.         BukkitRunnable timer = new BukkitRunnable() {
  27.             @Override
  28.             public void run() {
  29.                 runTimer();
  30.             }
  31.         };
  32.        
  33.         this.timer = timer.runTaskTimerAsynchronously(plugin, 1, 1);
  34.     }
  35.    
  36.     /**
  37.      * Register a timer to be runned
  38.      * @param timer timer which is called
  39.      * @param tickLimit tickes between each call
  40.      */
  41.     public void registerTimer(KaranteeniTimer timer, int tickLimit) throws IllegalArgumentException
  42.     {
  43.         if(tickLimit > 0)
  44.             listeners.put(timer, tickLimit);
  45.         else
  46.             throw new IllegalArgumentException("Illegal time! Has to be 1-N. " + tickLimit + " given.");
  47.     }
  48.    
  49.     /**
  50.      * Otetaan ajastin pois rekisteräinnistä
  51.      * @param timer
  52.      */
  53.     public void unregisterTimer(KaranteeniTimer timer)
  54.     {
  55.         timer.timerStopped();
  56.         listeners.remove(timer);
  57.     }
  58.    
  59.     /**
  60.      * Runs all timers once
  61.      */
  62.     public void runTimer()
  63.     {
  64.         Bukkit.getScheduler().runTaskAsynchronously(plugin,
  65.         new Runnable() {
  66.             Map<KaranteeniTimer, Integer> listeners;
  67.            
  68.             @Override
  69.             public void run()
  70.             {
  71.                 if(this.listeners == null)
  72.                     this.listeners = new HashMap<KaranteeniTimer, Integer>(KaranteeniTimerInitiater.this.listeners);
  73.            
  74.                 for (Entry<KaranteeniTimer, Integer> entry : listeners.entrySet())
  75.                 if(tickCount % entry.getValue() == 0)          
  76.                     try
  77.                     { entry.getKey().runTimer(); }
  78.                     catch(Exception e)
  79.                     { plugin.getLogger().log(Level.WARNING, "An Error happened in timer runnable", e); }
  80.                 else
  81.                     try
  82.                     { entry.getKey().timerWait(); }
  83.                     catch(Exception e)
  84.                     { plugin.getLogger().log(Level.WARNING, "An Error happened in timer waiter runnable", e); }
  85.             }
  86.         });
  87.        
  88.         if(tickCount == Integer.MAX_VALUE)
  89.             tickCount = 0;
  90.         ++tickCount;
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement