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"; } } }