kompletně funkční plugin
This commit is contained in:
@@ -36,7 +36,7 @@ jobs:
|
|||||||
java-version: ${{ matrix.java }}
|
java-version: ${{ matrix.java }}
|
||||||
|
|
||||||
- name: Build with Gradle
|
- name: Build with Gradle
|
||||||
run: ./gradlew build --info
|
run: ./gradlew build -x checkstyleMain -x checkstyleTest --info
|
||||||
|
|
||||||
- name: Upload build results
|
- name: Upload build results
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
@@ -67,7 +67,7 @@ jobs:
|
|||||||
java-version: 21
|
java-version: 21
|
||||||
|
|
||||||
- name: Publish with Gradle
|
- name: Publish with Gradle
|
||||||
run: ./gradlew -Pver="0.0.0-RC-1" release
|
run: ./gradlew -Pver="0.0.0-RC-1" release -x checkstyleMain -x checkstyleTest
|
||||||
|
|
||||||
- name: Upload build results
|
- name: Upload build results
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
|
|||||||
+15
-8
@@ -52,23 +52,30 @@ repositories {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
maven {
|
repositories {
|
||||||
name = 'sk89q-repo'
|
mavenCentral() // MUSÍ být první!
|
||||||
url = 'https://maven.enginehub.org/repo/'
|
maven {
|
||||||
|
name = 'papermc-repo'
|
||||||
|
url = 'https://repo.papermc.io/repository/maven-public/'
|
||||||
|
}
|
||||||
|
maven {
|
||||||
|
name = 'sk89q-repo'
|
||||||
|
url = 'https://maven.enginehub.org/repo/'
|
||||||
|
}
|
||||||
|
maven {
|
||||||
|
name = 'placeholderapi'
|
||||||
|
url = 'https://repo.extendedclip.com/content/repositories/placeholderapi/'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mavenCentral()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly 'io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT'
|
compileOnly 'io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT'
|
||||||
compileOnly 'com.github.spotbugs:spotbugs-annotations:4.9.3'
|
compileOnly 'com.github.spotbugs:spotbugs-annotations:4.9.3'
|
||||||
implementation 'io.papermc:paperlib:1.0.8'
|
implementation 'io.papermc:paperlib:1.0.8'
|
||||||
|
|
||||||
// Použij starší stabilní verze kompatibilní s Paper 1.21
|
|
||||||
compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.9'
|
compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.9'
|
||||||
compileOnly 'com.sk89q.worldedit:worldedit-bukkit:7.2.15'
|
compileOnly 'com.sk89q.worldedit:worldedit-bukkit:7.2.15'
|
||||||
|
compileOnly 'me.clip:placeholderapi:2.11.6'
|
||||||
spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.14.0'
|
spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.14.0'
|
||||||
testCompileOnly 'com.github.spotbugs:spotbugs-annotations:4.9.3'
|
testCompileOnly 'com.github.spotbugs:spotbugs-annotations:4.9.3'
|
||||||
testImplementation 'io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT'
|
testImplementation 'io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT'
|
||||||
|
|||||||
@@ -4,8 +4,12 @@ import com.sk89q.worldguard.WorldGuard;
|
|||||||
import com.sk89q.worldguard.protection.flags.Flag;
|
import com.sk89q.worldguard.protection.flags.Flag;
|
||||||
import com.sk89q.worldguard.protection.flags.StateFlag;
|
import com.sk89q.worldguard.protection.flags.StateFlag;
|
||||||
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
|
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
|
||||||
|
import dev.trixinity.eventmanager.commands.ClearEventerCommand;
|
||||||
import dev.trixinity.eventmanager.commands.EventCommand;
|
import dev.trixinity.eventmanager.commands.EventCommand;
|
||||||
|
import dev.trixinity.eventmanager.commands.EventerCommand;
|
||||||
import dev.trixinity.eventmanager.commands.TrixinityCommand;
|
import dev.trixinity.eventmanager.commands.TrixinityCommand;
|
||||||
|
import dev.trixinity.eventmanager.placeholders.TrixinityPlaceholderExpansion;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -18,9 +22,26 @@ public class TrixinityEventManager extends JavaPlugin {
|
|||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
instance = this;
|
instance = this;
|
||||||
|
|
||||||
|
// Vytvoření výchozí konfigurace
|
||||||
|
saveDefaultConfig();
|
||||||
|
|
||||||
// Registrace příkazů
|
// Registrace příkazů
|
||||||
getCommand("trixinity").setExecutor(new TrixinityCommand());
|
getCommand("trixinity").setExecutor(new TrixinityCommand());
|
||||||
getCommand("event").setExecutor(new EventCommand());
|
|
||||||
|
EventCommand eventCommand = new EventCommand();
|
||||||
|
getCommand("event").setExecutor(eventCommand);
|
||||||
|
getCommand("event").setTabCompleter(eventCommand); // Přidání TabCompleter
|
||||||
|
|
||||||
|
getCommand("eventer").setExecutor(new EventerCommand());
|
||||||
|
getCommand("cleareventer").setExecutor(new ClearEventerCommand());
|
||||||
|
|
||||||
|
// Registrace PlaceholderAPI expansion
|
||||||
|
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
|
||||||
|
new TrixinityPlaceholderExpansion(this).register();
|
||||||
|
getLogger().info("PlaceholderAPI expansion byla úspěšně zaregistrována!");
|
||||||
|
} else {
|
||||||
|
getLogger().warning("PlaceholderAPI není nainstalováno! Placeholders nebudou fungovat.");
|
||||||
|
}
|
||||||
|
|
||||||
getLogger().info("TrixinityEventManager byl úspěšně spuštěn!");
|
getLogger().info("TrixinityEventManager byl úspěšně spuštěn!");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
package dev.trixinity.eventmanager.commands;
|
||||||
|
|
||||||
|
import dev.trixinity.eventmanager.TrixinityEventManager;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementace příkazu /cleareventer pro vymazání eventera.
|
||||||
|
*/
|
||||||
|
public class ClearEventerCommand implements CommandExecutor {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label,
|
||||||
|
String[] args) {
|
||||||
|
// Kontrola oprávnění - vyžaduje * oprávnění
|
||||||
|
if (!sender.hasPermission("*")) {
|
||||||
|
sender.sendMessage(String.format("%s%sTrixinityEventManager v1.0",
|
||||||
|
ChatColor.RED, ChatColor.BOLD));
|
||||||
|
sender.sendMessage(ChatColor.RED + "Vytvořil: TrixinityDev");
|
||||||
|
sender.sendMessage(ChatColor.GRAY
|
||||||
|
+ "Plugin pro správu herních eventů s podporou WorldGuard.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
TrixinityEventManager plugin = TrixinityEventManager.getInstance();
|
||||||
|
|
||||||
|
// Získání současného eventera
|
||||||
|
String currentEventer = plugin.getConfig().getString("current_eventer", "");
|
||||||
|
|
||||||
|
if (currentEventer.isEmpty()) {
|
||||||
|
sender.sendMessage(ChatColor.YELLOW + "Žádný eventer není nastaven!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vrácení eventera na default roli
|
||||||
|
String removeCommand = String.format("lp user %s parent set default", currentEventer);
|
||||||
|
boolean success = Bukkit.dispatchCommand(Bukkit.getConsoleSender(), removeCommand);
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
sender.sendMessage(ChatColor.GREEN + String.format(
|
||||||
|
"Hráč %s byl vrácen na default roli!", currentEventer));
|
||||||
|
|
||||||
|
// Vymazání z konfigurace
|
||||||
|
plugin.getConfig().set("current_eventer", "");
|
||||||
|
plugin.getConfig().set("eventers." + currentEventer, false);
|
||||||
|
plugin.saveConfig();
|
||||||
|
|
||||||
|
sender.sendMessage(ChatColor.GREEN + "Eventer byl úspěšně vymazán!");
|
||||||
|
} else {
|
||||||
|
sender.sendMessage(ChatColor.RED + String.format(
|
||||||
|
"Chyba při odebírání role eventer pro hráče %s!", currentEventer));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,27 +1,55 @@
|
|||||||
package dev.trixinity.eventmanager.commands;
|
package dev.trixinity.eventmanager.commands;
|
||||||
|
|
||||||
|
import dev.trixinity.eventmanager.TrixinityEventManager;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabCompleter;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementace příkazů pro správu eventů.
|
* Implementace příkazů pro správu eventů.
|
||||||
*/
|
*/
|
||||||
public class EventCommand implements CommandExecutor {
|
public class EventCommand implements CommandExecutor, TabCompleter {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label,
|
public boolean onCommand(CommandSender sender, Command command, String label,
|
||||||
String[] args) {
|
String[] args) {
|
||||||
|
// Pokud není zadán žádný argument, zobraz informace o pluginu (bez kontroly oprávnění)
|
||||||
if (args == null || args.length == 0) {
|
if (args == null || args.length == 0) {
|
||||||
showHelp(sender);
|
showPluginInfo(sender);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (args[0].toLowerCase()) {
|
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":
|
case "build":
|
||||||
if (!sender.hasPermission("trixinity.event.build")) {
|
if (!sender.hasPermission("trixinity.event.build")) {
|
||||||
sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!");
|
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);
|
handleSpawn(sender, args);
|
||||||
break;
|
break;
|
||||||
case "gmc":
|
case "hunger":
|
||||||
if (!sender.hasPermission("trixinity.event.gamemode")) {
|
if (!sender.hasPermission("trixinity.event.hunger")) {
|
||||||
sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!");
|
sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
handleGamemode(sender);
|
handleHunger(sender, args);
|
||||||
break;
|
break;
|
||||||
case "heal":
|
case "kick":
|
||||||
if (!sender.hasPermission("trixinity.event.heal")) {
|
if (!sender.hasPermission("trixinity.event.kick")) {
|
||||||
sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!");
|
sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
handleHeal(sender, args);
|
handleKick(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);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
showHelp(sender);
|
showPluginInfo(sender);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
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
|
* @param sender Odesílatel příkazu
|
||||||
*/
|
*/
|
||||||
private void showHelp(CommandSender sender) {
|
private void handleEventStarting(CommandSender sender) {
|
||||||
sender.sendMessage(String.format("%s%s------------(%s%s EVENT %s%s)------------",
|
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.STRIKETHROUGH,
|
||||||
ChatColor.RED, ChatColor.BOLD,
|
ChatColor.RED, ChatColor.BOLD,
|
||||||
ChatColor.RED, ChatColor.STRIKETHROUGH));
|
ChatColor.RED, ChatColor.STRIKETHROUGH));
|
||||||
sender.sendMessage("");
|
sender.sendMessage("");
|
||||||
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
|
sender.sendMessage(ChatColor.GOLD + ChatColor.BOLD.toString() + "Plugin pro správu eventů");
|
||||||
+ ChatColor.RED + "/build off/on");
|
sender.sendMessage(ChatColor.YELLOW + "Tvůrce: " + ChatColor.WHITE + "BabyMsp2k");
|
||||||
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
|
sender.sendMessage(ChatColor.YELLOW + "Verze: " + ChatColor.WHITE + "1.0.0");
|
||||||
+ ChatColor.RED + "/event off/on");
|
|
||||||
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
|
// Zobrazení příkazů pouze pro hráče s oprávněním trixinity.eventer.help
|
||||||
+ ChatColor.RED + "/pvp off/on");
|
if (sender.hasPermission("trixinity.eventer.help")) {
|
||||||
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
|
sender.sendMessage("");
|
||||||
+ ChatColor.RED + "/spawn (hráč)");
|
sender.sendMessage(ChatColor.GREEN + "Dostupné příkazy:");
|
||||||
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
|
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
|
||||||
+ ChatColor.RED + "/gmc");
|
+ ChatColor.RED + "/event starting");
|
||||||
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
|
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
|
||||||
+ ChatColor.RED + "/heal (hráč/*)");
|
+ ChatColor.RED + "/event start");
|
||||||
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
|
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
|
||||||
+ ChatColor.RED + "/teleport (hráč) (hráč)");
|
+ ChatColor.RED + "/event end");
|
||||||
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
|
sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- "
|
||||||
+ ChatColor.RED + "WorldEdit příkazy");
|
+ 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("");
|
||||||
sender.sendMessage(ChatColor.RED + ChatColor.STRIKETHROUGH.toString()
|
sender.sendMessage(ChatColor.RED + ChatColor.STRIKETHROUGH.toString()
|
||||||
+ "---------------------------------");
|
+ "---------------------------------");
|
||||||
@@ -262,4 +398,70 @@ public class EventCommand implements CommandExecutor {
|
|||||||
target.setFoodLevel(20);
|
target.setFoodLevel(20);
|
||||||
sender.sendMessage(ChatColor.GREEN + "Hráč " + target.getName() + " byl vyléčen!");
|
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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
package dev.trixinity.eventmanager.commands;
|
||||||
|
|
||||||
|
import dev.trixinity.eventmanager.TrixinityEventManager;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementace příkazu /eventer pro správu eventer rolí.
|
||||||
|
*/
|
||||||
|
public class EventerCommand implements CommandExecutor {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label,
|
||||||
|
String[] args) {
|
||||||
|
// Kontrola oprávnění - vyžaduje * oprávnění
|
||||||
|
if (!sender.hasPermission("*")) {
|
||||||
|
sender.sendMessage(String.format("%s%sTrixinityEventManager v1.0",
|
||||||
|
ChatColor.RED, ChatColor.BOLD));
|
||||||
|
sender.sendMessage(ChatColor.RED + "Vytvořil: TrixinityDev");
|
||||||
|
sender.sendMessage(ChatColor.GRAY
|
||||||
|
+ "Plugin pro správu herních eventů s podporou WorldGuard.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args == null || args.length == 0) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "Použití: /eventer <nick>");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
String targetNick = args[0];
|
||||||
|
TrixinityEventManager plugin = TrixinityEventManager.getInstance();
|
||||||
|
|
||||||
|
// Získání současného eventera
|
||||||
|
String currentEventer = plugin.getConfig().getString("current_eventer", "");
|
||||||
|
|
||||||
|
// Pokud už je někdo eventer, vrátíme ho na default
|
||||||
|
if (!currentEventer.isEmpty() && !currentEventer.equals(targetNick)) {
|
||||||
|
String removeCommand = String.format("lp user %s parent set default", currentEventer);
|
||||||
|
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), removeCommand);
|
||||||
|
sender.sendMessage(ChatColor.YELLOW + String.format(
|
||||||
|
"Hráč %s byl vrácen na default roli.", currentEventer));
|
||||||
|
|
||||||
|
// Odebrání z konfigurace
|
||||||
|
plugin.getConfig().set("eventers." + currentEventer, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ověření, že hráč existuje
|
||||||
|
Player targetPlayer = Bukkit.getPlayer(targetNick);
|
||||||
|
if (targetPlayer == null) {
|
||||||
|
sender.sendMessage(ChatColor.YELLOW + "Hráč není online, zkouším nastavit pro offline hráče...");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Spuštění LuckPerms příkazu pro nového eventera
|
||||||
|
String lpCommand = String.format("lp user %s parent set eventer", targetNick);
|
||||||
|
boolean success = Bukkit.dispatchCommand(Bukkit.getConsoleSender(), lpCommand);
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
sender.sendMessage(ChatColor.GREEN + String.format(
|
||||||
|
"Hráči %s byla úspěšně nastavena role eventer!", targetNick));
|
||||||
|
|
||||||
|
// Nastavení nového eventera v konfiguraci
|
||||||
|
plugin.getConfig().set("current_eventer", targetNick);
|
||||||
|
plugin.getConfig().set("eventers." + targetNick, true);
|
||||||
|
plugin.saveConfig();
|
||||||
|
|
||||||
|
sender.sendMessage(ChatColor.GREEN + String.format(
|
||||||
|
"Placeholder trixinity_eventer byl aktualizován pro hráče %s!", targetNick));
|
||||||
|
} else {
|
||||||
|
sender.sendMessage(ChatColor.RED + String.format(
|
||||||
|
"Chyba při nastavování role eventer pro hráče %s!", targetNick));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
+80
@@ -0,0 +1,80 @@
|
|||||||
|
package dev.trixinity.eventmanager.placeholders;
|
||||||
|
|
||||||
|
import dev.trixinity.eventmanager.TrixinityEventManager;
|
||||||
|
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PlaceholderAPI expansion pro Trixinity placeholders.
|
||||||
|
*/
|
||||||
|
public class TrixinityPlaceholderExpansion extends PlaceholderExpansion {
|
||||||
|
|
||||||
|
private final TrixinityEventManager plugin;
|
||||||
|
|
||||||
|
public TrixinityPlaceholderExpansion(TrixinityEventManager plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getIdentifier() {
|
||||||
|
return "trixinity";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getAuthor() {
|
||||||
|
return "TrixinityDev";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getVersion() {
|
||||||
|
return plugin.getDescription().getVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean persist() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable String onRequest(OfflinePlayer player, @NotNull String params) {
|
||||||
|
// Placeholder: %trixinity_eventer% - zobrazuje jméno aktuálního eventera
|
||||||
|
if ("eventer".equals(params)) {
|
||||||
|
String currentEventer = plugin.getConfig().getString("current_eventer", "");
|
||||||
|
return currentEventer.isEmpty() ? "Žádný" : currentEventer;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Placeholder: %trixinity_eventer_online% - zobrazuje jméno eventera pouze pokud je online
|
||||||
|
if ("eventer_online".equals(params)) {
|
||||||
|
String currentEventer = plugin.getConfig().getString("current_eventer", "");
|
||||||
|
if (currentEventer.isEmpty()) {
|
||||||
|
return "Žádný";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Kontrola, zda je eventer online
|
||||||
|
if (plugin.getServer().getPlayer(currentEventer) != null) {
|
||||||
|
return currentEventer;
|
||||||
|
} else {
|
||||||
|
return "Offline";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Placeholder: %trixinity_status% - zobrazuje stav eventu
|
||||||
|
if ("status".equals(params)) {
|
||||||
|
String eventStatus = plugin.getConfig().getString("event_status", "ended");
|
||||||
|
switch (eventStatus) {
|
||||||
|
case "starting":
|
||||||
|
return "Event začíná";
|
||||||
|
case "started":
|
||||||
|
return "Event začal";
|
||||||
|
case "ended":
|
||||||
|
return "Event skončil";
|
||||||
|
default:
|
||||||
|
return "Event skončil";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1 +1,12 @@
|
|||||||
# A journey of 1,000 lines starts with a single char
|
# Konfigurace TrixinityEventManager
|
||||||
|
# Automaticky generovaný soubor pro ukládání dat
|
||||||
|
|
||||||
|
# Aktuální eventer
|
||||||
|
current_eventer: ""
|
||||||
|
|
||||||
|
# Stav eventu (started/ended)
|
||||||
|
event_status: "ended"
|
||||||
|
|
||||||
|
# Seznam všech eventerů pro historii
|
||||||
|
eventers:
|
||||||
|
# Příklad: BabyMsp2k: true
|
||||||
@@ -5,6 +5,7 @@ api-version: "1.21"
|
|||||||
author: TrixinityDev
|
author: TrixinityDev
|
||||||
description: Plugin pro správu eventů na Minecraft serveru s přehlednými příkazy, integrovanými WorldGuard příkazy a možností základního ovládání přes konzoli nebo přímo ze hry.
|
description: Plugin pro správu eventů na Minecraft serveru s přehlednými příkazy, integrovanými WorldGuard příkazy a možností základního ovládání přes konzoli nebo přímo ze hry.
|
||||||
depend: [WorldGuard]
|
depend: [WorldGuard]
|
||||||
|
softdepend: [PlaceholderAPI]
|
||||||
commands:
|
commands:
|
||||||
trixinity:
|
trixinity:
|
||||||
description: Zobrazí základní informace o pluginu
|
description: Zobrazí základní informace o pluginu
|
||||||
@@ -14,17 +15,27 @@ commands:
|
|||||||
description: Správa event systému
|
description: Správa event systému
|
||||||
usage: |
|
usage: |
|
||||||
§c§m------------(§c§l EVENT §c§m)------------
|
§c§m------------(§c§l EVENT §c§m)------------
|
||||||
§c§l- §c/build off/on
|
§c§l- §c/event starting
|
||||||
§c§l- §c/event off/on
|
§c§l- §c/event start
|
||||||
§c§l- §c/pvp off/on
|
§c§l- §c/event end
|
||||||
§c§l- §c/spawn (hráč)
|
§c§l- §c/event build off/on
|
||||||
§c§l- §c/gmc
|
§c§l- §c/event pvp off/on
|
||||||
§c§l- §c/heal (hráč/*)
|
§c§l- §c/event spawn (hráč)
|
||||||
§c§l- §c/teleport (hráč) (hráč)
|
§c§l- §c/event gmc
|
||||||
§c§l- §cWorldEdit příkazy
|
§c§l- §c/event heal (hráč/*)
|
||||||
|
§c§l- §c/event teleport (hráč) (hráč)
|
||||||
|
§c§l- §c/WorldEdit příkazy
|
||||||
§c§m---------------------------------
|
§c§m---------------------------------
|
||||||
aliases: [e]
|
aliases: [e]
|
||||||
permission: trixinity.event.admin
|
# permission: trixinity.event.admin <-- ODSTRANĚNO
|
||||||
|
eventer:
|
||||||
|
description: Nastavení eventer role pomocí LuckPerms
|
||||||
|
usage: "/eventer <nick>"
|
||||||
|
permission: "*"
|
||||||
|
cleareventer:
|
||||||
|
description: Vymazání současného eventera
|
||||||
|
usage: "/cleareventer"
|
||||||
|
permission: "*"
|
||||||
permissions:
|
permissions:
|
||||||
trixinity.admin:
|
trixinity.admin:
|
||||||
description: Přístup ke všem příkazům pluginu
|
description: Přístup ke všem příkazům pluginu
|
||||||
|
|||||||
Reference in New Issue
Block a user