mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-21 11:24:47 +01:00
Run Spotless on src/main
This commit is contained in:
@@ -1,36 +1,35 @@
|
||||
package emu.grasscutter.task;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
|
||||
/*
|
||||
* So what is cron expression?
|
||||
The format of a Cron expression is as follows.
|
||||
Second Minute Hour Day Month Week Year
|
||||
Seconds: 0-59
|
||||
Minute: 0-59
|
||||
hour: 0-23
|
||||
Day: 1-31
|
||||
Month: 1-12
|
||||
Week: 1-7 (0-6 sometimes)
|
||||
Year: Specify your own
|
||||
|
||||
If you want to express every second or every minute or something like that, use the * symbol in that position;
|
||||
if you want to express more than one such as every 15 minutes and every 30 minutes, you can write:`15, 30`.
|
||||
|
||||
For the rest of the wildcard characters, please Google them yourself
|
||||
*/
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface Task {
|
||||
String taskName() default "NO_NAME";
|
||||
|
||||
String taskCronExpression() default "0 0 0 0 0 ?";
|
||||
|
||||
String triggerName() default "NO_NAME";
|
||||
|
||||
boolean executeImmediatelyAfterReset() default false;
|
||||
|
||||
boolean executeImmediately() default false;
|
||||
}
|
||||
package emu.grasscutter.task;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
/*
|
||||
* So what is cron expression?
|
||||
The format of a Cron expression is as follows.
|
||||
Second Minute Hour Day Month Week Year
|
||||
Seconds: 0-59
|
||||
Minute: 0-59
|
||||
hour: 0-23
|
||||
Day: 1-31
|
||||
Month: 1-12
|
||||
Week: 1-7 (0-6 sometimes)
|
||||
Year: Specify your own
|
||||
|
||||
If you want to express every second or every minute or something like that, use the * symbol in that position;
|
||||
if you want to express more than one such as every 15 minutes and every 30 minutes, you can write:`15, 30`.
|
||||
|
||||
For the rest of the wildcard characters, please Google them yourself
|
||||
*/
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface Task {
|
||||
String taskName() default "NO_NAME";
|
||||
|
||||
String taskCronExpression() default "0 0 0 0 0 ?";
|
||||
|
||||
String triggerName() default "NO_NAME";
|
||||
|
||||
boolean executeImmediatelyAfterReset() default false;
|
||||
|
||||
boolean executeImmediately() default false;
|
||||
}
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
package emu.grasscutter.task;
|
||||
|
||||
import org.quartz.Job;
|
||||
import org.quartz.JobExecutionException;
|
||||
import org.quartz.PersistJobDataAfterExecution;
|
||||
|
||||
@PersistJobDataAfterExecution
|
||||
public abstract class TaskHandler implements Job {
|
||||
public void restartExecute() throws JobExecutionException {
|
||||
execute(null);
|
||||
}
|
||||
|
||||
public abstract void onEnable();
|
||||
|
||||
public abstract void onDisable();
|
||||
}
|
||||
package emu.grasscutter.task;
|
||||
|
||||
import org.quartz.Job;
|
||||
import org.quartz.JobExecutionException;
|
||||
import org.quartz.PersistJobDataAfterExecution;
|
||||
|
||||
@PersistJobDataAfterExecution
|
||||
public abstract class TaskHandler implements Job {
|
||||
public void restartExecute() throws JobExecutionException {
|
||||
execute(null);
|
||||
}
|
||||
|
||||
public abstract void onEnable();
|
||||
|
||||
public abstract void onDisable();
|
||||
}
|
||||
|
||||
@@ -1,173 +1,173 @@
|
||||
package emu.grasscutter.task;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import org.quartz.*;
|
||||
import org.quartz.impl.StdSchedulerFactory;
|
||||
import org.reflections.Reflections;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@SuppressWarnings({"UnusedReturnValue", "unused"})
|
||||
public final class TaskMap {
|
||||
private final Map<String, TaskHandler> tasks = new HashMap<>();
|
||||
private final Map<String, Task> annotations = new HashMap<>();
|
||||
private final Map<String, TaskHandler> afterReset = new HashMap<>();
|
||||
private final SchedulerFactory schedulerFactory = new StdSchedulerFactory();
|
||||
|
||||
public TaskMap() {
|
||||
this(false);
|
||||
}
|
||||
|
||||
public TaskMap(boolean scan) {
|
||||
if (scan) this.scan();
|
||||
}
|
||||
|
||||
public static TaskMap getInstance() {
|
||||
return Grasscutter.getGameServer().getTaskMap();
|
||||
}
|
||||
|
||||
public void resetNow() {
|
||||
// Unregister all tasks
|
||||
for (TaskHandler task : this.tasks.values()) {
|
||||
unregisterTask(task);
|
||||
}
|
||||
|
||||
// Run all afterReset tasks
|
||||
for (TaskHandler task : this.afterReset.values()) {
|
||||
try {
|
||||
task.restartExecute();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
// Remove all afterReset tasks
|
||||
this.afterReset.clear();
|
||||
|
||||
// Register all tasks
|
||||
for (TaskHandler task : this.tasks.values()) {
|
||||
registerTask(task.getClass().getAnnotation(Task.class).taskName(), task);
|
||||
}
|
||||
}
|
||||
|
||||
public TaskMap unregisterTask(TaskHandler task) {
|
||||
this.tasks.remove(task.getClass().getAnnotation(Task.class).taskName());
|
||||
this.annotations.remove(task.getClass().getAnnotation(Task.class).taskName());
|
||||
|
||||
try {
|
||||
Scheduler scheduler = schedulerFactory.getScheduler();
|
||||
scheduler.deleteJob(new JobKey(task.getClass().getAnnotation(Task.class).taskName()));
|
||||
} catch (SchedulerException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
task.onDisable();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean pauseTask(String taskName) {
|
||||
try {
|
||||
Scheduler scheduler = schedulerFactory.getScheduler();
|
||||
scheduler.pauseJob(new JobKey(taskName));
|
||||
} catch (SchedulerException e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean resumeTask(String taskName) {
|
||||
try {
|
||||
Scheduler scheduler = schedulerFactory.getScheduler();
|
||||
scheduler.resumeJob(new JobKey(taskName));
|
||||
} catch (SchedulerException e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean cancelTask(String taskName) {
|
||||
Task task = this.annotations.get(taskName);
|
||||
if (task == null) return false;
|
||||
try {
|
||||
this.unregisterTask(this.tasks.get(taskName));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public TaskMap registerTask(String taskName, TaskHandler task) {
|
||||
Task annotation = task.getClass().getAnnotation(Task.class);
|
||||
this.annotations.put(taskName, annotation);
|
||||
this.tasks.put(taskName, task);
|
||||
|
||||
// register task
|
||||
try {
|
||||
Scheduler scheduler = schedulerFactory.getScheduler();
|
||||
JobDetail job = JobBuilder
|
||||
.newJob(task.getClass())
|
||||
.withIdentity(taskName)
|
||||
.build();
|
||||
|
||||
Trigger convTrigger = TriggerBuilder.newTrigger()
|
||||
.withIdentity(annotation.triggerName())
|
||||
.withSchedule(CronScheduleBuilder.cronSchedule(annotation.taskCronExpression()))
|
||||
.build();
|
||||
|
||||
scheduler.scheduleJob(job, convTrigger);
|
||||
|
||||
if (annotation.executeImmediately()) {
|
||||
task.execute(null);
|
||||
}
|
||||
task.onEnable();
|
||||
} catch (SchedulerException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<TaskHandler> getHandlersAsList() {
|
||||
return new ArrayList<>(this.tasks.values());
|
||||
}
|
||||
|
||||
public HashMap<String, TaskHandler> getHandlers() {
|
||||
return new LinkedHashMap<>(this.tasks);
|
||||
}
|
||||
|
||||
public TaskHandler getHandler(String taskName) {
|
||||
return this.tasks.get(taskName);
|
||||
}
|
||||
|
||||
private void scan() {
|
||||
Reflections reflector = Grasscutter.reflector;
|
||||
Set<Class<?>> classes = reflector.getTypesAnnotatedWith(Task.class);
|
||||
classes.forEach(annotated -> {
|
||||
try {
|
||||
Task taskData = annotated.getAnnotation(Task.class);
|
||||
Object object = annotated.getDeclaredConstructor().newInstance();
|
||||
if (object instanceof TaskHandler) {
|
||||
this.registerTask(taskData.taskName(), (TaskHandler) object);
|
||||
if (taskData.executeImmediatelyAfterReset()) {
|
||||
this.afterReset.put(taskData.taskName(), (TaskHandler) object);
|
||||
}
|
||||
} else {
|
||||
Grasscutter.getLogger().error("Class " + annotated.getName() + " is not a TaskHandler!");
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
Grasscutter.getLogger().error("Failed to register task handler for " + annotated.getSimpleName(), exception);
|
||||
}
|
||||
});
|
||||
try {
|
||||
Scheduler scheduler = schedulerFactory.getScheduler();
|
||||
scheduler.start();
|
||||
} catch (SchedulerException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
package emu.grasscutter.task;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import java.util.*;
|
||||
import org.quartz.*;
|
||||
import org.quartz.impl.StdSchedulerFactory;
|
||||
import org.reflections.Reflections;
|
||||
|
||||
@SuppressWarnings({"UnusedReturnValue", "unused"})
|
||||
public final class TaskMap {
|
||||
private final Map<String, TaskHandler> tasks = new HashMap<>();
|
||||
private final Map<String, Task> annotations = new HashMap<>();
|
||||
private final Map<String, TaskHandler> afterReset = new HashMap<>();
|
||||
private final SchedulerFactory schedulerFactory = new StdSchedulerFactory();
|
||||
|
||||
public TaskMap() {
|
||||
this(false);
|
||||
}
|
||||
|
||||
public TaskMap(boolean scan) {
|
||||
if (scan) this.scan();
|
||||
}
|
||||
|
||||
public static TaskMap getInstance() {
|
||||
return Grasscutter.getGameServer().getTaskMap();
|
||||
}
|
||||
|
||||
public void resetNow() {
|
||||
// Unregister all tasks
|
||||
for (TaskHandler task : this.tasks.values()) {
|
||||
unregisterTask(task);
|
||||
}
|
||||
|
||||
// Run all afterReset tasks
|
||||
for (TaskHandler task : this.afterReset.values()) {
|
||||
try {
|
||||
task.restartExecute();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
// Remove all afterReset tasks
|
||||
this.afterReset.clear();
|
||||
|
||||
// Register all tasks
|
||||
for (TaskHandler task : this.tasks.values()) {
|
||||
registerTask(task.getClass().getAnnotation(Task.class).taskName(), task);
|
||||
}
|
||||
}
|
||||
|
||||
public TaskMap unregisterTask(TaskHandler task) {
|
||||
this.tasks.remove(task.getClass().getAnnotation(Task.class).taskName());
|
||||
this.annotations.remove(task.getClass().getAnnotation(Task.class).taskName());
|
||||
|
||||
try {
|
||||
Scheduler scheduler = schedulerFactory.getScheduler();
|
||||
scheduler.deleteJob(new JobKey(task.getClass().getAnnotation(Task.class).taskName()));
|
||||
} catch (SchedulerException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
task.onDisable();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean pauseTask(String taskName) {
|
||||
try {
|
||||
Scheduler scheduler = schedulerFactory.getScheduler();
|
||||
scheduler.pauseJob(new JobKey(taskName));
|
||||
} catch (SchedulerException e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean resumeTask(String taskName) {
|
||||
try {
|
||||
Scheduler scheduler = schedulerFactory.getScheduler();
|
||||
scheduler.resumeJob(new JobKey(taskName));
|
||||
} catch (SchedulerException e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean cancelTask(String taskName) {
|
||||
Task task = this.annotations.get(taskName);
|
||||
if (task == null) return false;
|
||||
try {
|
||||
this.unregisterTask(this.tasks.get(taskName));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public TaskMap registerTask(String taskName, TaskHandler task) {
|
||||
Task annotation = task.getClass().getAnnotation(Task.class);
|
||||
this.annotations.put(taskName, annotation);
|
||||
this.tasks.put(taskName, task);
|
||||
|
||||
// register task
|
||||
try {
|
||||
Scheduler scheduler = schedulerFactory.getScheduler();
|
||||
JobDetail job = JobBuilder.newJob(task.getClass()).withIdentity(taskName).build();
|
||||
|
||||
Trigger convTrigger =
|
||||
TriggerBuilder.newTrigger()
|
||||
.withIdentity(annotation.triggerName())
|
||||
.withSchedule(CronScheduleBuilder.cronSchedule(annotation.taskCronExpression()))
|
||||
.build();
|
||||
|
||||
scheduler.scheduleJob(job, convTrigger);
|
||||
|
||||
if (annotation.executeImmediately()) {
|
||||
task.execute(null);
|
||||
}
|
||||
task.onEnable();
|
||||
} catch (SchedulerException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<TaskHandler> getHandlersAsList() {
|
||||
return new ArrayList<>(this.tasks.values());
|
||||
}
|
||||
|
||||
public HashMap<String, TaskHandler> getHandlers() {
|
||||
return new LinkedHashMap<>(this.tasks);
|
||||
}
|
||||
|
||||
public TaskHandler getHandler(String taskName) {
|
||||
return this.tasks.get(taskName);
|
||||
}
|
||||
|
||||
private void scan() {
|
||||
Reflections reflector = Grasscutter.reflector;
|
||||
Set<Class<?>> classes = reflector.getTypesAnnotatedWith(Task.class);
|
||||
classes.forEach(
|
||||
annotated -> {
|
||||
try {
|
||||
Task taskData = annotated.getAnnotation(Task.class);
|
||||
Object object = annotated.getDeclaredConstructor().newInstance();
|
||||
if (object instanceof TaskHandler) {
|
||||
this.registerTask(taskData.taskName(), (TaskHandler) object);
|
||||
if (taskData.executeImmediatelyAfterReset()) {
|
||||
this.afterReset.put(taskData.taskName(), (TaskHandler) object);
|
||||
}
|
||||
} else {
|
||||
Grasscutter.getLogger()
|
||||
.error("Class " + annotated.getName() + " is not a TaskHandler!");
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
Grasscutter.getLogger()
|
||||
.error(
|
||||
"Failed to register task handler for " + annotated.getSimpleName(), exception);
|
||||
}
|
||||
});
|
||||
try {
|
||||
Scheduler scheduler = schedulerFactory.getScheduler();
|
||||
scheduler.start();
|
||||
} catch (SchedulerException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,53 +1,65 @@
|
||||
package emu.grasscutter.task.tasks;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.game.systems.AnnouncementSystem;
|
||||
import emu.grasscutter.task.Task;
|
||||
import emu.grasscutter.task.TaskHandler;
|
||||
import org.quartz.JobExecutionContext;
|
||||
import org.quartz.JobExecutionException;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Task(taskName = "Announcement", taskCronExpression = "0 * * * * ?", triggerName = "AnnouncementTrigger")
|
||||
public final class AnnouncementTask extends TaskHandler {
|
||||
|
||||
static Map<Integer, Integer> intervalMap = new ConcurrentHashMap<>();
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
Grasscutter.getLogger().debug("[Task] Announcement task enabled.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
Grasscutter.getLogger().debug("[Task] Announcement task disabled.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void execute(JobExecutionContext context) throws JobExecutionException {
|
||||
var current = new Date();
|
||||
var announceConfigItems = Grasscutter.getGameServer().getAnnouncementSystem().getAnnounceConfigItemMap().values().stream()
|
||||
.filter(AnnouncementSystem.AnnounceConfigItem::isTick)
|
||||
.filter(i -> current.after(i.getBeginTime()))
|
||||
.filter(i -> current.before(i.getEndTime()))
|
||||
.collect(Collectors.toMap(AnnouncementSystem.AnnounceConfigItem::getTemplateId, y -> y));
|
||||
|
||||
announceConfigItems.values().forEach(i -> intervalMap.compute(i.getTemplateId(), (k, v) -> v == null ? 1 : v + 1));
|
||||
|
||||
var toSend = intervalMap.entrySet().stream()
|
||||
.filter(i -> announceConfigItems.containsKey(i.getKey()))
|
||||
.filter(i -> i.getValue() >= announceConfigItems.get(i.getKey()).getInterval())
|
||||
.map(i -> announceConfigItems.get(i.getKey()))
|
||||
.toList();
|
||||
|
||||
Grasscutter.getGameServer().getAnnouncementSystem().broadcast(toSend);
|
||||
Grasscutter.getLogger().debug("Broadcast {} announcement(s) to all online players", toSend.size());
|
||||
|
||||
// clear the interval count
|
||||
toSend.forEach(i -> intervalMap.put(i.getTemplateId(), 0));
|
||||
}
|
||||
}
|
||||
package emu.grasscutter.task.tasks;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.game.systems.AnnouncementSystem;
|
||||
import emu.grasscutter.task.Task;
|
||||
import emu.grasscutter.task.TaskHandler;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.stream.Collectors;
|
||||
import org.quartz.JobExecutionContext;
|
||||
import org.quartz.JobExecutionException;
|
||||
|
||||
@Task(
|
||||
taskName = "Announcement",
|
||||
taskCronExpression = "0 * * * * ?",
|
||||
triggerName = "AnnouncementTrigger")
|
||||
public final class AnnouncementTask extends TaskHandler {
|
||||
|
||||
static Map<Integer, Integer> intervalMap = new ConcurrentHashMap<>();
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
Grasscutter.getLogger().debug("[Task] Announcement task enabled.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
Grasscutter.getLogger().debug("[Task] Announcement task disabled.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void execute(JobExecutionContext context) throws JobExecutionException {
|
||||
var current = new Date();
|
||||
var announceConfigItems =
|
||||
Grasscutter.getGameServer()
|
||||
.getAnnouncementSystem()
|
||||
.getAnnounceConfigItemMap()
|
||||
.values()
|
||||
.stream()
|
||||
.filter(AnnouncementSystem.AnnounceConfigItem::isTick)
|
||||
.filter(i -> current.after(i.getBeginTime()))
|
||||
.filter(i -> current.before(i.getEndTime()))
|
||||
.collect(
|
||||
Collectors.toMap(AnnouncementSystem.AnnounceConfigItem::getTemplateId, y -> y));
|
||||
|
||||
announceConfigItems
|
||||
.values()
|
||||
.forEach(i -> intervalMap.compute(i.getTemplateId(), (k, v) -> v == null ? 1 : v + 1));
|
||||
|
||||
var toSend =
|
||||
intervalMap.entrySet().stream()
|
||||
.filter(i -> announceConfigItems.containsKey(i.getKey()))
|
||||
.filter(i -> i.getValue() >= announceConfigItems.get(i.getKey()).getInterval())
|
||||
.map(i -> announceConfigItems.get(i.getKey()))
|
||||
.toList();
|
||||
|
||||
Grasscutter.getGameServer().getAnnouncementSystem().broadcast(toSend);
|
||||
Grasscutter.getLogger()
|
||||
.debug("Broadcast {} announcement(s) to all online players", toSend.size());
|
||||
|
||||
// clear the interval count
|
||||
toSend.forEach(i -> intervalMap.put(i.getTemplateId(), 0));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,33 +1,36 @@
|
||||
package emu.grasscutter.task.tasks;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.task.Task;
|
||||
import emu.grasscutter.task.TaskHandler;
|
||||
import org.quartz.JobExecutionContext;
|
||||
import org.quartz.JobExecutionException;
|
||||
|
||||
@Task(taskName = "MoonCard", taskCronExpression = "0 0 0 * * ?", triggerName = "MoonCardTrigger")
|
||||
// taskCronExpression: Fixed time period: 0:0:0 every day (twenty-four hour system)
|
||||
public final class MoonCard extends TaskHandler {
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
Grasscutter.getLogger().debug("[Task] MoonCard task enabled.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
Grasscutter.getLogger().debug("[Task] MoonCard task disabled.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void execute(JobExecutionContext context) throws JobExecutionException {
|
||||
Grasscutter.getGameServer().getPlayers().forEach((uid, player) -> {
|
||||
if (player.isOnline()) {
|
||||
if (player.inMoonCard()) {
|
||||
player.getTodayMoonCard();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
package emu.grasscutter.task.tasks;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.task.Task;
|
||||
import emu.grasscutter.task.TaskHandler;
|
||||
import org.quartz.JobExecutionContext;
|
||||
import org.quartz.JobExecutionException;
|
||||
|
||||
@Task(taskName = "MoonCard", taskCronExpression = "0 0 0 * * ?", triggerName = "MoonCardTrigger")
|
||||
// taskCronExpression: Fixed time period: 0:0:0 every day (twenty-four hour system)
|
||||
public final class MoonCard extends TaskHandler {
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
Grasscutter.getLogger().debug("[Task] MoonCard task enabled.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
Grasscutter.getLogger().debug("[Task] MoonCard task disabled.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void execute(JobExecutionContext context) throws JobExecutionException {
|
||||
Grasscutter.getGameServer()
|
||||
.getPlayers()
|
||||
.forEach(
|
||||
(uid, player) -> {
|
||||
if (player.isOnline()) {
|
||||
if (player.inMoonCard()) {
|
||||
player.getTodayMoonCard();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user