public static void inject(Plugin plg) { if (plg != null) { for (BukkitTask pendingTask : Bukkit.getScheduler().getPendingTasks()) { if (pendingTask.isSync() && pendingTask.getOwner().equals(plg)) { try { FieldAccessor<Runnable> field = Reflection.getField(pendingTask.getClass(), "task", Runnable.class); field.set(pendingTask, new SchedulerTaskInjector(plg, field.get(pendingTask))); } catch (Exception e) { e.printStackTrace(); } } } } }
public static void uninject(Plugin plg) { if (plg != null) { for (BukkitTask pendingTask : Bukkit.getScheduler().getPendingTasks()) { if (pendingTask.isSync() && pendingTask.getOwner().equals(plg)) { try { FieldAccessor<Runnable> field = Reflection.getField(pendingTask.getClass(), "task", Runnable.class); Runnable runnable = field.get(pendingTask); if (runnable instanceof SchedulerTaskInjector) { field.set(pendingTask, ((SchedulerTaskInjector) runnable).getRunnable()); } } catch (Exception e) { e.printStackTrace(); } } } } }
public static MonitorRecord getTaskTimingsByPlugin(Plugin plg) { MonitorRecord monitorRecord = getMonitorRecord("Scheduler", 0L, 0L, 0L); if (plg == null) { return monitorRecord; } for (BukkitTask pendingTask : Bukkit.getScheduler().getPendingTasks()) { if (pendingTask.isSync() && pendingTask.getOwner().equals(plg)) { try { FieldAccessor<Runnable> field = Reflection.getField(pendingTask.getClass(), "task", Runnable.class); Runnable runnable = field.get(pendingTask); if (runnable instanceof SchedulerTaskInjector) { SchedulerTaskInjector schedulerTaskInjector = (SchedulerTaskInjector) runnable; monitorRecord = monitorRecord .merge(getMonitorRecord("Scheduler", schedulerTaskInjector.getTotalTime(), schedulerTaskInjector.getTotalCount(), schedulerTaskInjector.getMaxExecuteTime())); } } catch (Exception e) { e.printStackTrace(); } } } return monitorRecord; }
public SchedulerReport() { super("Scheduler"); List<BukkitTask> tasks = Bukkit.getServer().getScheduler().getPendingTasks(); append("Pending Task Count", tasks.size()); for (BukkitTask task : tasks) { Class<?> taskClass = getTaskClass(task); DataReport report = new DataReport("Task: #" + task.getTaskId()); report.append("Owner", task.getOwner().getName()); report.append("Runnable", taskClass != null ? taskClass.getName() : "<Unknown>"); report.append("Synchronous?", task.isSync()); append(report.getTitle(), report); } }
private BaseComponent[] formatTask(BukkitTask pendingTask) { Plugin owner = pendingTask.getOwner(); int taskId = pendingTask.getTaskId(); boolean sync = pendingTask.isSync(); String id = Integer.toString(taskId); if (sync) { id += "-Sync"; } else if (Bukkit.getScheduler().isCurrentlyRunning(taskId)) { id += "-Running"; } return new ComponentBuilder(owner.getName()) .color(PRIMARY_COLOR.asBungee()) .append('-' + id) .color(SECONDARY_COLOR.asBungee()) .create(); }
HashMap<String, HashMap<String, Integer>> taskCounts = new HashMap<>(); for (BukkitTask task : tasks) { String pluginName = task.getOwner().getName(); HashMap<String, Integer> pluginTaskCounts = taskCounts.get(pluginName); if (pluginTaskCounts == null) {