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); } }
@Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (!canExecute(sender, command)) { return true; } List<BaseComponent[]> lines = new ArrayList<>(); List<BukkitTask> pendingTasks = Bukkit.getScheduler().getPendingTasks(); for (BukkitTask pendingTask : pendingTasks) { lines.add(formatTask(pendingTask)); Class<?> runnableClass = getRunnableClass(pendingTask); if (runnableClass != null) { lines.add(new ComponentBuilder(" Task: ") .color(PRIMARY_COLOR.asBungee()) .append(runnableClass.getSimpleName()) .color(SECONDARY_COLOR.asBungee()) .create()); } } Pages pagination = new Pages("Stacktrace", lines); pagination.send(sender); plugin.getPageManager().setPagination(sender.getName(), pagination); return true; }
List<BukkitTask> tasks = Bukkit.getScheduler().getPendingTasks(); HashMap<String, Integer> pluginCounts = new HashMap<>(); HashMap<String, HashMap<String, Integer>> taskCounts = new HashMap<>();