Upload folder via GUI - src
This commit is contained in:
@@ -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; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user