package Sdf1_login; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.text.SimpleDateFormat; import java.util.*; public class InviteManager { private final Main plugin; public InviteManager(Main plugin) { this.plugin = plugin; } public String generateCode(Player p) { String code = PasswordUtils.generateInviteCode(); plugin.getDb().setField( p.getName(), "invite_code", code); return code; } public void onInviteeCheckIn(String inviteeName) { String invitedBy = (String) plugin.getDb() .getField(inviteeName, "invited_by"); if (invitedBy == null || invitedBy.isEmpty()) return; String month = new SimpleDateFormat("yyyy-MM") .format(new Date()); String lastMonth = (String) plugin.getDb() .getField(invitedBy, "invite_month"); if (!month.equals(lastMonth)) { plugin.getDb().setField( invitedBy, "invite_month", month); plugin.getDb().setField( invitedBy, "monthly_invite_count", 0); } int count = ((Number) plugin.getDb() .getField(invitedBy, "monthly_invite_count")).intValue(); plugin.getDb().setField( invitedBy, "monthly_invite_count", count + 1); double rate = 0.10; if (count + 1 > 15) { rate = 0.60; } else if (count + 1 > 10) { rate = 0.35; } else if (count + 1 > 5) { rate = 0.15; } int bonus = (int) (1 * rate); if (bonus > 0) { plugin.getDb().addPoints(invitedBy, bonus); Player inviterPlayer = Bukkit .getPlayerExact(invitedBy); if (inviterPlayer != null && inviterPlayer.isOnline()) { inviterPlayer.sendMessage( plugin.getConfig2().msg( "invite_referral_bonus", "points", String.valueOf(bonus))); } } } public List> getAllInviteData() { List> result = new ArrayList<>(); for (Map user : plugin.getDb().getAllUsers()) { String code = (String) user.getOrDefault( "invite_code", ""); if (!code.isEmpty()) { Map row = new LinkedHashMap<>(); row.put("player", user.get("player_name")); row.put("code", code); row.put("monthly", user.getOrDefault( "monthly_invite_count", 0)); result.add(row); } } return result; } }