Files
Sdf1_login/txt/CheckInManager.txt
T

105 lines
3.7 KiB
Plaintext

package Sdf1_login;
import org.bukkit.entity.Player;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CheckInManager {
private final Main plugin;
public CheckInManager(Main plugin) {
this.plugin = plugin;
}
public boolean isCheckedInToday(String name) {
String last = (String) plugin.getDb()
.getField(name, "last_checkin_date");
String today = new SimpleDateFormat("yyyy-MM-dd")
.format(new Date());
return today.equals(last);
}
public String checkIn(Player p) {
String name = p.getName();
if (isCheckedInToday(name)) {
return plugin.getConfig2().msg("checkin_already");
}
int streak = ((Number) plugin.getDb()
.getField(name, "checkin_streak")).intValue();
String lastDate = (String) plugin.getDb()
.getField(name, "last_checkin_date");
String today = new SimpleDateFormat("yyyy-MM-dd")
.format(new Date());
// 检查是否连续
if (lastDate != null && !lastDate.isEmpty()) {
try {
java.util.Date lastD = new SimpleDateFormat(
"yyyy-MM-dd").parse(lastDate);
java.util.Date todayD = new SimpleDateFormat(
"yyyy-MM-dd").parse(today);
long diff = todayD.getTime() - lastD.getTime();
if (diff > 86400000L * 2) {
streak = 0; // 断签
} else if (diff > 86400000L) {
streak++; // 连续
}
} catch (Exception ignored) {}
}
if (streak == 0) streak = 1;
else streak++;
double multi = 1.0;
if (streak >= 21) multi = 1.5;
else if (streak >= 14) multi = 1.3;
else if (streak >= 7) multi = 1.1;
int points = (int) (1 * multi);
plugin.getDb().addPoints(name, points);
plugin.getDb().setField(
name, "checkin_streak", streak);
plugin.getDb().setField(
name, "last_checkin_date", today);
int total = ((Number) plugin.getDb()
.getField(name, "total_checkin_days"))
.intValue();
plugin.getDb().setField(
name, "total_checkin_days", total + 1);
return plugin.getConfig2().msg("checkin_success",
"points", String.valueOf(points),
"streak", String.valueOf(streak),
"multi", String.valueOf(multi));
}
public String backCheckIn(Player p, String dateStr) {
String name = p.getName();
if (!plugin.getDb().deductPoints(name, 10)) {
return plugin.getConfig2().msg("backcheckin_no_point");
}
try {
java.util.Date target = new SimpleDateFormat(
"yyyy-MM-dd").parse(dateStr);
java.util.Date now = new SimpleDateFormat(
"yyyy-MM-dd").parse(
new SimpleDateFormat("yyyy-MM-dd")
.format(new Date()));
long diff = now.getTime() - target.getTime();
if (diff < 0 || diff > 3 * 86400000L) {
plugin.getDb().addPoints(name, 10); // 退还
return plugin.getConfig2().msg(
"backcheckin_expired");
}
plugin.getDb().addPoints(name, 1); // 补签也给1分
return plugin.getConfig2().msg("backcheckin_success");
} catch (Exception e) {
plugin.getDb().addPoints(name, 10);
return "§c[Sdf1_login] §f日期格式错误,请用 yyyy-MM-dd";
}
}
}