92 lines
3.0 KiB
Plaintext
92 lines
3.0 KiB
Plaintext
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<Map<String, Object>> getAllInviteData() {
|
|
List<Map<String, Object>> result = new ArrayList<>();
|
|
for (Map<String, Object> user
|
|
: plugin.getDb().getAllUsers()) {
|
|
String code = (String) user.getOrDefault(
|
|
"invite_code", "");
|
|
if (!code.isEmpty()) {
|
|
Map<String, Object> 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;
|
|
}
|
|
}
|