This commit is contained in:
JaTiTV 2022-11-17 23:44:45 +01:00
parent 66103a26e4
commit afe4297640
7 changed files with 233 additions and 71 deletions

View File

@ -1,12 +1,17 @@
package net.t2code.automatedMessages.config; package net.t2code.automatedMessages.config;
import org.bukkit.Sound;
public enum Config { public enum Config {
updateCheckOnJoin("plugin.updateCheck.onJoin", true, ConfigParam.BOOLEAN), updateCheckOnJoin("plugin.updateCheck.onJoin", true, ConfigParam.BOOLEAN),
updateCheckSeePreReleaseUpdates("plugin.updateCheck.seePreReleaseUpdates", true, ConfigParam.BOOLEAN), updateCheckSeePreReleaseUpdates("plugin.updateCheck.seePreReleaseUpdates", true, ConfigParam.BOOLEAN),
updateCheckTimeInterval("plugin.updateCheck.timeInterval", 60, ConfigParam.INTEGER), updateCheckTimeInterval("plugin.updateCheck.timeInterval", 60, ConfigParam.INTEGER),
prefix("plugin.prefix", "", ConfigParam.STRING), prefix("plugin.prefix", "<dark_gray>[<dark_red>T2C</dark_red>-<color:#5cff5c>Automated</color><color:#69d2ff>Messages</color>]</dark_gray>", ConfigParam.STRING),
sendConsole("plugin.broadcastInConsole", true, ConfigParam.BOOLEAN),
timeFormat("plugin.timeFormat", "HH:mm:ss yyyy/MM/dd", ConfigParam.STRING),
msgReloadStart("plugin.messages.reloadStart", "Reload start", ConfigParam.STRING), msgReloadStart("plugin.messages.reloadStart", "Reload start", ConfigParam.STRING),
msgReloadEnd("plugin.messages.reloadEnd", "Reload end", ConfigParam.STRING), msgReloadEnd("plugin.messages.reloadEnd", "Reload end", ConfigParam.STRING),
@ -14,12 +19,19 @@ public enum Config {
message("messages", message("messages",
"messages.KEY.enable", false, "messages.KEY.enable", false,
"messages.KEY.message", "", "messages.KEY.message", "",
"messages.KEY.sound.enable", true,
"messages.KEY.sound.sound",FileBuild.sound(),
"messages.KEY.intervalInMin", 0, "messages.KEY.intervalInMin", 0,
"messages.KEY.useCronJob.enable", false, "messages.KEY.exactTime.enable", false,
"messages.KEY.useCronJob.value", "", "messages.KEY.exactTime.timeMinute", "*/5",
"messages.KEY.exactTime.timeHour", "*",
"messages.KEY.exactTime.timeDayOfMonth", "*",
"messages.KEY.exactTime.timeMonth", "*",
"messages.KEY.exactTime.timeDayOfWeek", "*",
ConfigParam.MESSAGE ConfigParam.MESSAGE
); );
public String path; public String path;
public String valueString; public String valueString;
public Boolean valueBoolean; public Boolean valueBoolean;
@ -31,12 +43,33 @@ public enum Config {
public String msgMsgPath; public String msgMsgPath;
public String msgMsg; public String msgMsg;
public String soundEnablePath;
public Boolean soundEnable;
public String soundPath;
public Sound sound;
public String msgIntervalPath; public String msgIntervalPath;
public Integer msgInterval; public Integer msgInterval;
public String msgCronJobPath;
public Boolean msgCronJob; public String exactTimePath;
public String msgCronJobStringPath; public Boolean exactTime;
public String msgCronJobString;
public String timeMinutePath;
public String timeMinute;
public String timeHourPath;
public String timeHour;
public String timeDayOfMonthPath;
public String timeDayOfMonth;
public String timeMonthPath;
public String timeMonth;
public String timeDayOfWeekPath;
public String timeDayOfWeek;
public ConfigParam configParam; public ConfigParam configParam;
@ -61,21 +94,41 @@ public enum Config {
Config(String msgPath, Config(String msgPath,
String msgEnablePath, Boolean msgEnable, String msgEnablePath, Boolean msgEnable,
String msgMsgPath, String msgMsg, String msgMsgPath, String msgMsg,
String soundEnablePath, Boolean soundEnable,
String soundPath , Sound sound,
String msgIntervalPath, Integer msgInterval, String msgIntervalPath, Integer msgInterval,
String msgCronJobPath, Boolean msgCronJob, String exactTimePath, Boolean exactTime, String timeMinutePath, String timeMinute,
String msgCronJobStringPath, String msgCronJobString, String timeHourPath, String timeHour,
String timeDayOfMonthPath, String timeDayOfMonth,
String timeMonthPath, String timeMonth,
String timeDayOfWeekPath, String timeDayOfWeek,
ConfigParam configParam) { ConfigParam configParam) {
this.msgPath = msgPath; this.msgPath = msgPath;
this.msgEnablePath = msgEnablePath; this.msgEnablePath = msgEnablePath;
this.msgEnable = msgEnable; this.msgEnable = msgEnable;
this.msgMsgPath = msgMsgPath; this.msgMsgPath = msgMsgPath;
this.msgMsg = msgMsg; this.msgMsg = msgMsg;
this.soundEnablePath = soundEnablePath;
this.soundEnable=soundEnable;
this.soundPath=soundPath;
this.sound=sound;
this.msgIntervalPath = msgIntervalPath; this.msgIntervalPath = msgIntervalPath;
this.msgInterval = msgInterval; this.msgInterval = msgInterval;
this.msgCronJobPath = msgCronJobPath; this.exactTimePath = exactTimePath;
this.msgCronJob = msgCronJob; this.exactTime = exactTime;
this.msgCronJobStringPath = msgCronJobStringPath; this.timeMinutePath = timeMinutePath;
this.msgCronJobString = msgCronJobString; this.timeMinute = timeMinute;
this.timeHourPath = timeHourPath;
this.timeHour = timeHour;
this.timeDayOfMonthPath = timeDayOfMonthPath;
this.timeDayOfMonth = timeDayOfMonth;
this.timeMonthPath = timeMonthPath;
this.timeMonth = timeMonth;
this.timeDayOfWeekPath = timeDayOfWeekPath;
this.timeDayOfWeek = timeDayOfWeek;
this.configParam = configParam; this.configParam = configParam;
} }
} }

View File

@ -6,6 +6,8 @@ import net.t2code.automatedMessages.objects.Message;
import net.t2code.automatedMessages.system.Main; import net.t2code.automatedMessages.system.Main;
import net.t2code.t2codelib.SPIGOT.api.messages.T2Creplace; import net.t2code.t2codelib.SPIGOT.api.messages.T2Creplace;
import net.t2code.t2codelib.SPIGOT.api.messages.T2Csend; import net.t2code.t2codelib.SPIGOT.api.messages.T2Csend;
import net.t2code.t2codelib.SPIGOT.api.minecraftVersion.T2CmcVersion;
import org.bukkit.Sound;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File; import java.io.File;
@ -50,21 +52,33 @@ public class FileBuild {
if (!yamlConfiguration.contains(value.msgPath)) { if (!yamlConfiguration.contains(value.msgPath)) {
setExample("exampleDiscord", true, setExample("exampleDiscord", true,
"[prefix] <aqua>If you need help, just contact us on our <color:#ffcb2e><hover:show_text:'<red>dc.t2code.net</red>'><click:open_url:'https://discord.t2code.net'>T2Code Support Discord server</click></hover></color>.</aqua>", "[prefix] <aqua>If you need help, just contact us on our <color:#ffcb2e><hover:show_text:'<red>dc.t2code.net</red>'><click:open_url:'https://discord.t2code.net'>T2Code Support Discord server</click></hover></color>.</aqua>",
20, false, "0 0/5 * ? * * *", yamlConfiguration); true, sound(), 20, false, "*", "*", "*", "*", "*", yamlConfiguration);
setExample("exampleTime", true, setExample("exampleTime", true,
"[prefix] <aqua>Es ist jetzt <yellow>[time]</yellow></aqua>", "[prefix] <aqua>Es ist jetzt <yellow>[time]</yellow></aqua>",
0, true, "0 0/20 * ? * * *", yamlConfiguration); true, sound(),0, true, "0/15/30/45", "*", "*", "*", "*", yamlConfiguration);
} }
for (String key : yamlConfiguration.getConfigurationSection(value.msgPath).getKeys(false)) { for (String key : yamlConfiguration.getConfigurationSection(value.msgPath).getKeys(false)) {
Boolean enable = yamlConfiguration.getBoolean(value.msgEnablePath.replace("KEY", key)); Boolean enable = yamlConfiguration.getBoolean(value.msgEnablePath.replace("KEY", key));
String message = yamlConfiguration.getString(value.msgMsgPath.replace("KEY", key)); String message = yamlConfiguration.getString(value.msgMsgPath.replace("KEY", key));
Boolean soundEnable = yamlConfiguration.getBoolean(value.soundEnablePath.replace("KEY", key));
Sound sound;
try {
sound = Sound.valueOf(yamlConfiguration.getString(value.soundPath.replace("KEY", key)));
} catch (Exception e) {
sound = sound();
}
Integer interval = yamlConfiguration.getInt(value.msgIntervalPath.replace("KEY", key)); Integer interval = yamlConfiguration.getInt(value.msgIntervalPath.replace("KEY", key));
Boolean cronJob = yamlConfiguration.getBoolean(value.msgCronJobPath.replace("KEY", key));
String cronJobString = yamlConfiguration.getString(value.msgCronJobStringPath.replace("KEY", key)); Boolean exactTime = yamlConfiguration.getBoolean(value.exactTimePath.replace("KEY", key));
Message msg = new Message(key, enable, message, interval, cronJob, cronJobString); String timeMinute = yamlConfiguration.getString(value.timeMinutePath.replace("KEY", key));
T2Csend.debugmsg(Main.getPlugin(),key); String timeHour = yamlConfiguration.getString(value.timeHourPath.replace("KEY", key));
T2Csend.debugmsg(Main.getPlugin(), String.valueOf(cronJob)); String timeDayOfMonth = yamlConfiguration.getString(value.timeDayOfMonthPath.replace("KEY", key));
T2Csend.debugmsg(Main.getPlugin(),cronJobString); String timeMonth = yamlConfiguration.getString(value.timeMonthPath.replace("KEY", key));
String timeDayOfWeek = yamlConfiguration.getString(value.timeDayOfWeekPath.replace("KEY", key));
Message msg = new Message(key, enable, message, soundEnable, sound, interval, exactTime, timeMinute, timeHour, timeDayOfMonth, timeMonth, timeDayOfWeek);
messageHashMap.put(key, msg); messageHashMap.put(key, msg);
} }
break; break;
@ -77,11 +91,26 @@ public class FileBuild {
} }
} }
private static void setExample(String key, Boolean enable, String msg, Integer interval, Boolean useCronJobEnable, String useCronJobValue,YamlConfiguration yamlConfiguration) { static Sound sound() {
if (T2CmcVersion.isMc1_8()) {
return Sound.valueOf("NOTE_PIANO");
} else if (T2CmcVersion.isMc1_9() || T2CmcVersion.isMc1_10() || T2CmcVersion.isMc1_11() || T2CmcVersion.isMc1_12()) {
return Sound.valueOf("BLOCK_NOTE_HARP");
} else return Sound.BLOCK_NOTE_BLOCK_HARP;
}
private static void setExample(String key, Boolean enable, String msg,Boolean soundEnable,Sound sound, Integer interval, Boolean exactTime, String timeMinute, String timeHour, String timeDayOfMonth,
String timeMonth, String timeDayOfWeek, YamlConfiguration yamlConfiguration) {
yamlConfiguration.set("messages." + key + ".enable", enable); yamlConfiguration.set("messages." + key + ".enable", enable);
yamlConfiguration.set("messages." + key + ".message", msg); yamlConfiguration.set("messages." + key + ".message", msg);
yamlConfiguration.set("messages." + key + ".sound.enable", soundEnable);
yamlConfiguration.set("messages." + key + ".sound.sound", sound.toString());
yamlConfiguration.set("messages." + key + ".intervalInMin", interval); yamlConfiguration.set("messages." + key + ".intervalInMin", interval);
yamlConfiguration.set("messages." + key + ".useCronJob.enable", useCronJobEnable); yamlConfiguration.set("messages." + key + ".exactTime.enable", exactTime);
yamlConfiguration.set("messages." + key + ".useCronJob.value", useCronJobValue); yamlConfiguration.set("messages." + key + ".exactTime.timeMinute", timeMinute);
yamlConfiguration.set("messages." + key + ".exactTime.timeHour", timeHour);
yamlConfiguration.set("messages." + key + ".exactTime.timeDayOfMonth", timeDayOfMonth);
yamlConfiguration.set("messages." + key + ".exactTime.timeMonth", timeMonth);
yamlConfiguration.set("messages." + key + ".exactTime.timeDayOfWeek", timeDayOfWeek);
} }
} }

