Files
EventEngine/src/main/java/dev/viper/eventengine/command/RegionSetupManager.java
2026-04-08 02:42:04 +02:00

228 lines
12 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package dev.viper.eventengine.command;
import dev.viper.eventengine.EventEngine;
import dev.viper.eventengine.model.EventDefinition;
import dev.viper.eventengine.model.EventRegion;
import org.bukkit.entity.Player;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* Stellt Pos1/Pos2-Auswahl für Event-Regionen bereit.
* Eingebaut in EventCommand via sub-commands:
*
* /event region pos1 <id> → Pos1 auf Spieler-Position setzen
* /event region pos2 <id> → Pos2 setzen + Region speichern
* /event region clear <id> → Region entfernen
* /event region info <id> → Region anzeigen
*/
public class RegionSetupManager {
private final EventEngine plugin;
// Temporäre Pos1-Speicher pro Spieler: UUID → [eventId, Location]
private final Map<UUID, Object[]> pos1Selection = new HashMap<>();
private final Map<UUID, Object[]> startPos1Selection = new HashMap<>();
private final Map<UUID, Object[]> goalPos1Selection = new HashMap<>();
public RegionSetupManager(EventEngine plugin) {
this.plugin = plugin;
}
public void handlePos1(Player player, String eventId) {
EventDefinition def = plugin.getEventRegistry().get(eventId).orElse(null);
if (def == null) { player.sendMessage(plugin.prefix() + "§cEvent nicht gefunden: §f" + eventId); return; }
pos1Selection.put(player.getUniqueId(), new Object[]{eventId, player.getLocation().clone()});
player.sendMessage(plugin.prefix() + "§aPos1 gesetzt: §f" + formatLoc(player));
player.sendMessage(plugin.prefix() + "§7Jetzt: §f/event region pos2 " + eventId);
}
public void handlePos2(Player player, String eventId) {
EventDefinition def = plugin.getEventRegistry().get(eventId).orElse(null);
if (def == null) { player.sendMessage(plugin.prefix() + "§cEvent nicht gefunden: §f" + eventId); return; }
Object[] sel = pos1Selection.get(player.getUniqueId());
if (sel == null || !sel[0].equals(eventId)) {
player.sendMessage(plugin.prefix() + "§cZuerst Pos1 setzen: §f/event region pos1 " + eventId);
return;
}
org.bukkit.Location pos1 = (org.bukkit.Location) sel[1];
org.bukkit.Location pos2 = player.getLocation().clone();
if (!pos1.getWorld().equals(pos2.getWorld())) {
player.sendMessage(plugin.prefix() + "§cBeide Positionen müssen in der gleichen Welt sein!");
return;
}
EventRegion region = new EventRegion(pos1, pos2);
def.setRegion(region);
// Custom Events direkt speichern; builtin: in memory (gilt bis Reload)
if (def.isCustom()) plugin.getConfigManager().saveCustomEvent(def);
pos1Selection.remove(player.getUniqueId());
player.sendMessage(plugin.prefix() + "§a✔ Region gesetzt für §e" + def.getDisplayName() + "§a:");
player.sendMessage("§7 Welt: §f" + region.getWorldName());
player.sendMessage("§7 Von: §f" + region.getMinX() + ", " + region.getMinY() + ", " + region.getMinZ());
player.sendMessage("§7 Bis: §f" + region.getMaxX() + ", " + region.getMaxY() + ", " + region.getMaxZ());
player.sendMessage("§7 Größe: §f" + region.getSizeX() + "x" + region.getSizeY() + "x" + region.getSizeZ());
}
public void handleClear(Player player, String eventId) {
EventDefinition def = plugin.getEventRegistry().get(eventId).orElse(null);
if (def == null) { player.sendMessage(plugin.prefix() + "§cEvent nicht gefunden: §f" + eventId); return; }
def.setRegion(null);
if (def.isCustom()) plugin.getConfigManager().saveCustomEvent(def);
player.sendMessage(plugin.prefix() + "§7Region für §e" + def.getDisplayName() + " §7entfernt (gesamte Welt).");
}
public void handleStartPos1(Player player, String eventId) {
EventDefinition def = plugin.getEventRegistry().get(eventId).orElse(null);
if (def == null) { player.sendMessage(plugin.prefix() + "§cEvent nicht gefunden: §f" + eventId); return; }
startPos1Selection.put(player.getUniqueId(), new Object[]{eventId, player.getLocation().clone()});
player.sendMessage(plugin.prefix() + "§aStart-Pos1 gesetzt: §f" + formatLoc(player));
player.sendMessage(plugin.prefix() + "§7Jetzt: §f/event race start pos2 " + eventId);
}
public void handleStartPos2(Player player, String eventId) {
EventDefinition def = plugin.getEventRegistry().get(eventId).orElse(null);
if (def == null) { player.sendMessage(plugin.prefix() + "§cEvent nicht gefunden: §f" + eventId); return; }
Object[] sel = startPos1Selection.get(player.getUniqueId());
if (sel == null || !sel[0].equals(eventId)) {
player.sendMessage(plugin.prefix() + "§cZuerst Start-Pos1 setzen: §f/event race start pos1 " + eventId);
return;
}
org.bukkit.Location pos1 = (org.bukkit.Location) sel[1];
org.bukkit.Location pos2 = player.getLocation().clone();
if (!pos1.getWorld().equals(pos2.getWorld())) {
player.sendMessage(plugin.prefix() + "§cBeide Positionen müssen in der gleichen Welt sein!");
return;
}
EventRegion region = new EventRegion(pos1, pos2);
def.setStartRegion(region);
if (def.isCustom()) plugin.getConfigManager().saveCustomEvent(def);
startPos1Selection.remove(player.getUniqueId());
player.sendMessage(plugin.prefix() + "§a✔ Startbereich gesetzt für §e" + def.getDisplayName() + "§a:");
sendRegionInfo(player, region);
}
public void handleStartClear(Player player, String eventId) {
EventDefinition def = plugin.getEventRegistry().get(eventId).orElse(null);
if (def == null) { player.sendMessage(plugin.prefix() + "§cEvent nicht gefunden: §f" + eventId); return; }
def.setStartRegion(null);
if (def.isCustom()) plugin.getConfigManager().saveCustomEvent(def);
player.sendMessage(plugin.prefix() + "§7Startbereich für §e" + def.getDisplayName() + " §7entfernt.");
}
public void handleStartInfo(Player player, String eventId) {
EventDefinition def = plugin.getEventRegistry().get(eventId).orElse(null);
if (def == null) { player.sendMessage(plugin.prefix() + "§cEvent nicht gefunden: §f" + eventId); return; }
if (!def.hasStartRegion()) {
player.sendMessage(plugin.prefix() + "§e" + def.getDisplayName() + " §7hat keinen Startbereich.");
return;
}
player.sendMessage("§8§m══════════════════════════════");
player.sendMessage("§6 Startbereich: §e" + def.getDisplayName());
sendRegionInfo(player, def.getStartRegion());
player.sendMessage("§8§m══════════════════════════════");
}
public void handleGoalPos1(Player player, String eventId) {
EventDefinition def = plugin.getEventRegistry().get(eventId).orElse(null);
if (def == null) { player.sendMessage(plugin.prefix() + "§cEvent nicht gefunden: §f" + eventId); return; }
goalPos1Selection.put(player.getUniqueId(), new Object[]{eventId, player.getLocation().clone()});
player.sendMessage(plugin.prefix() + "§aZiel-Pos1 gesetzt: §f" + formatLoc(player));
player.sendMessage(plugin.prefix() + "§7Jetzt: §f/event race goal pos2 " + eventId);
}
public void handleGoalPos2(Player player, String eventId) {
EventDefinition def = plugin.getEventRegistry().get(eventId).orElse(null);
if (def == null) { player.sendMessage(plugin.prefix() + "§cEvent nicht gefunden: §f" + eventId); return; }
Object[] sel = goalPos1Selection.get(player.getUniqueId());
if (sel == null || !sel[0].equals(eventId)) {
player.sendMessage(plugin.prefix() + "§cZuerst Ziel-Pos1 setzen: §f/event race goal pos1 " + eventId);
return;
}
org.bukkit.Location pos1 = (org.bukkit.Location) sel[1];
org.bukkit.Location pos2 = player.getLocation().clone();
if (!pos1.getWorld().equals(pos2.getWorld())) {
player.sendMessage(plugin.prefix() + "§cBeide Positionen müssen in der gleichen Welt sein!");
return;
}
EventRegion region = new EventRegion(pos1, pos2);
def.setGoalRegion(region);
if (def.isCustom()) plugin.getConfigManager().saveCustomEvent(def);
goalPos1Selection.remove(player.getUniqueId());
player.sendMessage(plugin.prefix() + "§a✔ Zielbereich gesetzt für §e" + def.getDisplayName() + "§a:");
sendRegionInfo(player, region);
}
public void handleGoalClear(Player player, String eventId) {
EventDefinition def = plugin.getEventRegistry().get(eventId).orElse(null);
if (def == null) { player.sendMessage(plugin.prefix() + "§cEvent nicht gefunden: §f" + eventId); return; }
def.setGoalRegion(null);
if (def.isCustom()) plugin.getConfigManager().saveCustomEvent(def);
player.sendMessage(plugin.prefix() + "§7Zielbereich für §e" + def.getDisplayName() + " §7entfernt.");
}
public void handleGoalInfo(Player player, String eventId) {
EventDefinition def = plugin.getEventRegistry().get(eventId).orElse(null);
if (def == null) { player.sendMessage(plugin.prefix() + "§cEvent nicht gefunden: §f" + eventId); return; }
if (!def.hasGoalRegion()) {
player.sendMessage(plugin.prefix() + "§e" + def.getDisplayName() + " §7hat keinen Zielbereich.");
return;
}
player.sendMessage("§8§m══════════════════════════════");
player.sendMessage("§6 Zielbereich: §e" + def.getDisplayName());
sendRegionInfo(player, def.getGoalRegion());
player.sendMessage("§8§m══════════════════════════════");
}
public void handleInfo(Player player, String eventId) {
EventDefinition def = plugin.getEventRegistry().get(eventId).orElse(null);
if (def == null) { player.sendMessage(plugin.prefix() + "§cEvent nicht gefunden: §f" + eventId); return; }
if (!def.hasRegion()) {
player.sendMessage(plugin.prefix() + "§e" + def.getDisplayName() + " §7hat keine Region (gesamte Welt).");
return;
}
EventRegion r = def.getRegion();
player.sendMessage("§8§m══════════════════════════════");
player.sendMessage("§6 Region: §e" + def.getDisplayName());
player.sendMessage("§7 Welt: §f" + r.getWorldName());
player.sendMessage("§7 Von: §f" + r.getMinX() + ", " + r.getMinY() + ", " + r.getMinZ());
player.sendMessage("§7 Bis: §f" + r.getMaxX() + ", " + r.getMaxY() + ", " + r.getMaxZ());
player.sendMessage("§7 Größe: §f" + r.getSizeX() + "×" + r.getSizeY() + "×" + r.getSizeZ() + " Blöcke");
player.sendMessage("§8§m══════════════════════════════");
}
private String formatLoc(Player p) {
return p.getWorld().getName() + " "
+ p.getLocation().getBlockX() + ", "
+ p.getLocation().getBlockY() + ", "
+ p.getLocation().getBlockZ();
}
private void sendRegionInfo(Player player, EventRegion region) {
player.sendMessage("§7 Welt: §f" + region.getWorldName());
player.sendMessage("§7 Von: §f" + region.getMinX() + ", " + region.getMinY() + ", " + region.getMinZ());
player.sendMessage("§7 Bis: §f" + region.getMaxX() + ", " + region.getMaxY() + ", " + region.getMaxZ());
player.sendMessage("§7 Größe: §f" + region.getSizeX() + "x" + region.getSizeY() + "x" + region.getSizeZ());
}
}