228 lines
12 KiB
Java
228 lines
12 KiB
Java
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());
|
||
}
|
||
}
|