Upload folder via GUI - src

This commit is contained in:
Git Manager GUI
2026-04-13 14:12:41 +02:00
parent 87f80d30c5
commit ad267b6290
9 changed files with 884 additions and 428 deletions

View File

@@ -6,6 +6,7 @@ import dev.viper.eventengine.events.builtin.IEventHandler;
import dev.viper.eventengine.model.ActiveEvent;
import dev.viper.eventengine.model.EventDefinition;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
@@ -14,7 +15,7 @@ import java.util.logging.Logger;
/**
* Steuert den Lebenszyklus von Events:
* start → announce → run → end → reward
* start → announce → countdown → run → end → reward
*/
public class EventManager {
@@ -39,9 +40,7 @@ public class EventManager {
return false;
}
currentEvent = new ActiveEvent(def);
currentEvent.setState(ActiveEvent.State.RUNNING);
// Ankündigung
broadcast(def.getAnnouncement());
if (def.getDurationSeconds() > 0)
broadcast(plugin.prefix() + "§7Dauer: §e" + formatTime(def.getDurationSeconds()));
@@ -51,12 +50,65 @@ public class EventManager {
log.info("Event gestartet von " + by + ": " + def.getDisplayName());
}
// 3..2..1..Go Countdown, danach eigentlicher Start
int countdown = plugin.getConfigManager().getCountdownSeconds();
if (countdown > 0) {
currentEvent = new ActiveEvent(def);
currentEvent.setState(ActiveEvent.State.WAITING);
runCountdown(def, initiator, countdown);
} else {
launchEvent(def, initiator);
}
return true;
}
/** Countdown-Loop: 3..2..1..Go */
private void runCountdown(EventDefinition def, Player initiator, int seconds) {
final ActiveEvent snap = currentEvent;
new BukkitRunnable() {
int remaining = seconds;
@Override
public void run() {
if (snap != currentEvent) { cancel(); return; } // abgebrochen
if (remaining > 0) {
// Titel + Sound für alle Online-Spieler
String color = remaining <= 3 ? "§c" : "§e";
for (Player p : Bukkit.getOnlinePlayers()) {
p.sendTitle(color + remaining, "§7" + def.getDisplayName() + " §7startet gleich!", 0, 25, 5);
p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_HAT, 1f, 1f);
}
broadcast(plugin.prefix() + "§e⏳ " + def.getDisplayName() + " §7startet in §c" + remaining + " §7Sekunde" + (remaining == 1 ? "" : "n") + "...");
remaining--;
} else {
cancel();
for (Player p : Bukkit.getOnlinePlayers()) {
p.sendTitle("§a§lGO!", "§7" + def.getDisplayName(), 0, 30, 10);
p.playSound(p.getLocation(), Sound.ENTITY_FIREWORK_ROCKET_LARGE_BLAST, 1f, 1.2f);
}
broadcast(plugin.prefix() + "§a§l🚀 GO! §r§e" + def.getDisplayName() + " §7hat begonnen!");
launchEvent(def, initiator);
}
}
}.runTaskTimer(plugin, 0L, 20L);
}
/** Eigentlicher Event-Start nach dem Countdown */
private void launchEvent(EventDefinition def, Player initiator) {
if (currentEvent == null || currentEvent.getState() == ActiveEvent.State.ENDED) {
currentEvent = new ActiveEvent(def);
}
currentEvent.setState(ActiveEvent.State.RUNNING);
runCommands(def.getStartCommands(), null);
handlerRegistry.get(def.getType()).ifPresent(h -> h.onStart(currentEvent));
plugin.getScoreboardManager().start(currentEvent);
if (def.getDurationSeconds() > 0) {
final ActiveEvent snap = currentEvent;
if (def.getDurationSeconds() > 70)
new BukkitRunnable() { @Override public void run() {
if (currentEvent == snap && currentEvent.getState() == ActiveEvent.State.RUNNING)
@@ -75,7 +127,6 @@ public class EventManager {
}}.runTaskLater(plugin, def.getDurationSeconds() * 20L).getTaskId();
currentEvent.setTaskId(taskId);
}
return true;
}
public boolean endEvent(String reason) {
@@ -112,7 +163,24 @@ public class EventManager {
if (currentEvent == null || currentEvent.getState() == ActiveEvent.State.ENDED) return false;
if (winner != null) {
currentEvent.setWinner(winner.getUniqueId());
broadcast(plugin.prefix() + "§6🏁 " + winner.getName() + " §ehat das Ziel erreicht und gewinnt!");
// Ziel-Nachricht mit Zeit
long elapsed = currentEvent.getElapsedSeconds();
broadcast(plugin.prefix() + "§6🏁 §f" + winner.getName()
+ " §ehat das Ziel erreicht und gewinnt! §8(Zeit: §f" + formatTime((int) elapsed) + "§8)");
// Title für Gewinner
winner.sendTitle("§6§l🏁 ZIEL!", "§e" + currentEvent.getDefinition().getDisplayName(), 0, 60, 20);
winner.playSound(winner.getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 1f, 1f);
// Title für alle anderen
for (UUID uuid : currentEvent.getParticipants()) {
Player p = Bukkit.getPlayer(uuid);
if (p != null && !p.equals(winner)) {
p.sendTitle("§c§lZU SPÄT!", "§7" + winner.getName() + " §7war schneller.", 0, 40, 15);
}
}
distributeWinnerRewards(currentEvent.getDefinition(), winner);
}
return endEvent(reason);
@@ -175,7 +243,7 @@ public class EventManager {
}
}
private void distributeWinnerRewards(EventDefinition def, Player winner) {
public void distributeWinnerRewards(EventDefinition def, Player winner) {
if (def.getWinnerRewards().isEmpty() || winner == null) return;
runCommands(def.getWinnerRewards(), winner);
}
@@ -204,4 +272,4 @@ public class EventManager {
public ActiveEvent getCurrentEvent() { return currentEvent; }
public boolean isRunning() { return currentEvent != null && currentEvent.getState() == ActiveEvent.State.RUNNING; }
public EventHandlerRegistry getHandlerRegistry() { return handlerRegistry; }
}
}