This commit is contained in:
Izzel_Aliz
2018-05-09 13:11:59 +08:00
129 changed files with 7406 additions and 4399 deletions

View File

@@ -1,170 +1,159 @@
package me.skymc.taboolib.timecycle;
import com.ilummc.tlib.resources.TLocale;
import me.skymc.taboolib.Main;
import me.skymc.taboolib.database.GlobalDataManager;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.Collection;
import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitRunnable;
import me.skymc.taboolib.Main;
import me.skymc.taboolib.database.GlobalDataManager;
import me.skymc.taboolib.message.MsgUtils;
public class TimeCycleManager {
/**
* 最后一次更新: 2018年1月16日21:07:49
*
* @author sky
*/
private static ConcurrentHashMap<String, TimeCycle> cycles = new ConcurrentHashMap<>();
/**
* 获取周期管理器
*
* @param name
* @return
*/
public static TimeCycle getTimeCycle(String name) {
return cycles.get(name);
}
/**
* 获取所有周期管理器
*
* @return
*/
public static Collection<TimeCycle> getTimeCycles() {
return cycles.values();
}
/**
* 彻底删除周期数据
*
* @param name
*/
public static void deleteCycleData(String name) {
HashMap<String, String> map = GlobalDataManager.getVariables();
for (String _name : map.keySet()) {
if (_name.startsWith("timecycle")) {
GlobalDataManager.setVariable(name, null);
}
}
}
/**
* 注册周期管理器
*
* @param cycle
*/
public static void register(TimeCycle cycle) {
if (!cycles.containsKey(cycle.getName())) {
cycles.put(cycle.getName(), cycle);
}
else {
MsgUtils.warn("注册周期管理器 §8" + cycle.getName() + "§c 失败, 原因: &4名称重复");
}
}
/**
* 注销周期管理器
*
* @param name
* @return
*/
public static TimeCycle cancel(String name) {
return cycles.remove(name);
}
/**
* 注销插件所有周期管理器
*
* @param plugin
*/
public static void cancel(Plugin plugin) {
cycles.values().forEach(x -> {
if (x.getPlugin().equals(plugin)) {
cycles.remove(x.getName());
}
});
}
/**
* 设置上一次更新事件
*
* @param name
* @param time
*/
public static boolean setTimeline(String name, Long time) {
if (cycles.containsKey(name)) {
GlobalDataManager.setVariable("timecycle:" + name, time.toString());
return true;
}
return false;
}
/**
* 获取下一次刷新时间
*
* @param name
* @return
*/
public static long getAfterTimeline(String name) {
if (cycles.containsKey(name)) {
Long value = Long.valueOf(GlobalDataManager.getVariable("timecycle:" + name, "0"));
return value + cycles.get(name).getCycle();
}
return 0L;
}
/**
* 获取上一次刷新时间
*
* @param name
* @return
*/
public static long getBeforeTimeline(String name) {
if (cycles.containsKey(name)) {
return Long.valueOf(GlobalDataManager.getVariable("timecycle:" + name, "0"));
}
return 0L;
}
public static void load() {
// 注册调度器
new BukkitRunnable() {
@Override
public void run() {
for (TimeCycle cycle : cycles.values()) {
// 调度器没有被执行过
if (!GlobalDataManager.contains("timecycle:" + cycle.getName())) {
long time = new TimeCycleInitializeEvent(cycle, System.currentTimeMillis()).call().getTimeline();
// 初始化
GlobalDataManager.setVariable("timecycle:" + cycle.getName(), String.valueOf(time));
// 触发器
Bukkit.getPluginManager().callEvent(new TimeCycleEvent(cycle));
}
// 如果超出刷新时间
else if (System.currentTimeMillis() >= getAfterTimeline(cycle.getName())) {
long time = System.currentTimeMillis();
// 如果时间差大于 30 秒
if (time - getAfterTimeline(cycle.getName()) > 30000) {
// 初始化
time = new TimeCycleInitializeEvent(cycle, time).call().getTimeline();
}
// 重置
GlobalDataManager.setVariable("timecycle:" + cycle.getName(), String.valueOf(time));
// 触发器
Bukkit.getPluginManager().callEvent(new TimeCycleEvent(cycle));
}
}
}
}.runTaskTimerAsynchronously(Main.getInst(), 0, 20);
}
/**
* 最后一次更新: 2018年1月16日21:07:49
*
* @author sky
*/
private static ConcurrentHashMap<String, TimeCycle> cycles = new ConcurrentHashMap<>();
/**
* 获取周期管理器
*
* @param name
* @return
*/
public static TimeCycle getTimeCycle(String name) {
return cycles.get(name);
}
/**
* 获取所有周期管理器
*
* @return
*/
public static Collection<TimeCycle> getTimeCycles() {
return cycles.values();
}
/**
* 彻底删除周期数据
*
* @param name
*/
public static void deleteCycleData(String name) {
HashMap<String, String> map = GlobalDataManager.getVariables();
map.keySet().stream().filter(_name -> _name.startsWith("timecycle")).forEach(_name -> GlobalDataManager.setVariable(name, null));
}
/**
* 注册周期管理器
*
* @param cycle
*/
public static void register(TimeCycle cycle) {
if (!cycles.containsKey(cycle.getName())) {
cycles.put(cycle.getName(), cycle);
} else {
TLocale.Logger.error("TIMECYCLE.FALL-CYCLE-EXISTS", cycle.getName());
}
}
/**
* 注销周期管理器
*
* @param name
* @return
*/
public static TimeCycle cancel(String name) {
return cycles.remove(name);
}
/**
* 注销插件所有周期管理器
*
* @param plugin
*/
public static void cancel(Plugin plugin) {
cycles.values().stream().filter(x -> x.getPlugin().equals(plugin)).forEach(x -> cycles.remove(x.getName()));
}
/**
* 设置上一次更新事件
*
* @param name
* @param time
*/
public static boolean setTimeline(String name, Long time) {
if (cycles.containsKey(name)) {
GlobalDataManager.setVariable("timecycle:" + name, time.toString());
return true;
}
return false;
}
/**
* 获取下一次刷新时间
*
* @param name
* @return
*/
public static long getAfterTimeline(String name) {
if (cycles.containsKey(name)) {
Long value = Long.valueOf(GlobalDataManager.getVariable("timecycle:" + name, "0"));
return value + cycles.get(name).getCycle();
}
return 0L;
}
/**
* 获取上一次刷新时间
*
* @param name
* @return
*/
public static long getBeforeTimeline(String name) {
if (cycles.containsKey(name)) {
return Long.valueOf(GlobalDataManager.getVariable("timecycle:" + name, "0"));
}
return 0L;
}
public static void load() {
// 注册调度器
new BukkitRunnable() {
@Override
public void run() {
for (TimeCycle cycle : cycles.values()) {
// 调度器没有被执行过
if (!GlobalDataManager.contains("timecycle:" + cycle.getName())) {
long time = new TimeCycleInitializeEvent(cycle, System.currentTimeMillis()).call().getTimeline();
// 初始化
GlobalDataManager.setVariable("timecycle:" + cycle.getName(), String.valueOf(time));
// 触发器
Bukkit.getPluginManager().callEvent(new TimeCycleEvent(cycle));
}
// 如果超出刷新时间
else if (System.currentTimeMillis() >= getAfterTimeline(cycle.getName())) {
long time = System.currentTimeMillis();
// 如果时间差大于 30 秒
if (time - getAfterTimeline(cycle.getName()) > 30000) {
// 初始化
time = new TimeCycleInitializeEvent(cycle, time).call().getTimeline();
}
// 重置
GlobalDataManager.setVariable("timecycle:" + cycle.getName(), String.valueOf(time));
// 触发器
Bukkit.getPluginManager().callEvent(new TimeCycleEvent(cycle));
}
}
}
}.runTaskTimerAsynchronously(Main.getInst(), 0, 20);
}
}