View File

@ -1,15 +1,85 @@
package net.t2code.automatedMessages.messages; package net.t2code.automatedMessages.messages;
import net.t2code.automatedMessages.objects.Message; import net.t2code.automatedMessages.objects.Message;
import net.t2code.automatedMessages.system.Main;
import net.t2code.t2codelib.SPIGOT.api.messages.T2Csend;
import org.bukkit.Bukkit;
public class CronJob{ import java.time.LocalDateTime;
public Message message;
public class CronJob {
private Message message;
private Boolean shutdown = false;
public CronJob(Message message) { public CronJob(Message message) {
this.message=message; this.message = message;
String minuteString = message.timeMinute;
String hourString = message.timeHour;
if (minuteString.contains("*/")) {
timer(Integer.valueOf(minuteString.replace("*/", "")), 60);
return;
}
if (hourString.contains("*/")) {
timer(Integer.valueOf(hourString.replace("*/", "")), 60 * 60);
return;
}
job();
} }
public void execute() { private void job() {
SendMessage.send(message.message); Bukkit.getScheduler().runTaskTimerAsynchronously(Main.getPlugin(), new Runnable() {
@Override
public void run() {
if (shutdown) return;
executeJob();
}
}, 0, 60 * 20L);
}
private void executeJob() {
LocalDateTime dateTime = LocalDateTime.now();
if (check(message.timeMinute, dateTime.getMinute(), "minute")) return;
if (check(message.timeHour, dateTime.getHour(), "h")) return;
if (check(message.timeDayOfMonth, dateTime.getDayOfMonth(), "dom")) return;
if (check(message.timeMonth, dateTime.getMonth().getValue(), "mon")) return;
if (check(message.timeDayOfWeek, dateTime.getDayOfWeek().getValue(), "dow")) return;
SendMessage.send(message);
}
private boolean check(String check, Integer value, String v) {
if (check.equals("*")) return false;
if (check.contains("/")) {
String[] strings = check.split("/");
for (String string : strings) {
if (string.equals("*")) return false;
if (Integer.parseInt(string) == value) return false;
}
return true;
}
try {
if (Integer.parseInt(check) == value) return false;
} catch (Exception ignored) {
}
return true;
}
public void timer(Integer period, Integer value) {
Bukkit.getScheduler().scheduleAsyncRepeatingTask(Main.getPlugin(), new Runnable() {
@Override
public void run() {
if (shutdown) return;
SendMessage.send(message);
}
}, 0, 20L * value * period);
}
public void shutdown() {
this.shutdown = true;
} }
} }

