Upload folder via GUI - src
This commit is contained in:
@@ -957,11 +957,23 @@ public class IngameShopSpigot extends JavaPlugin implements Listener {
|
|||||||
anyCode = true;
|
anyCode = true;
|
||||||
|
|
||||||
} else if ("fly_abo".equals(type)) {
|
} else if ("fly_abo".equals(type)) {
|
||||||
// Fly-Abo: monatliche Abbuchung, Preis des Shop-Artikels = Monatsbeitrag
|
// Fly-Abo: monatliche Abbuchung
|
||||||
String label = cmdObj.has("label")
|
String label = cmdObj.has("label")
|
||||||
? cmdObj.get("label").getAsString() : "Fly-Abo";
|
? cmdObj.get("label").getAsString() : "Fly-Abo";
|
||||||
int monthlyPrice = (int) data.price;
|
int monthlyPrice = cmdObj.has("price") && cmdObj.get("price").getAsInt() > 0
|
||||||
flyAboManager.grantAbo(player, label, monthlyPrice);
|
? cmdObj.get("price").getAsInt()
|
||||||
|
: (int) data.price;
|
||||||
|
// Sicherer Spielername: getName() kann bei CMI leer sein → UUID-Lookup
|
||||||
|
String safeName = player.getName();
|
||||||
|
if (safeName == null || safeName.isEmpty()) {
|
||||||
|
org.bukkit.OfflinePlayer op = Bukkit.getOfflinePlayer(player.getUniqueId());
|
||||||
|
safeName = op.getName() != null ? op.getName() : player.getUniqueId().toString();
|
||||||
|
}
|
||||||
|
final String finalName = safeName;
|
||||||
|
getLogger().info("[FlyAbo] Abo aktiviert für " + finalName + " – " + label);
|
||||||
|
flyAboManager.grantAboByName(finalName, label, monthlyPrice);
|
||||||
|
// Ingame-Nachricht direkt an den Spieler
|
||||||
|
flyAboManager.notifyGranted(player, label, monthlyPrice);
|
||||||
anyCode = true;
|
anyCode = true;
|
||||||
|
|
||||||
} else if ("plot_slots".equals(type)) {
|
} else if ("plot_slots".equals(type)) {
|
||||||
@@ -2599,8 +2611,15 @@ public class IngameShopSpigot extends JavaPlugin implements Listener {
|
|||||||
String[] migrations = {
|
String[] migrations = {
|
||||||
"ALTER TABLE wis_fly_abos ADD COLUMN IF NOT EXISTS monthly_price INT NOT NULL DEFAULT 0 AFTER label",
|
"ALTER TABLE wis_fly_abos ADD COLUMN IF NOT EXISTS monthly_price INT NOT NULL DEFAULT 0 AFTER label",
|
||||||
"ALTER TABLE wis_fly_abos ADD COLUMN IF NOT EXISTS cancellation_reason VARCHAR(32) DEFAULT NULL AFTER cancelled",
|
"ALTER TABLE wis_fly_abos ADD COLUMN IF NOT EXISTS cancellation_reason VARCHAR(32) DEFAULT NULL AFTER cancelled",
|
||||||
|
// expires_at Spalte entfernen falls vorhanden (altes Schema – verhindert INSERT)
|
||||||
|
"ALTER TABLE wis_fly_abos DROP COLUMN IF EXISTS expires_at",
|
||||||
"ALTER TABLE wis_fly_abos ADD COLUMN IF NOT EXISTS next_billing_date DATE NOT NULL DEFAULT (CURDATE()) AFTER cancellation_reason",
|
"ALTER TABLE wis_fly_abos ADD COLUMN IF NOT EXISTS next_billing_date DATE NOT NULL DEFAULT (CURDATE()) AFTER cancellation_reason",
|
||||||
"ALTER TABLE wis_fly_abos ADD COLUMN IF NOT EXISTS period_end DATE NOT NULL DEFAULT (LAST_DAY(CURDATE())) AFTER next_billing_date",
|
"ALTER TABLE wis_fly_abos ADD COLUMN IF NOT EXISTS period_end DATE NOT NULL DEFAULT (LAST_DAY(CURDATE())) AFTER next_billing_date",
|
||||||
|
// Alte Einträge mit period_end = 0000-00-00 reparieren
|
||||||
|
"UPDATE wis_fly_abos SET"
|
||||||
|
+ " period_end = LAST_DAY(CURDATE()),"
|
||||||
|
+ " next_billing_date = DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01')"
|
||||||
|
+ " WHERE period_end = '0000-00-00' OR period_end IS NULL OR period_end < '2020-01-01'",
|
||||||
};
|
};
|
||||||
String sqlUsage =
|
String sqlUsage =
|
||||||
"CREATE TABLE IF NOT EXISTS wis_fly_abo_usage ("
|
"CREATE TABLE IF NOT EXISTS wis_fly_abo_usage ("
|
||||||
@@ -3694,6 +3713,22 @@ public class IngameShopSpigot extends JavaPlugin implements Listener {
|
|||||||
db.saveAbo(playerName, label, monthlyPrice);
|
db.saveAbo(playerName, label, monthlyPrice);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void notifyGranted(Player player, String label, int monthlyPrice) {
|
||||||
|
Bukkit.getScheduler().runTask(plugin, () -> {
|
||||||
|
player.sendMessage("");
|
||||||
|
player.sendMessage(ChatColor.GOLD + "✈ ════════════════════════════");
|
||||||
|
player.sendMessage(ChatColor.YELLOW + " Fly-Abo aktiviert!");
|
||||||
|
player.sendMessage(ChatColor.GRAY + " Paket: " + ChatColor.WHITE + label);
|
||||||
|
player.sendMessage(ChatColor.GRAY + " Monatspreis: " + ChatColor.WHITE + monthlyPrice + " " + currency);
|
||||||
|
player.sendMessage(ChatColor.GRAY + " Tägl. Limit: " + ChatColor.WHITE
|
||||||
|
+ flyManager.formatTime(flyAboMaxDailySec));
|
||||||
|
player.sendMessage(ChatColor.GRAY + " Status: " + ChatColor.WHITE + "/flyabo");
|
||||||
|
player.sendMessage(ChatColor.GOLD + " ════════════════════════════");
|
||||||
|
player.sendMessage("");
|
||||||
|
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1.0F, 1.2F);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// ── Kündigung durch Spieler ────────────────────────────────────
|
// ── Kündigung durch Spieler ────────────────────────────────────
|
||||||
|
|
||||||
boolean cancelAbo(String playerName) {
|
boolean cancelAbo(String playerName) {
|
||||||
|
|||||||
Reference in New Issue
Block a user