kompletně funkční plugin

This commit is contained in:
babymsp2k
2025-07-05 01:07:57 +02:00
parent 594ad6b0ec
commit d86a74f9bc
9 changed files with 526 additions and 56 deletions
@@ -1,27 +1,55 @@
package dev.trixinity.eventmanager.commands;
import dev.trixinity.eventmanager.TrixinityEventManager;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Implementace příkazů pro správu eventů.
*/
public class EventCommand implements CommandExecutor {
public class EventCommand implements CommandExecutor, TabCompleter {
@Override
public boolean onCommand(CommandSender sender, Command command, String label,
String[] args) {
// Pokud není zadán žádný argument, zobraz informace o pluginu (bez kontroly oprávnění)
if (args == null || args.length == 0) {
showHelp(sender);
showPluginInfo(sender);
return true;
}
switch (args[0].toLowerCase()) {
case "starting":
if (!sender.hasPermission("trixinity.event.admin")) {
sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!");
return true;
}
handleEventStarting(sender);
break;
case "start":
if (!sender.hasPermission("trixinity.event.admin")) {
sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!");
return true;
}
handleEventStart(sender);
break;
case "end":
if (!sender.hasPermission("trixinity.event.admin")) {
sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!");
return true;
}
handleEventEnd(sender);
break;
case "build":
if (!sender.hasPermission("trixinity.event.build")) {
sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!");
@@ -43,61 +71,169 @@ public class EventCommand implements CommandExecutor {
}
handleSpawn(sender, args);
break;
case "gmc":
if (!sender.hasPermission("trixinity.event.gamemode")) {
case "hunger":
if (!sender.hasPermission("trixinity.event.hunger")) {
sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!");
return true;
}
handleGamemode(sender);
handleHunger(sender, args);
break;
case "heal":
if (!sender.hasPermission("trixinity.event.heal")) {
case "kick":
if (!sender.hasPermission("trixinity.event.kick")) {
sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!");
return true;
}
handleHeal(sender, args);
break;
case "teleport":
if (!sender.hasPermission("trixinity.event.teleport")) {
sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!");
return true;
}
handleTeleport(sender, args);
handleKick(sender, args);
break;
default:
showHelp(sender);
showPluginInfo(sender);
break;
}
return true;
}
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
List<String> completions = new ArrayList<>();
if (args.length == 1) {
// První argument - sub-příkazy
List<String> subCommands = Arrays.asList("starting", "start", "end", "build", "pvp", "spawn", "hunger", "kick");
for (String subCommand : subCommands) {
if (subCommand.toLowerCase().startsWith(args[0].toLowerCase())) {
completions.add(subCommand);
}
}
} else if (args.length == 2) {
// Druhý argument - závisí na prvním argumentu
switch (args[0].toLowerCase()) {
case "build":
case "pvp":
case "hunger":
List<String> onOff = Arrays.asList("on", "off");
for (String option : onOff) {
if (option.toLowerCase().startsWith(args[1].toLowerCase())) {
completions.add(option);
}
}
break;
case "spawn":
case "kick":
// Autocomplete pro jména hráčů
for (Player player : Bukkit.getOnlinePlayers()) {
if (player.getName().toLowerCase().startsWith(args[1].toLowerCase())) {
completions.add(player.getName());
}
}
break;
}
}
return completions;
}
/**
* Zobrazí nápovědu příkazů.
* Zpracuje příkaz event starting.
*
* @param sender Odesílatel příkazu
*/
private void showHelp(CommandSender sender) {
sender.sendMessage(String.format("%s%s------------(%s%s EVENT %s%s)------------",
private void handleEventStarting(CommandSender sender) {
TrixinityEventManager plugin = TrixinityEventManager.getInstance();
// Nastavení stavu eventu na "starting"
plugin.getConfig().set("event_status", "starting");
plugin.saveConfig();
// Vyplnění oblasti vzduchem
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "fill 47 62 42 39 60 42 air");
sender.sendMessage(ChatColor.YELLOW + "Event začíná");
// Oznámení všem hráčům
Bukkit.broadcastMessage(ChatColor.YELLOW + ChatColor.BOLD.toString() + "EVENT ZAČÍNÁ!");
}
/**
* Zpracuje příkaz event start.
*
* @param sender Odesílatel příkazu
*/
private void handleEventStart(CommandSender sender) {
TrixinityEventManager plugin = TrixinityEventManager.getInstance();
// Nastavení stavu eventu na "začal"
plugin.getConfig().set("event_status", "started");
plugin.saveConfig();
// Vyplnění oblasti železnými mřížemi
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "fill 47 62 42 39 60 42 iron_bars");
sender.sendMessage(ChatColor.GREEN + "Event byl úspěšně spuštěn!");
// Oznámení všem hráčům
Bukkit.broadcastMessage(ChatColor.RED + ChatColor.BOLD.toString() + "EVENT ZAČAL!");
}
/**
* Zpracuje příkaz event end.
*
* @param sender Odesílatel příkazu
*/
private void handleEventEnd(CommandSender sender) {
TrixinityEventManager plugin = TrixinityEventManager.getInstance();
// Nastavení stavu eventu na "skončil"
plugin.getConfig().set("event_status", "ended");
plugin.saveConfig();
// Vyplnění oblasti vzduchem (reset po skončení eventu)
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "fill 47 62 42 39 60 42 iron_bars");
sender.sendMessage(ChatColor.RED + "Event byl ukončen!");
// Oznámení všem hráčům
Bukkit.broadcastMessage(ChatColor.RED + ChatColor.BOLD.toString() + "EVENT SKONČIL!");
}
/**
* Zobrazí informace o pluginu.
*
* @param sender Odesílatel příkazu
*/
private void showPluginInfo(CommandSender sender) {
sender.sendMessage(String.format("%s%s------------(%s%s TRIXINITY EVENT MANAGER %s%s)------------",
ChatColor.RED, ChatColor.STRIKETHROUGH,
ChatColor.RED, ChatColor.BOLD,
ChatColor.RED, ChatColor.STRIKETHROUGH));
sender.sendMessage("");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "/build off/on");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "/event off/on");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "/pvp off/on");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "/spawn (hráč)");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "/gmc");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "/heal (hráč/*)");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "/teleport (hráč) (hráč)");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "WorldEdit příkazy");
sender.sendMessage(ChatColor.GOLD + ChatColor.BOLD.toString() + "Plugin pro správu eventů");
sender.sendMessage(ChatColor.YELLOW + "Tvůrce: " + ChatColor.WHITE + "BabyMsp2k");
sender.sendMessage(ChatColor.YELLOW + "Verze: " + ChatColor.WHITE + "1.0.0");
// Zobrazení příkazů pouze pro hráče s oprávněním trixinity.eventer.help
if (sender.hasPermission("trixinity.eventer.help")) {
sender.sendMessage("");
sender.sendMessage(ChatColor.GREEN + "Dostupné příkazy:");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "/event starting");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "/event start");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "/event end");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "/event build off/on");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "/event pvp off/on");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "/event spawn (hráč)");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "/event hunger on/off");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "/event kick (hráč)");
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
+ ChatColor.RED + "WorldEdit příkazy");
}
sender.sendMessage("");
sender.sendMessage(ChatColor.RED + ChatColor.STRIKETHROUGH.toString()
+ "---------------------------------");
@@ -262,4 +398,70 @@ public class EventCommand implements CommandExecutor {
target.setFoodLevel(20);
sender.sendMessage(ChatColor.GREEN + "Hráč " + target.getName() + " byl vyléčen!");
}
/**
* Zpracuje příkaz hunger.
*
* @param sender Odesílatel příkazu
* @param args Argumenty příkazu
*/
private void handleHunger(CommandSender sender, String[] args) {
if (args == null || args.length < 2) {
sender.sendMessage(ChatColor.RED + "Použití: /event hunger <on/off>");
return;
}
String command = args[1].toLowerCase();
if ("on".equals(command)) {
// Zapnutí hunger pro všechny hráče
for (Player player : Bukkit.getOnlinePlayers()) {
player.setFoodLevel(20); // Nastavení plného hunger baru
player.setSaturation(20.0f); // Nastavení saturace
}
sender.sendMessage(ChatColor.GREEN + "Hunger byl zapnut pro všechny hráče!");
Bukkit.broadcastMessage(ChatColor.YELLOW + "Hunger byl zapnut!");
} else if ("off".equals(command)) {
// Vypnutí hunger pro všechny hráče
for (Player player : Bukkit.getOnlinePlayers()) {
player.setFoodLevel(20); // Plný hunger bar
player.setSaturation(20.0f); // Maximální saturace (zabrání klesání)
}
sender.sendMessage(ChatColor.RED + "Hunger byl vypnut pro všechny hráče!");
Bukkit.broadcastMessage(ChatColor.YELLOW + "Hunger byl vypnut!");
} else {
sender.sendMessage(ChatColor.RED + "Použití: /event hunger <on/off>");
}
}
/**
* Zpracuje příkaz kick.
*
* @param sender Odesílatel příkazu
* @param args Argumenty příkazu
*/
private void handleKick(CommandSender sender, String[] args) {
if (args == null || args.length < 2) {
sender.sendMessage(ChatColor.RED + "Použití: /event kick <hráč>");
return;
}
Player target = Bukkit.getPlayer(args[1]);
if (target == null) {
sender.sendMessage(ChatColor.RED + "Hráč není online!");
return;
}
// Nastavení hráče do spectator módu
target.setGameMode(GameMode.SPECTATOR);
sender.sendMessage(ChatColor.GREEN + "Hráč " + target.getName() + " byl přepnut do spectator módu!");
target.sendMessage(ChatColor.YELLOW + "Byl jsi přepnut do spectator módu!");
// Oznámení všem adminům
for (Player admin : Bukkit.getOnlinePlayers()) {
if (admin.hasPermission("trixinity.event.admin") && !admin.equals(sender)) {
admin.sendMessage(ChatColor.GRAY + "[Event] " + sender.getName() + " přepnul " + target.getName() + " do spectator módu");
}
}
}
}