241 lines
11 KiB
Java
241 lines
11 KiB
Java
package de.nexuslobby.commands;
|
|
|
|
import de.nexuslobby.NexusLobby;
|
|
import de.nexuslobby.modules.ScoreboardModule;
|
|
import de.nexuslobby.modules.parkour.ParkourManager;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.Sound;
|
|
import org.bukkit.World;
|
|
import org.bukkit.command.Command;
|
|
import org.bukkit.command.CommandExecutor;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.configuration.file.FileConfiguration;
|
|
import org.bukkit.entity.ArmorStand;
|
|
import org.bukkit.entity.Entity;
|
|
import org.bukkit.entity.Player;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import java.util.List;
|
|
|
|
public class NexusLobbyCommand implements CommandExecutor {
|
|
|
|
@Override
|
|
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
|
|
|
if (!(sender instanceof Player player)) {
|
|
sender.sendMessage(de.nexuslobby.utils.LangManager.get("only_player"));
|
|
return true;
|
|
}
|
|
|
|
String cmdName = command.getName().toLowerCase();
|
|
ParkourManager pm = NexusLobby.getInstance().getParkourManager();
|
|
|
|
// --- DIREKTE KURZ-BEFEHLE ---
|
|
if (cmdName.equalsIgnoreCase("setstart")) {
|
|
if (!player.hasPermission("nexuslobby.admin")) return noPerm(player);
|
|
handleSetStart(player, pm);
|
|
return true;
|
|
}
|
|
if (cmdName.equalsIgnoreCase("setcheckpoint")) {
|
|
if (!player.hasPermission("nexuslobby.admin")) return noPerm(player);
|
|
pm.setCheckpoint(player, player.getLocation());
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("parkour_checkpoint_set"));
|
|
return true;
|
|
}
|
|
if (cmdName.equalsIgnoreCase("setfinish")) {
|
|
if (!player.hasPermission("nexuslobby.admin")) return noPerm(player);
|
|
pm.setFinishLocation(player.getLocation());
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("parkour_finish_set"));
|
|
return true;
|
|
}
|
|
|
|
// --- SPAWN BEFEHL ---
|
|
if (cmdName.equalsIgnoreCase("spawn")) {
|
|
FileConfiguration config = NexusLobby.getInstance().getConfig();
|
|
if (config.contains("spawn.world")) {
|
|
Location loc = getSpawnFromConfig(config);
|
|
if (loc != null) {
|
|
player.teleport(loc);
|
|
player.playSound(player.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 1.0f, 1.2f);
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("teleport_spawn"));
|
|
} else {
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("spawn_world_missing"));
|
|
}
|
|
} else {
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("spawn_not_set"));
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// --- HAUPTBEFEHL /NEXUSLOBBY oder /NEXUS ---
|
|
if (args.length == 0) {
|
|
sendInfo(player);
|
|
return true;
|
|
}
|
|
|
|
switch (args[0].toLowerCase()) {
|
|
case "reload":
|
|
if (!player.hasPermission("nexuslobby.admin")) return noPerm(player);
|
|
NexusLobby.getInstance().reloadPlugin();
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("plugin_reloaded"));
|
|
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1f, 1.5f);
|
|
break;
|
|
|
|
case "setspawn":
|
|
if (!player.hasPermission("nexuslobby.admin")) return noPerm(player);
|
|
Location loc = player.getLocation();
|
|
FileConfiguration config = NexusLobby.getInstance().getConfig();
|
|
config.set("spawn.world", loc.getWorld().getName());
|
|
config.set("spawn.x", loc.getX());
|
|
config.set("spawn.y", loc.getY());
|
|
config.set("spawn.z", loc.getZ());
|
|
config.set("spawn.yaw", (double) loc.getYaw());
|
|
config.set("spawn.pitch", (double) loc.getPitch());
|
|
NexusLobby.getInstance().saveConfig();
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("spawn_set"));
|
|
break;
|
|
|
|
case "silentjoin":
|
|
if (!player.hasPermission("nexuslobby.silentjoin")) return noPerm(player);
|
|
if (NexusLobby.getInstance().getSilentPlayers().contains(player.getUniqueId())) {
|
|
NexusLobby.getInstance().getSilentPlayers().remove(player.getUniqueId());
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("silentjoin_off"));
|
|
} else {
|
|
NexusLobby.getInstance().getSilentPlayers().add(player.getUniqueId());
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("silentjoin_on"));
|
|
}
|
|
break;
|
|
|
|
case "sb":
|
|
handleScoreboard(player, args);
|
|
break;
|
|
|
|
case "ball": // NEU: Weiterleitung an das SoccerModule
|
|
if (NexusLobby.getInstance().getSoccerModule() != null) {
|
|
return NexusLobby.getInstance().getSoccerModule().onCommand(sender, command, label, args);
|
|
}
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("soccer_module_not_loaded"));
|
|
break;
|
|
|
|
case "parkour":
|
|
if (args.length < 2) {
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("parkour_usage"));
|
|
return true;
|
|
}
|
|
|
|
String sub = args[1].toLowerCase();
|
|
if (!player.hasPermission("nexuslobby.admin") && !sub.equals("reset")) return noPerm(player);
|
|
|
|
switch (sub) {
|
|
case "setstart":
|
|
handleSetStart(player, pm);
|
|
break;
|
|
case "setfinish":
|
|
pm.setFinishLocation(player.getLocation());
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("parkour_finish_set"));
|
|
break;
|
|
case "setcheckpoint":
|
|
pm.setCheckpoint(player, player.getLocation());
|
|
break;
|
|
case "reset":
|
|
pm.stopParkour(player);
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("parkour_run_aborted"));
|
|
break;
|
|
case "clear":
|
|
pm.clearStats();
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("parkour_besttimes_cleared"));
|
|
break;
|
|
case "removeall":
|
|
pm.removeAllPoints();
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("parkour_track_removed"));
|
|
player.playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1f, 1f);
|
|
break;
|
|
default:
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("unknown_subcommand"));
|
|
break;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
sendInfo(player);
|
|
break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private void handleSetStart(Player player, ParkourManager pm) {
|
|
// NPC Erkennung (Blickrichtung auf ArmorStand)
|
|
ArmorStand targetAs = null;
|
|
List<Entity> nearby = player.getNearbyEntities(4, 4, 4);
|
|
for (Entity e : nearby) {
|
|
if (e instanceof ArmorStand as) {
|
|
double dot = player.getLocation().getDirection().dot(as.getLocation().toVector().subtract(player.getLocation().toVector()).normalize());
|
|
if (dot > 0.9) {
|
|
targetAs = as;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (targetAs != null) {
|
|
targetAs.addScoreboardTag("parkour_npc");
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("parkour_npc_marked"));
|
|
}
|
|
pm.setStartLocation(player.getLocation());
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("parkour_start_set"));
|
|
}
|
|
|
|
private boolean noPerm(Player player) {
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("no_permission"));
|
|
return true;
|
|
}
|
|
|
|
private void handleScoreboard(Player player, String[] args) {
|
|
if (args.length < 2) {
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("scoreboard_usage"));
|
|
return;
|
|
}
|
|
ScoreboardModule sbModule = (ScoreboardModule) NexusLobby.getInstance().getModuleManager().getModule(ScoreboardModule.class);
|
|
if (sbModule == null) {
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("scoreboard_module_disabled"));
|
|
return;
|
|
}
|
|
String sub = args[1].toLowerCase();
|
|
switch (sub) {
|
|
case "on": sbModule.setVisibility(player, true); break;
|
|
case "off": sbModule.setVisibility(player, false); break;
|
|
case "admin":
|
|
if (player.hasPermission("nexuslobby.scoreboard.admin")) sbModule.setAdminMode(player, true);
|
|
else player.sendMessage(de.nexuslobby.utils.LangManager.get("no_permission"));
|
|
break;
|
|
case "spieler":
|
|
if (player.hasPermission("nexuslobby.scoreboard.admin")) sbModule.setAdminMode(player, false);
|
|
else player.sendMessage(de.nexuslobby.utils.LangManager.get("no_permission"));
|
|
break;
|
|
}
|
|
}
|
|
|
|
private Location getSpawnFromConfig(FileConfiguration config) {
|
|
World world = Bukkit.getWorld(config.getString("spawn.world", "world"));
|
|
if (world == null) return null;
|
|
return new Location(world,
|
|
config.getDouble("spawn.x"), config.getDouble("spawn.y"), config.getDouble("spawn.z"),
|
|
(float) config.getDouble("spawn.yaw"), (float) config.getDouble("spawn.pitch"));
|
|
}
|
|
|
|
private void sendInfo(Player player) {
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("info_header"));
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("info_title"));
|
|
player.sendMessage("");
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("info_spawn"));
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("info_parkour"));
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("info_removeall"));
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("info_ball"));
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("info_setspawn"));
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("info_scoreboard"));
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("info_reload"));
|
|
player.sendMessage(de.nexuslobby.utils.LangManager.get("info_footer"));
|
|
}
|
|
} |