View File

@ -9,15 +9,15 @@ import java.util.Map;
public class Management { public class Management {
private static final List<Timer> timerJobList = new ArrayList<>(); private static final List<Timer> timerJobList = new ArrayList<>();
private static final List<CronJob> cronJobs = new ArrayList<>();
public static void start() { public static void start() {
for (Map.Entry<String, Message> value : FileBuild.getMessageHashMap().entrySet()) { for (Map.Entry<String, Message> value : FileBuild.getMessageHashMap().entrySet()) {
Message message = value.getValue(); Message message = value.getValue();
if (!message.enable) continue; if (!message.enable) continue;
if (message.cronJob) { if (message.exactTime) {
startCronJob(message); CronJob cronJob = new CronJob(message);
cronJobs.add(cronJob);
} else { } else {
Timer job = new Timer(message); Timer job = new Timer(message);
timerJobList.add(job); timerJobList.add(job);
@ -25,37 +25,12 @@ public class Management {
} }
} }
public static void startCronJob(Message message) {
try {
CronJob cronJob = new CronJob(message);
JobDetail job = JobBuilder.newJob(cronJob.getClass())
.withIdentity(message.key, message.key).build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(message.key, message.key)
.withSchedule(CronScheduleBuilder.cronSchedule(message.cronJobString))
//.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
jobList.add(scheduler);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void end() { public static void end() {
for (Timer job : timerJobList) { for (Timer job : timerJobList) {
job.disable = true; job.disable = true;
} }
for (Scheduler scheduler : jobList) { for (CronJob cronJob : cronJobs) {
try { cronJob.shutdown();
scheduler.shutdown();
} catch (SchedulerException e) {
throw new RuntimeException(e);
}
} }
} }
} }

View File

@ -1,15 +1,21 @@
package net.t2code.automatedMessages.messages; package net.t2code.automatedMessages.messages;
import net.t2code.automatedMessages.system.Main; import net.t2code.automatedMessages.config.Config;
import net.t2code.automatedMessages.objects.Message;
import net.t2code.t2codelib.SPIGOT.api.messages.T2Csend; import net.t2code.t2codelib.SPIGOT.api.messages.T2Csend;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class SendMessage { public class SendMessage {
public static void send(String msg){ public static void send(Message message) {
T2Csend.debugmsg(Main.getPlugin(),msg); String timeStamp = new SimpleDateFormat(Config.timeFormat.valueString).format(Calendar.getInstance().getTime());
if (Config.sendConsole.valueBoolean) T2Csend.console(message.message.replace("[time]", timeStamp).replace("[prefix]",Config.prefix.valueString));
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
T2Csend.player(player, msg); T2Csend.player(player, message.message.replace("[time]", timeStamp).replace("[prefix]",Config.prefix.valueString));
player.playSound(player.getLocation(), message.sound, 3, 1);
} }
} }
} }

View File

@ -1,10 +1,14 @@
package net.t2code.automatedMessages.messages; package net.t2code.automatedMessages.messages;
import net.t2code.automatedMessages.config.Config;
import net.t2code.automatedMessages.messages.SendMessage; import net.t2code.automatedMessages.messages.SendMessage;
import net.t2code.automatedMessages.objects.Message; import net.t2code.automatedMessages.objects.Message;
import net.t2code.automatedMessages.system.Main; import net.t2code.automatedMessages.system.Main;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Timer { public class Timer {
public Timer(Message message) { public Timer(Message message) {
@ -12,9 +16,10 @@ public class Timer {
@Override @Override
public void run() { public void run() {
if (disable) return; if (disable) return;
SendMessage.send(message.message); SendMessage.send(message);
} }
}, 0, 20L * 60 * message.interval); }, 0, 20L * 60 * message.interval);
} }
public Boolean disable = false; public Boolean disable = false;
} }

