Upload folder via GUI - src
This commit is contained in:
@@ -199,6 +199,7 @@ public class IngameShopSpigot extends JavaPlugin implements Listener {
|
|||||||
getCommand("plotabocancel").setExecutor(new PlotAboCancelCommand());
|
getCommand("plotabocancel").setExecutor(new PlotAboCancelCommand());
|
||||||
getCommand("plotabogive").setExecutor(new PlotAboGiveCommand());
|
getCommand("plotabogive").setExecutor(new PlotAboGiveCommand());
|
||||||
getCommand("plotslotsgive").setExecutor(new PlotSlotsGiveCommand());
|
getCommand("plotslotsgive").setExecutor(new PlotSlotsGiveCommand());
|
||||||
|
getCommand("abo").setExecutor(new AboOverviewCommand());
|
||||||
getCommand("sell").setExecutor(new SellCommand());
|
getCommand("sell").setExecutor(new SellCommand());
|
||||||
getCommand("wpis").setExecutor(new ReloadCommand());
|
getCommand("wpis").setExecutor(new ReloadCommand());
|
||||||
|
|
||||||
@@ -1364,6 +1365,121 @@ public class IngameShopSpigot extends JavaPlugin implements Listener {
|
|||||||
// ===========================================================
|
// ===========================================================
|
||||||
|
|
||||||
/** /flyabo – Abo-Status anzeigen */
|
/** /flyabo – Abo-Status anzeigen */
|
||||||
|
// ===========================================================
|
||||||
|
// /abo – ÜBERSICHT ALLER LAUFENDEN ABOS
|
||||||
|
// ===========================================================
|
||||||
|
|
||||||
|
private class AboOverviewCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command,
|
||||||
|
String label, String[] args) {
|
||||||
|
if (!(sender instanceof Player)) { sender.sendMessage("Nur für Spieler."); return true; }
|
||||||
|
Player p = (Player) sender;
|
||||||
|
|
||||||
|
new BukkitRunnable() {
|
||||||
|
@Override public void run() {
|
||||||
|
// Alle Daten async laden
|
||||||
|
FlyAboManager.AboEntry flyAbo = flyAboManager.getActiveAbo(p.getName());
|
||||||
|
PlotSlotManager.PlotAboEntry plotAbo = plotSlotManager.getActiveAbo(p.getName());
|
||||||
|
int flyUsedSec = flyAboManager.getUsedTodaySec(p.getName());
|
||||||
|
int plotBase = plotSlotManager.getRankBaseByName(p.getName());
|
||||||
|
int plotExtra = plotSlotManager.getExtraSlots(p.getName());
|
||||||
|
int plotAboSlots= plotSlotManager.getAboSlots(p.getName());
|
||||||
|
int plotTotal = plotBase + plotExtra + plotAboSlots;
|
||||||
|
|
||||||
|
Bukkit.getScheduler().runTask(IngameShopSpigot.this, () -> {
|
||||||
|
String line = ChatColor.GOLD + "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━";
|
||||||
|
|
||||||
|
p.sendMessage("");
|
||||||
|
p.sendMessage(line);
|
||||||
|
p.sendMessage(ChatColor.YELLOW + "" + ChatColor.BOLD + " 📋 Meine Abonnements");
|
||||||
|
p.sendMessage(line);
|
||||||
|
|
||||||
|
boolean hasAny = false;
|
||||||
|
|
||||||
|
// ── Fly-Abo ──────────────────────────────────────────
|
||||||
|
if (flyAbo != null) {
|
||||||
|
hasAny = true;
|
||||||
|
boolean cancelled = flyAbo.cancelled;
|
||||||
|
boolean payFail = "payment_failed".equals(flyAbo.cancellationReason);
|
||||||
|
|
||||||
|
p.sendMessage("");
|
||||||
|
p.sendMessage(ChatColor.AQUA + "" + ChatColor.BOLD + " ✈ Fly-Abo");
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ┌ Paket: " + ChatColor.WHITE + flyAbo.label);
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ├ Preis: " + ChatColor.WHITE + flyAbo.monthlyPrice + " " + currency + " / Monat");
|
||||||
|
|
||||||
|
if (cancelled) {
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ├ Status: " + ChatColor.RED
|
||||||
|
+ "⚠ Gekündigt" + (payFail ? " (Zahlung fehlgeschlagen)" : " (durch dich)"));
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ├ Endet am: " + ChatColor.YELLOW + flyAbo.periodEnd);
|
||||||
|
} else {
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ├ Status: " + ChatColor.GREEN + "✔ Aktiv");
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ├ Aktiv bis: " + ChatColor.WHITE + flyAbo.periodEnd);
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ├ Nächste Abbuchung: " + ChatColor.WHITE + flyAbo.nextBillingDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
int remSec = Math.max(0, flyAboMaxDailySec - flyUsedSec);
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ├ Heute: "
|
||||||
|
+ ChatColor.WHITE + flyManager.formatTime(flyUsedSec)
|
||||||
|
+ ChatColor.GRAY + " / " + ChatColor.WHITE + flyManager.formatTime(flyAboMaxDailySec)
|
||||||
|
+ ChatColor.GRAY + " (noch: "
|
||||||
|
+ (remSec > 0 ? ChatColor.GREEN : ChatColor.RED) + flyManager.formatTime(remSec) + ChatColor.GRAY + ")");
|
||||||
|
|
||||||
|
if (!cancelled)
|
||||||
|
p.sendMessage(ChatColor.GRAY + " └ Kündigen: " + ChatColor.WHITE + "/flyabocancel confirm");
|
||||||
|
else
|
||||||
|
p.sendMessage(ChatColor.GRAY + " └ Erneuern: " + ChatColor.AQUA + "viper-network.de");
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Plot-Abo ──────────────────────────────────────────
|
||||||
|
if (plotAbo != null) {
|
||||||
|
hasAny = true;
|
||||||
|
boolean cancelled = plotAbo.cancelled;
|
||||||
|
boolean payFail = "payment_failed".equals(plotAbo.cancellationReason);
|
||||||
|
|
||||||
|
p.sendMessage("");
|
||||||
|
p.sendMessage(ChatColor.AQUA + "" + ChatColor.BOLD + " 📦 Plot-Abo");
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ┌ Paket: " + ChatColor.WHITE + plotAbo.label);
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ├ Slots: " + ChatColor.WHITE + "+" + plotAbo.aboSlots + " Plot-Slots");
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ├ Preis: " + ChatColor.WHITE + plotAbo.monthlyPrice + " " + currency + " / Monat");
|
||||||
|
|
||||||
|
if (cancelled) {
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ├ Status: " + ChatColor.RED
|
||||||
|
+ "⚠ Gekündigt" + (payFail ? " (Zahlung fehlgeschlagen)" : " (durch dich)"));
|
||||||
|
p.sendMessage(ChatColor.GRAY + " └ Endet am: " + ChatColor.YELLOW + plotAbo.periodEnd);
|
||||||
|
} else {
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ├ Status: " + ChatColor.GREEN + "✔ Aktiv");
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ├ Aktiv bis: " + ChatColor.WHITE + plotAbo.periodEnd);
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ├ Nächste Abbuchung: " + ChatColor.WHITE + plotAbo.nextBillingDate);
|
||||||
|
p.sendMessage(ChatColor.GRAY + " └ Kündigen: " + ChatColor.WHITE + "/plotabocancel confirm");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Plot-Slots Übersicht (immer anzeigen) ─────────────
|
||||||
|
p.sendMessage("");
|
||||||
|
p.sendMessage(ChatColor.AQUA + "" + ChatColor.BOLD + " 📦 Plot-Slots");
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ┌ Rang-Basis: " + ChatColor.WHITE + plotBase);
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ├ Einmalig: " + ChatColor.WHITE + (plotExtra > 0 ? "+" + plotExtra : "0"));
|
||||||
|
p.sendMessage(ChatColor.GRAY + " ├ Abo: " + ChatColor.WHITE + (plotAboSlots > 0 ? "+" + plotAboSlots : "0"));
|
||||||
|
p.sendMessage(ChatColor.GRAY + " └ Gesamt: " + ChatColor.GREEN + "" + ChatColor.BOLD + plotTotal + " Slots");
|
||||||
|
|
||||||
|
// ── Kein Abo ──────────────────────────────────────────
|
||||||
|
if (!hasAny) {
|
||||||
|
p.sendMessage("");
|
||||||
|
p.sendMessage(ChatColor.GRAY + " Du hast derzeit keine aktiven Abonnements.");
|
||||||
|
p.sendMessage(ChatColor.GRAY + " Im Shop erhältlich: " + ChatColor.AQUA + "viper-network.de");
|
||||||
|
}
|
||||||
|
|
||||||
|
p.sendMessage("");
|
||||||
|
p.sendMessage(line);
|
||||||
|
p.sendMessage("");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}.runTaskAsynchronously(IngameShopSpigot.this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private class FlyAboCommand implements CommandExecutor {
|
private class FlyAboCommand implements CommandExecutor {
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command,
|
public boolean onCommand(CommandSender sender, Command command,
|
||||||
|
|||||||
@@ -43,6 +43,10 @@ commands:
|
|||||||
description: IngameShop Admin-Befehle
|
description: IngameShop Admin-Befehle
|
||||||
usage: /wpis <reload>
|
usage: /wpis <reload>
|
||||||
permission: ingameshop.reload
|
permission: ingameshop.reload
|
||||||
|
abo:
|
||||||
|
description: Zeigt eine Übersicht aller deiner laufenden Abonnements
|
||||||
|
usage: /abo
|
||||||
|
permission: ingameshop.abo
|
||||||
flyabo:
|
flyabo:
|
||||||
description: Zeigt deinen Fly-Abo Status und heutiges Tageslimit
|
description: Zeigt deinen Fly-Abo Status und heutiges Tageslimit
|
||||||
usage: /flyabo
|
usage: /flyabo
|
||||||
@@ -104,6 +108,9 @@ permissions:
|
|||||||
ingameshop.reload:
|
ingameshop.reload:
|
||||||
description: Kann die IngameShop-Config live neu laden
|
description: Kann die IngameShop-Config live neu laden
|
||||||
default: op
|
default: op
|
||||||
|
ingameshop.abo:
|
||||||
|
description: Kann eigene Abo-Übersicht einsehen
|
||||||
|
default: true
|
||||||
ingameshop.flyabo:
|
ingameshop.flyabo:
|
||||||
description: Kann eigenen Fly-Abo-Status einsehen
|
description: Kann eigenen Fly-Abo-Status einsehen
|
||||||
default: true
|
default: true
|
||||||
|
|||||||
Reference in New Issue
Block a user