View File

@ -1,5 +1,8 @@
package net.t2code.automatedMessages.objects; package net.t2code.automatedMessages.objects;
import org.bukkit.Sound;
import javax.sound.midi.Soundbank;
import java.util.List; import java.util.List;
public class Message { public class Message {
@ -7,21 +10,42 @@ public class Message {
public String key; public String key;
public Boolean enable; public Boolean enable;
public String message; public String message;
public Boolean soundEnable;
public Sound sound;
public Integer interval; public Integer interval;
public Boolean cronJob; public Boolean exactTime;
public String cronJobString; public String timeMinute;
public String timeHour;
public String timeDayOfMonth;
public String timeMonth;
public String timeDayOfWeek;
public Message(String key, public Message(String key,
Boolean enable, Boolean enable,
String message, String message,
Boolean soundEnable,
Sound sound,
Integer interval, Integer interval,
Boolean cronJob,
String cronJobString) { Boolean exactTime,
String timeMinute,
String timeHour,
String timeDayOfMonth,
String timeMonth,
String timeDayOfWeek) {
this.key = key; this.key = key;
this.enable = enable; this.enable = enable;
this.message = message; this.message = message;
this.soundEnable = soundEnable;
this.sound=sound;
this.interval = interval; this.interval = interval;
this.cronJob = cronJob; this.exactTime = exactTime;
this.cronJobString=cronJobString; this.timeMinute = timeMinute;
this.timeHour = timeHour;
this.timeDayOfMonth = timeDayOfMonth;
this.timeMonth = timeMonth;
this.timeDayOfWeek = timeDayOfWeek;
} }
} }