Update Projekt - ohne .zip und target
This commit is contained in:
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
# Ignoriere Build-Ordner
|
||||
target/
|
||||
|
||||
# Ignoriere ZIP-Dateien
|
||||
*.zip
|
3
pom.xml
3
pom.xml
@@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>de.viper</groupId>
|
||||
<artifactId>SurvivalPlus</artifactId>
|
||||
<version>1.0.5-Beta</version>
|
||||
<version>1.0.7-Beta</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>SurvivalPlus</name>
|
||||
@@ -111,6 +111,7 @@
|
||||
<include>shop.yml</include>
|
||||
<include>warps.yml</include>
|
||||
<include>tablist.yml</include>
|
||||
<include>blockedcommands.yml</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
|
193
src/main/java/de/viper/survivalplus/Manager/CommandBlocker.java
Normal file
193
src/main/java/de/viper/survivalplus/Manager/CommandBlocker.java
Normal file
@@ -0,0 +1,193 @@
|
||||
package de.viper.survivalplus.Manager;
|
||||
|
||||
import de.viper.survivalplus.SurvivalPlus;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class CommandBlocker implements Listener, CommandExecutor {
|
||||
|
||||
private final SurvivalPlus plugin;
|
||||
private FileConfiguration blockedCommandsConfig;
|
||||
private File blockedCommandsFile;
|
||||
private List<String> blockedCommands;
|
||||
|
||||
public CommandBlocker(SurvivalPlus plugin) {
|
||||
this.plugin = plugin;
|
||||
|
||||
// Lade blockedcommands.yml
|
||||
try {
|
||||
blockedCommandsFile = new File(plugin.getDataFolder(), "blockedcommands.yml");
|
||||
if (!blockedCommandsFile.exists()) {
|
||||
plugin.saveResource("blockedcommands.yml", false);
|
||||
}
|
||||
blockedCommandsConfig = YamlConfiguration.loadConfiguration(blockedCommandsFile);
|
||||
blockedCommands = blockedCommandsConfig.getStringList("blocked-commands");
|
||||
if (blockedCommands == null) {
|
||||
blockedCommands = new ArrayList<>();
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
blockedCommands = new ArrayList<>();
|
||||
}
|
||||
|
||||
// Registriere Listener und Command
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
plugin.getCommand("sp").setExecutor(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verarbeitet /sp cb Befehle
|
||||
*/
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (args.length < 2 || !args[0].equalsIgnoreCase("cb")) {
|
||||
return false; // Wird von anderen /sp Subcommands behandelt
|
||||
}
|
||||
|
||||
String subCommand = args[1].toLowerCase();
|
||||
|
||||
switch (subCommand) {
|
||||
case "add":
|
||||
return handleAddCommand(sender, args);
|
||||
case "remove":
|
||||
return handleRemoveCommand(sender, args);
|
||||
case "list":
|
||||
return handleListCommand(sender);
|
||||
default:
|
||||
sender.sendMessage("§cUnbekannter Subcommand! Verfügbare Subcommands: add, remove, list");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* /sp cb add <command>
|
||||
*/
|
||||
private boolean handleAddCommand(CommandSender sender, String[] args) {
|
||||
if (!sender.hasPermission("survivalplus.commandblocker.add")) {
|
||||
sender.sendMessage("§cDu hast keine Berechtigung für diesen Befehl!");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length < 3) {
|
||||
sender.sendMessage("§eBenutzung: /sp cb add <command>");
|
||||
return true;
|
||||
}
|
||||
|
||||
String commandToBlock = args[2].toLowerCase().replaceFirst("^/", "").trim();
|
||||
if (commandToBlock.isEmpty()) {
|
||||
sender.sendMessage("§cBitte gib einen gültigen Befehl an!");
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
if (blockedCommands.contains(commandToBlock)) {
|
||||
sender.sendMessage("§cDer Befehl §e/" + commandToBlock + "§c ist bereits blockiert!");
|
||||
return true;
|
||||
}
|
||||
|
||||
blockedCommands.add(commandToBlock);
|
||||
blockedCommandsConfig.set("blocked-commands", blockedCommands);
|
||||
blockedCommandsConfig.save(blockedCommandsFile);
|
||||
sender.sendMessage("§aDer Befehl §e/" + commandToBlock + "§a wurde zur Blockierliste hinzugefügt.");
|
||||
} catch (Exception ignored) {
|
||||
sender.sendMessage("§cFehler beim Hinzufügen des Befehls!");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* /sp cb remove <command>
|
||||
*/
|
||||
private boolean handleRemoveCommand(CommandSender sender, String[] args) {
|
||||
if (!sender.hasPermission("survivalplus.commandblocker.remove")) {
|
||||
sender.sendMessage("§cDu hast keine Berechtigung für diesen Befehl!");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length < 3) {
|
||||
sender.sendMessage("§eBenutzung: /sp cb remove <command>");
|
||||
return true;
|
||||
}
|
||||
|
||||
String commandToUnblock = args[2].toLowerCase().replaceFirst("^/", "").trim();
|
||||
if (commandToUnblock.isEmpty()) {
|
||||
sender.sendMessage("§cBitte gib einen gültigen Befehl an!");
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
if (!blockedCommands.contains(commandToUnblock)) {
|
||||
sender.sendMessage("§cDer Befehl §e/" + commandToUnblock + "§c ist nicht blockiert!");
|
||||
return true;
|
||||
}
|
||||
|
||||
blockedCommands.remove(commandToUnblock);
|
||||
blockedCommandsConfig.set("blocked-commands", blockedCommands);
|
||||
blockedCommandsConfig.save(blockedCommandsFile);
|
||||
sender.sendMessage("§aDer Befehl §e/" + commandToUnblock + "§a wurde aus der Blockierliste entfernt.");
|
||||
} catch (Exception ignored) {
|
||||
sender.sendMessage("§cFehler beim Entfernen des Befehls!");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* /sp cb list
|
||||
*/
|
||||
private boolean handleListCommand(CommandSender sender) {
|
||||
if (!sender.hasPermission("survivalplus.commandblocker.list")) {
|
||||
sender.sendMessage("§cDu hast keine Berechtigung für diesen Befehl!");
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
if (blockedCommands.isEmpty()) {
|
||||
sender.sendMessage("§eEs sind keine Befehle blockiert.");
|
||||
return true;
|
||||
}
|
||||
|
||||
sender.sendMessage("§6=== Blockierte Befehle ===");
|
||||
for (String cmd : blockedCommands) {
|
||||
sender.sendMessage("§e- /" + cmd);
|
||||
}
|
||||
sender.sendMessage("§6=====================");
|
||||
} catch (Exception ignored) {
|
||||
sender.sendMessage("§cFehler beim Abrufen der Blockierliste!");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Blockiere Befehle, wenn sie in der Liste sind
|
||||
*/
|
||||
@EventHandler
|
||||
public void onPlayerCommand(PlayerCommandPreprocessEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
if (player.hasPermission("survivalplus.commandblocker.bypass")) {
|
||||
return; // Spieler mit Bypass-Berechtigung ignorieren
|
||||
}
|
||||
|
||||
try {
|
||||
String command = event.getMessage().toLowerCase().replaceFirst("^/", "").trim();
|
||||
// Extrahiere den Hauptbefehl (ohne Argumente)
|
||||
String mainCommand = command.split("\\s+")[0];
|
||||
|
||||
if (blockedCommands.contains(mainCommand)) {
|
||||
event.setCancelled(true);
|
||||
player.sendMessage("§cDieser Befehl ist blockiert!");
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
// Keine Konsolenausgabe
|
||||
}
|
||||
}
|
||||
}
|
@@ -3,21 +3,30 @@ package de.viper.survivalplus.Manager;
|
||||
import de.viper.survivalplus.SurvivalPlus;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scoreboard.Scoreboard;
|
||||
import org.bukkit.scoreboard.ScoreboardManager;
|
||||
import org.bukkit.scoreboard.Team;
|
||||
import me.clip.placeholderapi.PlaceholderAPI;
|
||||
import net.luckperms.api.LuckPerms;
|
||||
import net.luckperms.api.LuckPermsProvider;
|
||||
import net.luckperms.api.model.user.User;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Method;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.Map;
|
||||
|
||||
public class TablistManager {
|
||||
public class TablistManager implements Listener {
|
||||
|
||||
private final SurvivalPlus plugin;
|
||||
private final List<String> headerAnim = new ArrayList<>();
|
||||
@@ -34,15 +43,39 @@ public class TablistManager {
|
||||
private String staffPermission;
|
||||
private String separatorLine;
|
||||
private LuckPerms luckPerms;
|
||||
private boolean hasPlaceholderAPI;
|
||||
private final Scoreboard scoreboard;
|
||||
private final Map<String, Team> prefixTeams;
|
||||
private FileConfiguration nicknameConfig;
|
||||
|
||||
public TablistManager(SurvivalPlus plugin) {
|
||||
this.plugin = plugin;
|
||||
this.prefixTeams = new HashMap<>();
|
||||
|
||||
// Scoreboard initialisieren
|
||||
ScoreboardManager scoreboardManager = Bukkit.getScoreboardManager();
|
||||
this.scoreboard = scoreboardManager != null ? scoreboardManager.getMainScoreboard() : null;
|
||||
|
||||
// Resource sicherstellen, Config laden
|
||||
try { plugin.saveResource("tablist.yml", false); } catch (Exception ignored) {}
|
||||
try { plugin.reloadTablistConfig(); } catch (Throwable ignored) {}
|
||||
try {
|
||||
plugin.saveResource("tablist.yml", false);
|
||||
} catch (Exception ignored) {}
|
||||
try {
|
||||
plugin.reloadTablistConfig();
|
||||
} catch (Exception ignored) {}
|
||||
FileConfiguration config = plugin.getTablistConfig();
|
||||
|
||||
// Nicknames.yml laden
|
||||
try {
|
||||
File nicknameFile = new File(plugin.getDataFolder(), "nicknames.yml");
|
||||
if (!nicknameFile.exists()) {
|
||||
plugin.saveResource("nicknames.yml", false);
|
||||
}
|
||||
this.nicknameConfig = YamlConfiguration.loadConfiguration(nicknameFile);
|
||||
} catch (Exception ignored) {
|
||||
this.nicknameConfig = null; // Keine Konsolenausgabe
|
||||
}
|
||||
|
||||
// Konfigurationswerte laden
|
||||
this.enabled = config.getBoolean("enabled", true);
|
||||
this.serverName = config.getString("server-name", "SurvivalPlus");
|
||||
@@ -57,13 +90,16 @@ public class TablistManager {
|
||||
// LuckPerms API initialisieren
|
||||
try {
|
||||
this.luckPerms = LuckPermsProvider.get();
|
||||
} catch (IllegalStateException e) {
|
||||
plugin.getLogger().warning("LuckPerms nicht gefunden! Versuche Fallback auf PlaceholderAPI.");
|
||||
} catch (Throwable e) {
|
||||
luckPerms = null; // Keine Konsolenausgabe
|
||||
}
|
||||
|
||||
// Prüfen, ob PlaceholderAPI verfügbar ist
|
||||
if (!Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||
plugin.getLogger().warning("PlaceholderAPI nicht gefunden! Verwende Standard-Prefix als Fallback.");
|
||||
this.hasPlaceholderAPI = Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI");
|
||||
|
||||
// Chat-Listener registrieren
|
||||
if (enabled) {
|
||||
Bukkit.getPluginManager().registerEvents(this, plugin);
|
||||
}
|
||||
|
||||
if (!enabled) {
|
||||
@@ -112,17 +148,29 @@ public class TablistManager {
|
||||
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
try {
|
||||
// Spieler-Prefix abrufen (LuckPerms primär, PlaceholderAPI als Fallback)
|
||||
String prefix = getPlayerPrefix(player);
|
||||
int ping = getPlayerPing(player);
|
||||
// Korrigierte Formatierung: Gesamten String durch color-Methode leiten
|
||||
String prefixedName = color(prefix + player.getName() + "&8 | &e" + ping + "ms");
|
||||
player.setPlayerListName(prefixedName);
|
||||
// Nickname oder Spielername verwenden
|
||||
String displayName = getNickname(player);
|
||||
if (displayName == null || displayName.trim().isEmpty()) {
|
||||
displayName = player.getName();
|
||||
}
|
||||
|
||||
// Header mit Spielername und Statistiken
|
||||
// Spielername für die Tablist setzen
|
||||
String playerListName;
|
||||
String prefix = getPlayerPrefix(player);
|
||||
if (luckPerms == null && !hasPlaceholderAPI) {
|
||||
playerListName = displayName;
|
||||
updateNametag(player, "", displayName);
|
||||
} else {
|
||||
int ping = getPlayerPing(player);
|
||||
playerListName = color(prefix + displayName + (ping >= 0 ? "&8 | &e" + ping + "ms" : ""));
|
||||
updateNametag(player, prefix, displayName);
|
||||
}
|
||||
player.setPlayerListName(playerListName);
|
||||
|
||||
// Header mit Spielername/Nickname und Statistiken
|
||||
String headerRaw = headerAnim.get(headerIndex)
|
||||
.replace("{server}", serverName)
|
||||
.replace("{player}", player.getName())
|
||||
.replace("{player}", displayName)
|
||||
.replace("{online}", String.valueOf(onlinePlayers))
|
||||
.replace("{staff}", String.valueOf(onlineStaff));
|
||||
String footerRaw = footerAnim.get(footerIndex);
|
||||
@@ -131,7 +179,7 @@ public class TablistManager {
|
||||
StringBuilder footerBuilder = new StringBuilder();
|
||||
footerBuilder.append("\n"); // Extra Abstand
|
||||
footerBuilder.append(color(footerRaw)).append("\n");
|
||||
|
||||
|
||||
footerBuilder.append(color(separatorLine)).append("\n");
|
||||
if (showTeamspeak || showDiscord) {
|
||||
StringBuilder socialLine = new StringBuilder();
|
||||
@@ -161,12 +209,9 @@ public class TablistManager {
|
||||
done = tryStringMethod(player, header, footer);
|
||||
}
|
||||
|
||||
// 3) Wenn alles fehlschlägt -> Log
|
||||
if (!done) {
|
||||
plugin.getLogger().warning("Tablist: Keine geeignete Methode gefunden für Spieler " + player.getName());
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
plugin.getLogger().log(Level.FINE, "Fehler beim Setzen der Tablist für Spieler " + player.getName(), t);
|
||||
// 3) Keine Warnung bei Fehlschlag, da dies normal sein kann
|
||||
} catch (Exception ignored) {
|
||||
// Keine Konsolenausgabe für Fehler bei der Tablist
|
||||
}
|
||||
}
|
||||
|
||||
@@ -176,28 +221,170 @@ public class TablistManager {
|
||||
}.runTaskTimer(plugin, 0L, interval);
|
||||
}
|
||||
|
||||
/**
|
||||
* Nickname aus nicknames.yml abrufen
|
||||
*/
|
||||
private String getNickname(Player player) {
|
||||
if (nicknameConfig == null) return null;
|
||||
try {
|
||||
String uuid = player.getUniqueId().toString();
|
||||
String nickname = nicknameConfig.getString(uuid);
|
||||
if (nickname != null && !nickname.trim().isEmpty()) {
|
||||
try {
|
||||
File debugFile = new File(plugin.getDataFolder(), "debug.yml");
|
||||
FileConfiguration debugConfig = YamlConfiguration.loadConfiguration(debugFile);
|
||||
debugConfig.set(player.getUniqueId().toString() + ".nickname", nickname);
|
||||
debugConfig.save(debugFile);
|
||||
} catch (Exception ignored) {}
|
||||
return nickname;
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
// Keine Konsolenausgabe
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Nametag über dem Kopf aktualisieren
|
||||
*/
|
||||
private void updateNametag(Player player, String prefix, String displayName) {
|
||||
if (scoreboard == null) return;
|
||||
|
||||
try {
|
||||
String teamName = generateTeamName(player, prefix);
|
||||
Team team = scoreboard.getTeam(teamName);
|
||||
|
||||
// Team erstellen oder aktualisieren
|
||||
if (team == null) {
|
||||
team = scoreboard.registerNewTeam(teamName);
|
||||
}
|
||||
|
||||
// Prefix zwingend setzen, wenn LuckPerms installiert ist
|
||||
String coloredPrefix = color(prefix != null && !prefix.trim().isEmpty() ? prefix : (luckPerms != null ? "&7[Spieler] " : ""));
|
||||
team.setPrefix(coloredPrefix);
|
||||
|
||||
// Spieler dem Team hinzufügen
|
||||
String entry = displayName != null && !displayName.trim().isEmpty() ? displayName : player.getName();
|
||||
if (!team.hasEntry(entry)) {
|
||||
// Spieler aus anderen Teams entfernen, um Konflikte zu vermeiden
|
||||
for (Team existingTeam : scoreboard.getTeams()) {
|
||||
if (!existingTeam.getName().equals(teamName)) {
|
||||
existingTeam.removeEntry(entry);
|
||||
existingTeam.removeEntry(player.getName());
|
||||
}
|
||||
}
|
||||
team.addEntry(entry);
|
||||
}
|
||||
|
||||
// Team für alle Spieler sichtbar machen
|
||||
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
|
||||
if (onlinePlayer.getScoreboard() != scoreboard) {
|
||||
onlinePlayer.setScoreboard(scoreboard);
|
||||
}
|
||||
}
|
||||
|
||||
// Debug-Ausgabe für Nametag
|
||||
try {
|
||||
File debugFile = new File(plugin.getDataFolder(), "debug.yml");
|
||||
FileConfiguration debugConfig = YamlConfiguration.loadConfiguration(debugFile);
|
||||
debugConfig.set(player.getUniqueId().toString() + ".nametag_prefix", coloredPrefix);
|
||||
debugConfig.set(player.getUniqueId().toString() + ".nametag_entry", entry);
|
||||
debugConfig.save(debugFile);
|
||||
} catch (Exception ignored) {}
|
||||
} catch (Exception ignored) {
|
||||
// Keine Konsolenausgabe
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Eindeutigen Teamnamen generieren
|
||||
*/
|
||||
private String generateTeamName(Player player, String prefix) {
|
||||
// Verwende UUID für eindeutige Teamnamen, falls kein Prefix vorhanden
|
||||
if (prefix == null || prefix.trim().isEmpty()) {
|
||||
return "nametag_" + player.getUniqueId().toString().substring(0, 8);
|
||||
}
|
||||
// Verwende Prefix für Teamnamen, max 16 Zeichen (Bukkit-Beschränkung)
|
||||
String sanitizedPrefix = prefix.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();
|
||||
return "prefix_" + sanitizedPrefix.substring(0, Math.min(sanitizedPrefix.length(), 12));
|
||||
}
|
||||
|
||||
/**
|
||||
* Spieler-Prefix abrufen (LuckPerms primär, PlaceholderAPI als Fallback)
|
||||
*/
|
||||
private String getPlayerPrefix(Player player) {
|
||||
// Versuche LuckPerms-API zuerst
|
||||
// Wenn LuckPerms installiert ist, Prefix zwingend abrufen
|
||||
if (luckPerms != null) {
|
||||
// Versuche LuckPerms-API zuerst
|
||||
try {
|
||||
User user = luckPerms.getPlayerAdapter(Player.class).getUser(player);
|
||||
String prefix = user.getCachedData().getMetaData().getPrefix();
|
||||
return (prefix == null || prefix.isEmpty()) ? "&7[Spieler] " : prefix + " ";
|
||||
} catch (Exception e) {
|
||||
plugin.getLogger().log(Level.FINE, "Fehler beim Abrufen des Prefix aus LuckPerms für Spieler " + player.getName(), e);
|
||||
if (prefix != null && !prefix.trim().isEmpty()) {
|
||||
try {
|
||||
File debugFile = new File(plugin.getDataFolder(), "debug.yml");
|
||||
FileConfiguration debugConfig = YamlConfiguration.loadConfiguration(debugFile);
|
||||
debugConfig.set(player.getUniqueId().toString() + ".prefix", prefix);
|
||||
debugConfig.save(debugFile);
|
||||
} catch (Exception ignored) {}
|
||||
return prefix + " ";
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
// Keine Konsolenausgabe
|
||||
}
|
||||
|
||||
// Fallback auf PlaceholderAPI, wenn LuckPerms installiert ist
|
||||
if (hasPlaceholderAPI) {
|
||||
try {
|
||||
String prefix = PlaceholderAPI.setPlaceholders(player, "%luckperms_prefix%");
|
||||
if (prefix != null && !prefix.trim().isEmpty()) {
|
||||
try {
|
||||
File debugFile = new File(plugin.getDataFolder(), "debug.yml");
|
||||
FileConfiguration debugConfig = YamlConfiguration.loadConfiguration(debugFile);
|
||||
debugConfig.set(player.getUniqueId().toString() + ".prefix", prefix);
|
||||
debugConfig.save(debugFile);
|
||||
} catch (Exception ignored) {}
|
||||
return prefix + " ";
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
// Keine Konsolenausgabe
|
||||
}
|
||||
}
|
||||
|
||||
// Standard-Prefix, wenn LuckPerms installiert ist, aber kein Prefix definiert
|
||||
try {
|
||||
File debugFile = new File(plugin.getDataFolder(), "debug.yml");
|
||||
FileConfiguration debugConfig = YamlConfiguration.loadConfiguration(debugFile);
|
||||
debugConfig.set(player.getUniqueId().toString() + ".prefix", "&7[Spieler]");
|
||||
debugConfig.save(debugFile);
|
||||
} catch (Exception ignored) {}
|
||||
return "&7[Spieler] ";
|
||||
}
|
||||
|
||||
// Wenn LuckPerms nicht installiert ist, aber PlaceholderAPI vorhanden ist
|
||||
if (hasPlaceholderAPI) {
|
||||
try {
|
||||
String prefix = PlaceholderAPI.setPlaceholders(player, "%luckperms_prefix%");
|
||||
if (prefix != null && !prefix.trim().isEmpty()) {
|
||||
try {
|
||||
File debugFile = new File(plugin.getDataFolder(), "debug.yml");
|
||||
FileConfiguration debugConfig = YamlConfiguration.loadConfiguration(debugFile);
|
||||
debugConfig.set(player.getUniqueId().toString() + ".prefix", prefix);
|
||||
debugConfig.save(debugFile);
|
||||
} catch (Exception ignored) {}
|
||||
return prefix + " ";
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
// Keine Konsolenausgabe
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback auf PlaceholderAPI
|
||||
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||
String prefix = PlaceholderAPI.setPlaceholders(player, "%luckperms_prefix%");
|
||||
return (prefix == null || prefix.isEmpty()) ? "&7[Spieler] " : prefix + " ";
|
||||
}
|
||||
|
||||
// Letzter Fallback: Standard-Prefix
|
||||
// Standard-Prefix, wenn weder LuckPerms noch PlaceholderAPI einen Prefix liefern
|
||||
try {
|
||||
File debugFile = new File(plugin.getDataFolder(), "debug.yml");
|
||||
FileConfiguration debugConfig = YamlConfiguration.loadConfiguration(debugFile);
|
||||
debugConfig.set(player.getUniqueId().toString() + ".prefix", "&7[Spieler]");
|
||||
debugConfig.save(debugFile);
|
||||
} catch (Exception ignored) {}
|
||||
return "&7[Spieler] ";
|
||||
}
|
||||
|
||||
@@ -209,9 +396,28 @@ public class TablistManager {
|
||||
Method getHandle = player.getClass().getMethod("getHandle");
|
||||
Object entityPlayer = getHandle.invoke(player);
|
||||
return entityPlayer.getClass().getField("ping").getInt(entityPlayer);
|
||||
} catch (Exception e) {
|
||||
plugin.getLogger().log(Level.FINE, "Fehler beim Abrufen des Pings für Spieler " + player.getName(), e);
|
||||
return -1;
|
||||
} catch (Exception ignored) {
|
||||
return -1; // Keine Konsolenausgabe
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Chat-Format modifizieren
|
||||
*/
|
||||
@EventHandler
|
||||
public void onPlayerChat(AsyncPlayerChatEvent event) {
|
||||
try {
|
||||
Player player = event.getPlayer();
|
||||
String displayName = getNickname(player);
|
||||
if (displayName == null || displayName.trim().isEmpty()) {
|
||||
displayName = player.getName();
|
||||
}
|
||||
|
||||
String prefix = getPlayerPrefix(player);
|
||||
String format = color(prefix + displayName + "&7: &f") + "%2$s";
|
||||
event.setFormat(format);
|
||||
} catch (Exception ignored) {
|
||||
// Keine Konsolenausgabe
|
||||
}
|
||||
}
|
||||
|
||||
@@ -225,7 +431,9 @@ public class TablistManager {
|
||||
try {
|
||||
textMethod = compClass.getMethod("text", CharSequence.class);
|
||||
} catch (NoSuchMethodException ignored) {
|
||||
try { textMethod = compClass.getMethod("text", String.class); } catch (NoSuchMethodException ignored2) {}
|
||||
try {
|
||||
textMethod = compClass.getMethod("text", String.class);
|
||||
} catch (NoSuchMethodException ignored2) {}
|
||||
}
|
||||
|
||||
Object headerComp = null;
|
||||
@@ -243,8 +451,8 @@ public class TablistManager {
|
||||
Method deserialize = miniMsgClass.getMethod("deserialize", String.class);
|
||||
headerComp = deserialize.invoke(miniMsg, headerRaw);
|
||||
footerComp = deserialize.invoke(miniMsg, footerRaw);
|
||||
} catch (Throwable t) {
|
||||
// kein MiniMessage
|
||||
} catch (Exception ignored) {
|
||||
// Kein MiniMessage
|
||||
}
|
||||
}
|
||||
|
||||
@@ -265,10 +473,7 @@ public class TablistManager {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} catch (ClassNotFoundException cnf) {
|
||||
return false;
|
||||
} catch (Throwable t) {
|
||||
plugin.getLogger().log(Level.FINER, "Adventure-Variante fehlgeschlagen: " + t.getMessage());
|
||||
} catch (Exception ignored) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
@@ -295,8 +500,7 @@ public class TablistManager {
|
||||
mf.invoke(player, footer);
|
||||
return true;
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
plugin.getLogger().log(Level.FINER, "String-Variante fehlgeschlagen: " + t.getMessage());
|
||||
} catch (Exception ignored) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
@@ -311,7 +515,7 @@ public class TablistManager {
|
||||
try {
|
||||
Method m = current.getMethod(name, paramTypes);
|
||||
if (m != null) return m;
|
||||
} catch (NoSuchMethodException ignored) { }
|
||||
} catch (NoSuchMethodException ignored) {}
|
||||
current = current.getSuperclass();
|
||||
}
|
||||
return null;
|
||||
|
@@ -34,7 +34,7 @@ import de.viper.survivalplus.commands.ReportCommand;
|
||||
import de.viper.survivalplus.Manager.ShopManager;
|
||||
import de.viper.survivalplus.commands.HealCommand;
|
||||
import de.viper.survivalplus.Manager.TablistManager;
|
||||
|
||||
import de.viper.survivalplus.Manager.CommandBlocker;
|
||||
import de.viper.survivalplus.Manager.WarpManager;
|
||||
import de.viper.survivalplus.commands.SetWarpCommand;
|
||||
import de.viper.survivalplus.commands.WarpsCommand;
|
||||
@@ -65,7 +65,9 @@ import org.bukkit.permissions.Permission;
|
||||
import org.bukkit.permissions.PermissionDefault;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
public class SurvivalPlus extends JavaPlugin {
|
||||
|
||||
@@ -114,6 +116,13 @@ public class SurvivalPlus extends JavaPlugin {
|
||||
// FunChallengeManager als Feld
|
||||
private FunChallengeManager funChallengeManager;
|
||||
|
||||
private File blockedCommandsFile;
|
||||
private FileConfiguration blockedCommandsConfig;
|
||||
|
||||
// Felder für Executor-Instanzen
|
||||
private LockSystem lockSystem;
|
||||
private PluginCommand pluginCommand;
|
||||
|
||||
// ------------------- Tablist Config -------------------
|
||||
public void reloadTablistConfig() {
|
||||
// Lädt die tablist.yml aus dem Plugin-Ordner neu
|
||||
@@ -132,6 +141,38 @@ public class SurvivalPlus extends JavaPlugin {
|
||||
return tablistConfig;
|
||||
}
|
||||
|
||||
public void reloadBlockedCommandsConfig() {
|
||||
if (blockedCommandsFile == null) blockedCommandsFile = new File(getDataFolder(), "blockedcommands.yml");
|
||||
if (!blockedCommandsFile.exists()) {
|
||||
try {
|
||||
saveResource("blockedcommands.yml", false);
|
||||
} catch (IllegalArgumentException e) {
|
||||
getLogger().warning("Die Ressource 'blockedcommands.yml' wurde nicht gefunden. Erstelle eine leere Konfiguration.");
|
||||
blockedCommandsConfig = new YamlConfiguration();
|
||||
blockedCommandsConfig.createSection("blocked-commands");
|
||||
try {
|
||||
blockedCommandsConfig.save(blockedCommandsFile);
|
||||
} catch (IOException ex) {
|
||||
getLogger().log(Level.SEVERE, "Fehler beim Speichern der blockedcommands.yml", ex);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
blockedCommandsConfig = YamlConfiguration.loadConfiguration(blockedCommandsFile);
|
||||
}
|
||||
|
||||
public FileConfiguration getBlockedCommandsConfig() {
|
||||
if (blockedCommandsConfig == null) {
|
||||
reloadBlockedCommandsConfig();
|
||||
}
|
||||
return blockedCommandsConfig;
|
||||
}
|
||||
|
||||
public void saveBlockedCommandsConfig() {
|
||||
try {
|
||||
blockedCommandsConfig.save(blockedCommandsFile);
|
||||
} catch (IOException ignored) {}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
@@ -164,6 +205,7 @@ public void onEnable() {
|
||||
createLeashesFile();
|
||||
createMobCapFile();
|
||||
createNicknamesFile();
|
||||
reloadBlockedCommandsConfig();
|
||||
|
||||
// PluginManager holen (vor Listener-Registrierung!)
|
||||
PluginManager pluginManager = getServer().getPluginManager();
|
||||
@@ -196,6 +238,10 @@ public void onEnable() {
|
||||
getCommand("day").setExecutor(new DayCommand(this));
|
||||
getCommand("night").setExecutor(new NightCommand(this));
|
||||
|
||||
CommandBlocker commandBlocker = new CommandBlocker(this);
|
||||
pluginCommand = new PluginCommand(this);
|
||||
getCommand("sp").setExecutor(pluginCommand);
|
||||
|
||||
// TradeManager und ReportManager initialisieren
|
||||
TradeManager tradeManager = new TradeManager(this);
|
||||
ReportManager reportManager = new ReportManager(this);
|
||||
@@ -262,6 +308,7 @@ public void onEnable() {
|
||||
getCommand("startchallenge").setExecutor(new StartFunChallengeCommand(this, funChallengeManager));
|
||||
getCommand("kit").setExecutor(new KitCommand(this));
|
||||
getCommand("heal").setExecutor(new HealCommand(this));
|
||||
getCommand("sp").setExecutor(commandBlocker);
|
||||
|
||||
// LootChestManager + Befehle
|
||||
LootChestManager lootChestManager = new LootChestManager(this);
|
||||
@@ -298,10 +345,30 @@ public void onEnable() {
|
||||
pluginManager.registerEvents(new ChallengeSmeltListener(funChallengeManager), this);
|
||||
pluginManager.registerEvents(new BlockDetectionListener(this), this);
|
||||
|
||||
LockSystem lockSystem = new LockSystem(this);
|
||||
lockSystem = new LockSystem(this);
|
||||
pluginManager.registerEvents(lockSystem, this);
|
||||
getCommand("sp").setExecutor(lockSystem);
|
||||
|
||||
// Kombinierter Executor für /sp, um alle Subcommands zu handhaben
|
||||
getCommand("sp").setExecutor(new CommandExecutor() {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (!command.getName().equalsIgnoreCase("sp")) {
|
||||
return false;
|
||||
}
|
||||
if (args.length == 0) {
|
||||
return pluginCommand.onCommand(sender, command, label, args);
|
||||
}
|
||||
String subCommand = args[0].toLowerCase();
|
||||
if (subCommand.equals("cb")) {
|
||||
return commandBlocker.onCommand(sender, command, label, args);
|
||||
} else if (subCommand.equals("lock") || subCommand.equals("unlock") ||
|
||||
subCommand.equals("friendadd") || subCommand.equals("friendremove")) {
|
||||
return lockSystem.onCommand(sender, command, label, args);
|
||||
}
|
||||
return pluginCommand.onCommand(sender, command, label, args);
|
||||
}
|
||||
});
|
||||
|
||||
pluginManager.registerEvents(new RepairSignListener(getConfig(), getLangConfig()), this);
|
||||
pluginManager.registerEvents(new ToolUpgradeListener(this), this);
|
||||
|
4
src/main/resources/blockedcommands.yml
Normal file
4
src/main/resources/blockedcommands.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
blocked-commands:
|
||||
- op
|
||||
- ban
|
||||
- kick
|
@@ -3,17 +3,57 @@ footer: "&6==========================="
|
||||
|
||||
commands:
|
||||
gm:
|
||||
description: "&eWechselt den Spielmodus (survival, creative, adventure, spectator)."
|
||||
usage: "&b/gm [spieler]"
|
||||
description: "&eÄndert den Spielmodus eines Spielers (survival, creative, adventure, spectator)."
|
||||
usage: "&b/gm <modus> [spieler]"
|
||||
|
||||
sp:
|
||||
description: "&eHauptbefehl für SurvivalPlus mit Unterbefehlen."
|
||||
usage: "&b/sp "
|
||||
usage: "&b/sp [reload | help | info | share | lock]"
|
||||
|
||||
share:
|
||||
description: "&eTeilt deine aktuellen Koordinaten nach Bestätigung mit allen Spielern."
|
||||
sp_reload:
|
||||
description: "&eLädt das Plugin neu."
|
||||
usage: "&b/sp reload"
|
||||
|
||||
sp_help:
|
||||
description: "&eZeigt die Hilfe für SurvivalPlus-Befehle an."
|
||||
usage: "&b/sp help"
|
||||
|
||||
sp_info:
|
||||
description: "&eZeigt Informationen über das Plugin an."
|
||||
usage: "&b/sp info"
|
||||
|
||||
sp_share:
|
||||
description: "&eTeilt deine Koordinaten nach Bestätigung mit allen Spielern."
|
||||
usage: "&b/sp share"
|
||||
|
||||
sp_cb_add:
|
||||
description: "&eFügt einen Befehl zur Blockierliste hinzu."
|
||||
usage: "&b/sp cb add <befehl>"
|
||||
|
||||
sp_cb_remove:
|
||||
description: "&eEntfernt einen Befehl aus der Blockierliste."
|
||||
usage: "&b/sp cb remove <befehl>"
|
||||
|
||||
sp_cb_list:
|
||||
description: "&eZeigt die Liste der blockierten Befehle an."
|
||||
usage: "&b/sp cb list"
|
||||
|
||||
sp_lock_lock:
|
||||
description: "&eSperrt einen Container (z.B. Kiste oder Tür)."
|
||||
usage: "&b/sp lock "
|
||||
|
||||
sp_lock_unlock:
|
||||
description: "&eEntsperrt einen Container (z.B. Kiste oder Tür)."
|
||||
usage: "&b/sp lock "
|
||||
|
||||
sp_lock_friendadd:
|
||||
description: "&eFügt einen Freund zum Container-Sperrsystem hinzu."
|
||||
usage: "&b/sp lock friendadd <Spieler>"
|
||||
|
||||
sp_lock_friendremove:
|
||||
description: "&eEntfernt einen Freund aus dem Container-Sperrsystem."
|
||||
usage: "&b/sp lock friendremove <Spieler>"
|
||||
|
||||
shareconfirm:
|
||||
description: "&eBestätigt das Teilen deiner Koordinaten mit allen Spielern."
|
||||
usage: "&b/sp shareconfirm"
|
||||
@@ -23,71 +63,90 @@ commands:
|
||||
usage: "&b/sp sharecancel"
|
||||
|
||||
sethome:
|
||||
description: "&eSetzt einen neuen Homepunkt."
|
||||
usage: "&b/sethome "
|
||||
description: "&eSetzt ein Home mit dem angegebenen Namen."
|
||||
usage: "&b/sethome <name>"
|
||||
|
||||
delhome:
|
||||
description: "&eLöscht einen Homepunkt."
|
||||
usage: "&b/delhome "
|
||||
description: "&eLöscht ein Home mit dem angegebenen Namen."
|
||||
usage: "&b/delhome <name>"
|
||||
|
||||
homelist:
|
||||
description: "&eZeigt alle deine Homes."
|
||||
description: "&eÖffnet eine GUI mit allen Homes."
|
||||
usage: "&b/homelist"
|
||||
|
||||
home:
|
||||
description: "&eTeleportiert dich zu einem gespeicherten Home."
|
||||
usage: "&b/home "
|
||||
description: "&eTeleportiert zu einem Home."
|
||||
usage: "&b/home <name>"
|
||||
|
||||
inv:
|
||||
description: "&eÖffnet dein Inventar oder das eines anderen Spielers."
|
||||
usage: "&b/inv "
|
||||
description: "&eÖffnet das Inventar (eigenes oder das eines anderen Spielers)."
|
||||
usage: "&b/inv [spieler]"
|
||||
|
||||
ec:
|
||||
description: "&eÖffnet deine Endertruhe oder die eines anderen Spielers."
|
||||
description: "&eÖffnet die Endertruhe (eigene oder die eines anderen Spielers)."
|
||||
usage: "&b/ec [spieler]"
|
||||
|
||||
setspawn:
|
||||
description: "&eSetzt den Spawnpunkt der Welt."
|
||||
usage: "&b/setspawn"
|
||||
|
||||
setworldspawn:
|
||||
description: "&eSetzt den globalen Weltspawnpunkt."
|
||||
description: "&eSetzt den Weltspawnpunkt auf die Position des Spielers."
|
||||
usage: "&b/setworldspawn"
|
||||
|
||||
setspawn:
|
||||
description: "&eSetzt den Server-Spawnpunkt auf die Position des Spielers."
|
||||
usage: "&b/setspawn"
|
||||
|
||||
clearchat:
|
||||
description: "&eLöscht den Chat für alle Spieler."
|
||||
usage: "&b/clearchat"
|
||||
|
||||
clearitems:
|
||||
description: "&eEntfernt alle Items auf dem Boden."
|
||||
description: "&eLöscht alle herumliegenden Items."
|
||||
usage: "&b/clearitems"
|
||||
|
||||
closedoors:
|
||||
description: "&eSchließt alle Türen im angegebenen Radius."
|
||||
usage: "&b/closedoors "
|
||||
usage: "&b/closedoors <radius>"
|
||||
|
||||
sit:
|
||||
description: "&eSetzt dich hin oder steht wieder auf."
|
||||
description: "&eLässt den Spieler sich hinsetzen oder aufstehen."
|
||||
usage: "&b/sit"
|
||||
|
||||
back:
|
||||
description: "&eTeleportiert dich zurück zum letzten Todespunkt."
|
||||
description: "&eTeleportiert zum letzten Todespunkt."
|
||||
usage: "&b/back"
|
||||
|
||||
friend:
|
||||
description: "&eVerwalte deine Freundesliste (hinzufügen, entfernen, anzeigen, teleportieren). Unterstützt anklickbare Anfragen und Bestätigungen."
|
||||
usage: "&b/friend [Spieler]"
|
||||
description: "&eVerwaltet die Freundesliste (hinzufügen, entfernen, anzeigen, teleportieren)."
|
||||
usage: "&b/friend [add | accept | deny | list | del | tp] [Spieler]"
|
||||
subcommands:
|
||||
add:
|
||||
description: "&eFügt einen Spieler zur Freundesliste hinzu."
|
||||
usage: "&b/friend add <Spieler>"
|
||||
accept:
|
||||
description: "&eAkzeptiert eine Freundschaftsanfrage."
|
||||
usage: "&b/friend accept <Spieler>"
|
||||
deny:
|
||||
description: "&eLehnt eine Freundschaftsanfrage ab."
|
||||
usage: "&b/friend deny <Spieler>"
|
||||
list:
|
||||
description: "&eZeigt die Freundesliste an."
|
||||
usage: "&b/friend list"
|
||||
del:
|
||||
description: "&eEntfernt einen Spieler aus der Freundesliste."
|
||||
usage: "&b/friend del <Spieler>"
|
||||
tp:
|
||||
description: "&eTeleportiert dich zu einem Freund."
|
||||
usage: "&b/friend tp <Spieler>"
|
||||
|
||||
ir:
|
||||
description: "&eBenennt Items um."
|
||||
usage: "&b/ir "
|
||||
description: "&eBenennt das Item in der Hand um."
|
||||
usage: "&b/ir <neuer_name>"
|
||||
|
||||
showarmorstands:
|
||||
description: "&eZeigt unsichtbare ArmorStands an."
|
||||
description: "&eMacht alle unsichtbaren Armor Stands sichtbar."
|
||||
usage: "&b/showarmorstands"
|
||||
|
||||
cleardebugarmorstands:
|
||||
description: "&eLöscht alle Debug ArmorStands."
|
||||
description: "&eEntfernt alle Debug-ArmorStands."
|
||||
usage: "&b/cleardebugarmorstands"
|
||||
|
||||
trash:
|
||||
@@ -95,76 +154,72 @@ commands:
|
||||
usage: "&b/trash"
|
||||
|
||||
workbench:
|
||||
description: "&eÖffnet eine Werkbank GUI."
|
||||
description: "&eÖffnet eine Werkbank-GUI."
|
||||
usage: "&b/workbench"
|
||||
|
||||
anvil:
|
||||
description: "&eÖffnet eine Amboss GUI."
|
||||
description: "&eÖffnet eine Amboss-GUI."
|
||||
usage: "&b/anvil"
|
||||
|
||||
stats:
|
||||
description: "&eZeigt deine persönlichen Statistiken an."
|
||||
description: "&eZeigt deine Statistiken an."
|
||||
usage: "&b/stats"
|
||||
|
||||
spawn:
|
||||
description: "&eTeleportiert dich zum Welt-Spawnpunkt."
|
||||
description: "&eTeleportiert dich zum Weltspawnpunkt."
|
||||
usage: "&b/spawn"
|
||||
|
||||
lock:
|
||||
description: "&eSchützt Container mit dem LockSystem."
|
||||
usage: "&b/lock [Spieler]"
|
||||
|
||||
tp:
|
||||
description: "&eTeleportiert dich zu einem anderen Spieler."
|
||||
usage: "&b/tp "
|
||||
description: "&eTeleportiert dich zu einem Spieler."
|
||||
usage: "&b/tp <Spieler>"
|
||||
|
||||
tphere:
|
||||
description: "&eTeleportiert einen Spieler zu dir."
|
||||
usage: "&b/tphere "
|
||||
usage: "&b/tphere <Spieler>"
|
||||
|
||||
tpa:
|
||||
description: "&eSendet eine Teleport-Anfrage an einen Spieler."
|
||||
usage: "&b/tpa "
|
||||
description: "&eSendet eine Teleportanfrage an einen Spieler."
|
||||
usage: "&b/tpa <Spieler>"
|
||||
|
||||
tpaccept:
|
||||
description: "&eAkzeptiert eine Teleport-Anfrage."
|
||||
description: "&eAkzeptiert eine Teleportanfrage."
|
||||
usage: "&b/tpaccept"
|
||||
|
||||
tpdeny:
|
||||
description: "&eLehnt eine Teleport-Anfrage ab."
|
||||
description: "&eLehnt eine Teleportanfrage ab."
|
||||
usage: "&b/tpdeny"
|
||||
|
||||
block:
|
||||
description: "&eBlockiert Nachrichten eines Spielers."
|
||||
usage: "&b/block "
|
||||
description: "&eBlockiert einen Spieler."
|
||||
usage: "&b/block <Spieler>"
|
||||
|
||||
unblock:
|
||||
description: "&eHebt eine Blockierung auf."
|
||||
usage: "&b/unblock "
|
||||
description: "&eEntblockt einen Spieler."
|
||||
usage: "&b/unblock <Spieler>"
|
||||
|
||||
blocklist:
|
||||
description: "&eZeigt eine Liste blockierter Spieler."
|
||||
description: "&eZeigt eine Liste der blockierten Spieler."
|
||||
usage: "&b/blocklist"
|
||||
|
||||
kit:
|
||||
description: "&eErhalte dein Starterkit."
|
||||
description: "&eHolt das Starterkit."
|
||||
usage: "&b/kit"
|
||||
|
||||
leashcount:
|
||||
description: "&eZeigt die Anzahl der angeleinten Tiere an."
|
||||
description: "&eZeigt die Anzahl der geleinten Tiere an."
|
||||
usage: "&b/leashcount"
|
||||
|
||||
nick:
|
||||
description: "&eÄndert deinen angezeigten Namen mit Farben (&) und Hex-Farben (#RRGGBB)."
|
||||
usage: "&b/nick "
|
||||
description: "&eÄndert deinen Nicknamen mit Farb- und Hex-Support."
|
||||
usage: "&b/nick <Name>"
|
||||
|
||||
trade:
|
||||
description: "&eStartet einen Handel mit einem Spieler."
|
||||
usage: "&b/trade "
|
||||
lootchests:
|
||||
description: "&eZeigt eine Liste aller aktiven Loot-Kisten an. Admins können per Klick teleportieren."
|
||||
usage: "&b/lootchests"
|
||||
|
||||
tradeaccept:
|
||||
description: "&eAkzeptiert eine Handelsanfrage."
|
||||
usage: "&b/tradeaccept "
|
||||
tploot:
|
||||
description: "&eTeleportiert dich zu einer Loot-Kiste (nur Admins)."
|
||||
usage: "&b/tploot <welt> <x> <y> <z>"
|
||||
|
||||
day:
|
||||
description: "&eSetzt die Zeit auf Tag."
|
||||
@@ -174,33 +229,61 @@ commands:
|
||||
description: "&eSetzt die Zeit auf Nacht."
|
||||
usage: "&b/night"
|
||||
|
||||
trade:
|
||||
description: "&eStartet einen Handel mit einem Spieler."
|
||||
usage: "&b/trade <Spieler>"
|
||||
|
||||
tradeaccept:
|
||||
description: "&eAkzeptiert eine Handelsanfrage."
|
||||
usage: "&b/tradeaccept <Spieler>"
|
||||
|
||||
report:
|
||||
description: "&eMeldet einen Spieler an die Admins."
|
||||
usage: "&b/report [Grund]"
|
||||
usage: "&b/report <Spieler> [Grund]"
|
||||
|
||||
showreport:
|
||||
description: "&eZeigt alle Reports eines Spielers an."
|
||||
usage: "&b/showreport "
|
||||
usage: "&b/showreport <Spieler>"
|
||||
|
||||
clearreport:
|
||||
description: "&eLöscht alle Reports eines Spielers."
|
||||
usage: "&b/clearreport "
|
||||
usage: "&b/clearreport <Spieler>"
|
||||
|
||||
shop:
|
||||
description: "&eVerwaltet den Server-Shop (z.B. Items hinzufügen)."
|
||||
usage: "&b/shop add "
|
||||
usage: "&b/shop add <item> <basispreis> <lagerbestand>"
|
||||
|
||||
setwarp:
|
||||
description: "&eSetzt einen persönlichen Warp mit dem Item in der Hand."
|
||||
usage: "&b/setwarp <name>"
|
||||
|
||||
delwarp:
|
||||
description: "&eLöscht einen persönlichen Warp."
|
||||
usage: "&b/delwarp <name>"
|
||||
|
||||
warps:
|
||||
description: "&eÖffnet die GUI mit allen Spieler-Warps."
|
||||
usage: "&b/warps"
|
||||
|
||||
startchallenge:
|
||||
description: "&eStartet eine Fun-Challenge."
|
||||
usage: "&b/startchallenge <name>"
|
||||
|
||||
heal:
|
||||
description: "&eHeilt einen Spieler vollständig."
|
||||
usage: "&b/heal [spieler]"
|
||||
|
||||
messages:
|
||||
header: "&6=== Befehle ==="
|
||||
footer: "&6================"
|
||||
navigation:
|
||||
prev: "&7« Vorherige "
|
||||
next: "&7 Nächste »"
|
||||
prev-disabled: "&8« "
|
||||
next-disabled: "&8 »"
|
||||
page: "&fSeite {current} von {total} "
|
||||
prev: "&7« Vorherige Seite"
|
||||
next: "&7Nächste Seite »"
|
||||
prev-disabled: "&8« Vorherige Seite"
|
||||
next-disabled: "&8Nächste Seite »"
|
||||
page: "&fSeite {current} von {total}"
|
||||
sp:
|
||||
invalid-subcommand: "&cUngültiger Unterbefehl! Verwendung: /sp [reload|help|info|share]"
|
||||
invalid-subcommand: "&cUngültiger Unterbefehl! Verwendung: /sp [reload|help|info|share|lock]"
|
||||
no-permission: "&cDu hast keine Berechtigung für diesen Befehl!"
|
||||
plugin:
|
||||
reloaded: "&aSurvivalPlus wurde erfolgreich neu geladen!"
|
||||
@@ -215,9 +298,9 @@ messages:
|
||||
preview-title: "&aDeine aktuellen Koordinaten wären:"
|
||||
preview-format: "&e%player% &7teilt Koordinaten: &eX: %x%, Y: %y%, Z: %z% &7in Welt &e%world%"
|
||||
send-button: "&a[✅ Senden]"
|
||||
cancel-button: "&c [❌ Abbrechen]"
|
||||
cancel-button: "&c[❌ Abbrechen]"
|
||||
send-hover: "&aKlicke, um deine Koordinaten an alle zu senden."
|
||||
cancel-hover: "&cKlicke, um das Senden abzubrechen."
|
||||
sent: "&aKoordinaten gesendet."
|
||||
cancelled: "&eSenden der Koordinaten abgebrochen."
|
||||
help-not-found: "&cHilfedatei (help.yml) konnte nicht geladen werden!"
|
||||
help-not-found: "&cHilfedatei (help.yml) konnte nicht geladen werden!"
|
@@ -1,5 +1,5 @@
|
||||
name: SurvivalPlus
|
||||
version: 1.0.5
|
||||
version: 1.0.7
|
||||
main: de.viper.survivalplus.SurvivalPlus
|
||||
api-version: 1.21
|
||||
softdepend: [LuckPerms, PlaceholderAPI]
|
||||
@@ -7,284 +7,272 @@ author: Viper
|
||||
description: A plugin for enhancing survival gameplay in Minecraft.
|
||||
|
||||
commands:
|
||||
sp:
|
||||
description: Hauptbefehl für SurvivalPlus (Command-Blocker, Reload, Info, etc.)
|
||||
usage: /<command> [cb add|cb remove|cb list|reload|help|info|share] [args]
|
||||
permission: survivalplus.sp
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
ir:
|
||||
description: Benennt das Item in der Hand um.
|
||||
usage: /ir <neuer_name>
|
||||
usage: /<command> <neuer_name>
|
||||
permission: survivalplus.itemrename
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
|
||||
gm:
|
||||
description: Ändert den Spielmodus eines Spielers
|
||||
usage: /<command> <modus> [spieler]
|
||||
aliases: [gamemode]
|
||||
permission: survivalplus.gamemode
|
||||
|
||||
sp:
|
||||
description: Zeigt Plugin-Informationen oder führt weitere Befehle aus
|
||||
usage: /<command> [reload|help|info|share] [seite]
|
||||
permission: survivalplus.sp
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
sethome:
|
||||
description: Setzt ein Home mit dem angegebenen Namen
|
||||
usage: /<command> <name>
|
||||
permission: survivalplus.homes.set
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
delhome:
|
||||
description: Löscht ein Home mit dem angegebenen Namen
|
||||
usage: /<command> <name>
|
||||
permission: survivalplus.homes.delete
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
homelist:
|
||||
description: Öffnet eine GUI mit allen Homes
|
||||
usage: /<command>
|
||||
permission: survivalplus.homes.list
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
home:
|
||||
description: Teleportiert zu einem Home
|
||||
usage: /<command> <name>
|
||||
permission: survivalplus.homes
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
inv:
|
||||
description: Öffnet das Inventar (eigenes oder das eines anderen Spielers)
|
||||
usage: /<command> [spieler]
|
||||
permission: survivalplus.inventory.own
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
ec:
|
||||
description: Öffnet die Endertruhe (eigene oder die eines anderen Spielers)
|
||||
usage: /<command> [spieler]
|
||||
permission: survivalplus.enderchest.own
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
setworldspawn:
|
||||
description: Setzt den Weltspawnpunkt auf die Position des Spielers
|
||||
usage: /<command>
|
||||
permission: survivalplus.setworldspawn
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
setspawn:
|
||||
description: Setzt den Server-Spawnpunkt auf die Position des Spielers
|
||||
usage: /<command>
|
||||
permission: survivalplus.setspawn
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
clearchat:
|
||||
description: Löscht den Chat für alle Spieler
|
||||
usage: /<command>
|
||||
permission: survivalplus.clearchat
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
clearitems:
|
||||
description: Löscht alle herumliegenden Items
|
||||
usage: /<command>
|
||||
permission: survivalplus.clearitems
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
closedoors:
|
||||
description: Schließt alle Türen im angegebenen Radius
|
||||
usage: /<command> <radius>
|
||||
permission: survivalplus.closedoors
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
sit:
|
||||
description: Lässt den Spieler sich hinsetzen
|
||||
usage: /<command>
|
||||
permission: survivalplus.sit
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
back:
|
||||
description: Teleportiert zum letzten Todespunkt
|
||||
usage: /<command>
|
||||
permission: survivalplus.back
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
friend:
|
||||
description: Verwaltet die Freundesliste
|
||||
usage: /<command> [add|accept|deny|list|del|tp] [Spielername]
|
||||
permission: survivalplus.friend
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
stats:
|
||||
description: Zeigt deine Statistiken an
|
||||
usage: /stats
|
||||
usage: /<command>
|
||||
permission: survivalplus.stats
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
showarmorstands:
|
||||
description: Macht alle unsichtbaren Armor Stands sichtbar.
|
||||
usage: /showarmorstands
|
||||
usage: /<command>
|
||||
permission: survivalplus.showarmorstands
|
||||
permission-message: "§cDu hast keine Rechte für diesen Befehl."
|
||||
|
||||
cleardebugarmorstands:
|
||||
description: Entfernt alle Debug-ArmorStands
|
||||
usage: /cleardebugarmorstands
|
||||
usage: /<command>
|
||||
permission: survivalplus.cleardebugarmorstands
|
||||
permission-message: "§cDu hast keine Rechte für diesen Befehl."
|
||||
|
||||
trash:
|
||||
description: Öffnet den Mülleimer
|
||||
usage: /trash
|
||||
usage: /<command>
|
||||
permission: survivalplus.trash
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
|
||||
workbench:
|
||||
description: Öffnet eine Werkbank GUI
|
||||
usage: /workbench
|
||||
usage: /<command>
|
||||
permission: survivalplus.workbench
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
|
||||
anvil:
|
||||
description: Öffnet eine Amboss GUI
|
||||
usage: /anvil
|
||||
usage: /<command>
|
||||
permission: survivalplus.anvil
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
|
||||
leashcount:
|
||||
description: Zeigt die Anzahl der geleinten Tiere an.
|
||||
usage: /leashcount
|
||||
usage: /<command>
|
||||
permission: survivalplus.leashcount
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
|
||||
splock:
|
||||
description: Verwaltet das Sperrsystem für Kisten und Türen
|
||||
usage: /sp lock|unlock|friendadd|friendremove [Spieler]
|
||||
usage: /<command> lock|unlock|friendadd|friendremove [Spieler]
|
||||
permission: survivalplus.lock
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
|
||||
tp:
|
||||
description: Teleportiere dich zu einem Spieler
|
||||
usage: /tp <Spieler>
|
||||
|
||||
usage: /<command> <Spieler>
|
||||
permission: survivalplus.tp
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
tphere:
|
||||
description: Teleportiere einen Spieler zu dir
|
||||
usage: /tphere <Spieler>
|
||||
|
||||
usage: /<command> <Spieler>
|
||||
permission: survivalplus.tphere
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
tpa:
|
||||
description: Sende eine Teleportanfrage an einen Spieler
|
||||
usage: /tpa <Spieler>
|
||||
|
||||
usage: /<command> <Spieler>
|
||||
permission: survivalplus.tpa
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
tpaccept:
|
||||
description: Akzeptiere eine Teleportanfrage
|
||||
usage: /tpaccept
|
||||
|
||||
usage: /<command>
|
||||
permission: survivalplus.tpaccept
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
tpdeny:
|
||||
description: Lehne eine Teleportanfrage ab
|
||||
usage: /tpdeny
|
||||
|
||||
usage: /<command>
|
||||
permission: survivalplus.tpdeny
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
block:
|
||||
description: Blockiere einen Spieler
|
||||
usage: /block <Spieler>
|
||||
usage: /<command> <Spieler>
|
||||
permission: survivalplus.block
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
unblock:
|
||||
description: Entblocke einen Spieler
|
||||
usage: /unblock <Spieler>
|
||||
permission: survivalplus.unlock
|
||||
|
||||
usage: /<command> <Spieler>
|
||||
permission: survivalplus.unblock
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
blocklist:
|
||||
description: Zeige eine Liste der blockierten Spieler
|
||||
usage: /blocklist
|
||||
usage: /<command>
|
||||
permission: survivalplus.blocklist
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
kit:
|
||||
description: Hol dir das Starterkit!
|
||||
usage: /kit
|
||||
usage: /<command>
|
||||
permission: survivalplus.kit
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
nick:
|
||||
description: Ändert deinen Nicknamen mit Farb- und Hex-Support.
|
||||
usage: /nick <Name>
|
||||
usage: /<command> <Name>
|
||||
permission: survivalplus.nick
|
||||
permission-message: "§cDu hast keine Berechtigung, deinen Nick zu ändern!"
|
||||
|
||||
lootchests:
|
||||
description: Zeigt eine Liste aller aktiven Loot-Kisten an. Admins können per Klick zu einer Kiste teleportieren.
|
||||
usage: /lootchests
|
||||
usage: /<command>
|
||||
permission: survivalplus.lootchests
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl!"
|
||||
|
||||
tploot:
|
||||
description: Teleportiere dich zu einer Loot-Kiste (nur Admins)
|
||||
usage: /tploot <welt> <x> <y> <z>
|
||||
usage: /<command> <welt> <x> <y> <z>
|
||||
permission: survivalplus.lootchests
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl!"
|
||||
|
||||
day:
|
||||
description: Setzt die Zeit auf Tag
|
||||
usage: /day
|
||||
usage: /<command>
|
||||
permission: survivalplus.day
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
night:
|
||||
description: Setzt die Zeit auf Nacht
|
||||
usage: /night
|
||||
usage: /<command>
|
||||
permission: survivalplus.night
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
trade:
|
||||
description: Startet einen Handel mit einem Spieler
|
||||
usage: /trade <Spieler>
|
||||
usage: /<command> <Spieler>
|
||||
permission: survivalplus.trade
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
tradeaccept:
|
||||
description: Akzeptiert eine Handelsanfrage
|
||||
usage: /tradeaccept <Spieler>
|
||||
usage: /<command> <Spieler>
|
||||
permission: survivalplus.tradeaccept
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
report:
|
||||
description: Meldet einen Spieler an die Admins
|
||||
usage: /report <Spieler> [Grund]
|
||||
usage: /<command> <Spieler> [Grund]
|
||||
permission: survivalplus.report
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
showreport:
|
||||
description: Zeigt alle Reports eines Spielers an
|
||||
usage: /showreport <Spieler>
|
||||
usage: /<command> <Spieler>
|
||||
permission: survivalplus.report.show
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
clearreport:
|
||||
description: Löscht alle Reports eines Spielers
|
||||
usage: /clearreport <Spieler>
|
||||
usage: /<command> <Spieler>
|
||||
permission: survivalplus.report.clear
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
shop:
|
||||
description: Verwalten des Server-Shops (z.B. Items hinzufügen)
|
||||
usage: /shop add <item> <basispreis> <lagerbestand>
|
||||
usage: /<command> add <item> <basispreis> <lagerbestand>
|
||||
permission: survivalplus.shop
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
spawn:
|
||||
description: Teleportiert dich zum Weltspawnpunkt.
|
||||
usage: /spawn
|
||||
usage: /<command>
|
||||
permission: survivalplus.spawn
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
setwarp:
|
||||
description: Setzt einen persönlichen Warp mit dem Item in der Hand.
|
||||
usage: /setwarp <name>
|
||||
usage: /<command> <name>
|
||||
permission: survivalplus.setwarp
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
|
||||
delwarp:
|
||||
description: Löscht einen persönlichen Warp .
|
||||
usage: /delwarp <name>
|
||||
description: Löscht einen persönlichen Warp.
|
||||
usage: /<command> <name>
|
||||
permission: survivalplus.delwarp
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
|
||||
warps:
|
||||
description: Öffnet die GUI mit allen Spieler-Warps.
|
||||
usage: /warps
|
||||
usage: /<command>
|
||||
permission: survivalplus.warps
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
startchallenge:
|
||||
description: Startet eine Fun-Challenge
|
||||
usage: /startchallenge <name>
|
||||
usage: /<command> <name>
|
||||
permission: survivalplus.startchallenge
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
|
||||
permission-message: "§cDu hast keine Berechtigung für diesen Befehl."
|
||||
heal:
|
||||
description: Heilt einen Spieler vollständig
|
||||
usage: /heal [spieler]
|
||||
usage: /<command> [spieler]
|
||||
permission: survivalplus.heal
|
||||
permission-message: "§cDu hast keine Berechtigung, Spieler zu heilen!"
|
||||
|
||||
survivalplus.notify:
|
||||
description: Erhält Benachrichtigungen, wenn ein Spieler einen Command- oder Structure-Block besitzt
|
||||
default: op
|
||||
permission-message: "§cDu hast keine Berechtigung, Spieler zu heilen!"
|
||||
|
||||
permissions:
|
||||
survivalplus.*:
|
||||
description: Gibt Zugriff auf alle SurvivalPlus-Befehle
|
||||
default: op
|
||||
children:
|
||||
survivalplus.commandblocker.add: true
|
||||
survivalplus.commandblocker.remove: true
|
||||
survivalplus.commandblocker.list: true
|
||||
survivalplus.commandblocker.bypass: true
|
||||
survivalplus.gamemode: true
|
||||
survivalplus.gamemode.others: true
|
||||
survivalplus.sp: true
|
||||
@@ -315,194 +303,221 @@ permissions:
|
||||
survivalplus.workbench: true
|
||||
survivalplus.anvil: true
|
||||
survivalplus.leashcount: true
|
||||
survivalplus.lock: true
|
||||
survivalplus.tp: true
|
||||
survivalplus.tphere: true
|
||||
survivalplus.tpa: true
|
||||
survivalplus.tpaccept: true
|
||||
survivalplus.tpdeny: true
|
||||
survivalplus.block: true
|
||||
survivalplus.unblock: true
|
||||
survivalplus.blocklist: true
|
||||
survivalplus.kit: true
|
||||
survivalplus.nick: true
|
||||
survivalplus.lootchests: true
|
||||
survivalplus.day: true
|
||||
survivalplus.night: true
|
||||
survivalplus.trade: true
|
||||
survivalplus.tradeaccept: true
|
||||
survivalplus.report: true
|
||||
survivalplus.report.show: true
|
||||
survivalplus.report.clear: true
|
||||
survivalplus.shop: true
|
||||
survivalplus.spawn: true
|
||||
survivalplus.setwarp: true
|
||||
survivalplus.delwarp: true
|
||||
survivalplus.warps: true
|
||||
survivalplus.startchallenge: true
|
||||
survivalplus.heal: true
|
||||
survivalplus.heal.others: true
|
||||
survivalplus.notify: true
|
||||
|
||||
survivalplus.lootchests:
|
||||
description: Erlaubt das Verwalten und Teleportieren zu Loot-Kisten
|
||||
survivalplus.chunkanimals: true
|
||||
survivalplus.commandblocker.add:
|
||||
description: Erlaubt das Hinzufügen von Befehlen zur Blockierliste
|
||||
default: op
|
||||
survivalplus.commandblocker.remove:
|
||||
description: Erlaubt das Entfernen von Befehlen aus der Blockierliste
|
||||
default: op
|
||||
survivalplus.commandblocker.list:
|
||||
description: Erlaubt das Anzeigen der Blockierliste
|
||||
default: op
|
||||
survivalplus.commandblocker.bypass:
|
||||
description: Erlaubt das Umgehen blockierter Befehle
|
||||
default: op
|
||||
|
||||
survivalplus.gamemode:
|
||||
description: Erlaubt das Ändern des eigenen Spielmodus
|
||||
default: op
|
||||
|
||||
survivalplus.gamemode.others:
|
||||
description: Erlaubt das Ändern des Spielmodus anderer Spieler
|
||||
default: op
|
||||
|
||||
survivalplus.sp:
|
||||
description: Erlaubt den Zugriff auf den /sp-Befehl
|
||||
default: op
|
||||
|
||||
survivalplus.share:
|
||||
description: Erlaubt das Teilen der eigenen Koordinaten mit /sp share
|
||||
default: true
|
||||
|
||||
survivalplus.homes.set:
|
||||
description: Erlaubt das Setzen von Homes
|
||||
default: true
|
||||
|
||||
survivalplus.homes.delete:
|
||||
description: Erlaubt das Löschen von Homes
|
||||
default: true
|
||||
|
||||
survivalplus.homes.list:
|
||||
description: Erlaubt das Öffnen der Home-Liste GUI
|
||||
default: true
|
||||
|
||||
survivalplus.homes:
|
||||
description: Erlaubt das Teleportieren zu Homes
|
||||
default: true
|
||||
|
||||
survivalplus.homes.unlimited:
|
||||
description: Erlaubt unbegrenzte Homes
|
||||
default: op
|
||||
|
||||
survivalplus.inventory.own:
|
||||
description: Erlaubt das Ansehen des eigenen Inventars
|
||||
default: true
|
||||
|
||||
survivalplus.inventory.others:
|
||||
description: Erlaubt das Ansehen des Inventars anderer Spieler
|
||||
default: op
|
||||
|
||||
survivalplus.enderchest.own:
|
||||
description: Erlaubt das Ansehen der eigenen Endertruhe
|
||||
default: true
|
||||
|
||||
survivalplus.enderchest.others:
|
||||
description: Erlaubt das Ansehen der Endertruhen anderer Spieler
|
||||
default: op
|
||||
|
||||
survivalplus.setworldspawn:
|
||||
description: Erlaubt das Setzen des Weltspawnpunkts
|
||||
default: op
|
||||
|
||||
survivalplus.setspawn:
|
||||
description: Erlaubt das Setzen des Server-Spawnpunkts
|
||||
default: op
|
||||
|
||||
survivalplus.clearchat:
|
||||
description: Erlaubt das Löschen des Chats
|
||||
default: op
|
||||
|
||||
survivalplus.clearitems:
|
||||
description: Erlaubt das manuelle Löschen der herumliegenden Items
|
||||
default: op
|
||||
|
||||
survivalplus.closedoors:
|
||||
description: Erlaubt das Schließen von Türen mit /closedoors
|
||||
default: op
|
||||
|
||||
survivalplus.sit:
|
||||
description: Erlaubt das Sitzen auf Treppen oder mit /sit
|
||||
default: true
|
||||
|
||||
survivalplus.graves:
|
||||
description: Erlaubt das Erstellen von Gräbern bei Tod
|
||||
default: true
|
||||
|
||||
survivalplus.back:
|
||||
description: Erlaubt das Teleportieren zum letzten Todespunkt
|
||||
default: true
|
||||
|
||||
survivalplus.graves:
|
||||
description: Erlaubt das Erstellen von Gräbern bei Tod
|
||||
default: true
|
||||
survivalplus.friend:
|
||||
description: Erlaubt die Verwaltung der Freundesliste
|
||||
default: true
|
||||
|
||||
survivalplus.itemrename:
|
||||
description: Erlaubt das Umbenennen von Items mit /ir
|
||||
default: true
|
||||
|
||||
survivalplus.stats:
|
||||
description: Erlaubt den Zugriff auf den /stats-Befehl
|
||||
default: true
|
||||
|
||||
survivalplus.showarmorstands:
|
||||
description: Erlaubt das Sichtbarmachen von Armor Stands mit /showarmorstands
|
||||
default: op
|
||||
|
||||
survivalplus.cleardebugarmorstands:
|
||||
description: Erlaubt das Entfernen von Debug-ArmorStands
|
||||
default: op
|
||||
|
||||
survivalplus.trash:
|
||||
description: Erlaubt die Nutzung von /trash
|
||||
default: true
|
||||
|
||||
survivalplus.workbench:
|
||||
description: Erlaubt die Nutzung von /workbench
|
||||
default: true
|
||||
|
||||
survivalplus.anvil:
|
||||
description: Erlaubt die Nutzung von /anvil
|
||||
default: true
|
||||
|
||||
survivalplus.leashcount:
|
||||
description: Erlaubt die Nutzung von /leashcount
|
||||
default: true
|
||||
|
||||
survivalplus.chunkanimals:
|
||||
description: Erlaubt das Anzeigen der Anzahl der Tiere im aktuellen Chunk
|
||||
default: op
|
||||
|
||||
survivalplus.lock:
|
||||
description: Erlaubt das Verwenden von /lock-Befehlen
|
||||
default: true
|
||||
|
||||
survivalplus.tp:
|
||||
description: Erlaube das Teleportieren zu anderen Spielern
|
||||
description: Erlaubt das Teleportieren zu anderen Spielern
|
||||
default: op
|
||||
|
||||
survivalplus.tphere:
|
||||
description: Erlaube das Teleportieren anderer Spieler zu dir
|
||||
description: Erlaubt das Teleportieren anderer Spieler zu dir
|
||||
default: op
|
||||
|
||||
survivalplus.tpa:
|
||||
description: Erlaube das Senden von Teleportanfragen
|
||||
description: Erlaubt das Senden von Teleportanfragen
|
||||
default: true
|
||||
|
||||
survivalplus.tpaccept:
|
||||
description: Erlaube das Annehmen von Teleportanfragen
|
||||
description: Erlaubt das Annehmen von Teleportanfragen
|
||||
default: true
|
||||
|
||||
survivalplus.tpdeny:
|
||||
description: Erlaube das Ablehnen von Teleportanfragen
|
||||
description: Erlaubt das Ablehnen von Teleportanfragen
|
||||
default: true
|
||||
|
||||
survivalplus.block:
|
||||
description: Erlaubt das Blockieren anderer Spieler im Chat
|
||||
default: true
|
||||
|
||||
survivalplus.info:
|
||||
description: Erlaubt den Zugriff auf /sp info
|
||||
survivalplus.unblock:
|
||||
description: Erlaubt das Entblocken anderer Spieler im Chat
|
||||
default: true
|
||||
survivalplus.blocklist:
|
||||
description: Erlaubt das Anzeigen der blockierten Spieler
|
||||
default: true
|
||||
survivalplus.kit:
|
||||
description: Erlaubt das Abrufen des Starterkits
|
||||
default: true
|
||||
|
||||
survivalplus.nick:
|
||||
description: Erlaubt es, den eigenen Nicknamen zu ändern (mit Farben & Hex)
|
||||
description: Erlaubt das Ändern des eigenen Nicknamens (mit Farben & Hex)
|
||||
default: op
|
||||
survivalplus.lootchests:
|
||||
description: Erlaubt das Verwalten und Teleportieren zu Loot-Kisten
|
||||
default: op
|
||||
survivalplus.day:
|
||||
description: Erlaubt das Setzen der Zeit auf Tag
|
||||
default: op
|
||||
survivalplus.night:
|
||||
description: Erlaubt das Setzen der Zeit auf Nacht
|
||||
default: op
|
||||
survivalplus.trade:
|
||||
description: Erlaubt das Starten eines Handels
|
||||
default: true
|
||||
survivalplus.tradeaccept:
|
||||
description: Erlaubt das Akzeptieren eines Handels
|
||||
default: true
|
||||
survivalplus.report:
|
||||
description: Erlaubt das Melden von Spielern
|
||||
default: true
|
||||
survivalplus.report.show:
|
||||
description: Erlaubt das Anzeigen von Spieler-Reports
|
||||
default: op
|
||||
survivalplus.report.clear:
|
||||
description: Erlaubt das Löschen von Spieler-Reports
|
||||
default: op
|
||||
|
||||
survivalplus.shop:
|
||||
description: Erlaubt die Nutzung des Shop-Befehls
|
||||
default: op
|
||||
|
||||
survivalplus.spawn:
|
||||
description: Erlaubt die Nutzung des /spawn Befehls
|
||||
default: true
|
||||
|
||||
survivalplus.setwarp:
|
||||
description: Erlaubt das Setzen von persönlichen Warps
|
||||
default: true
|
||||
|
||||
survivalplus.delwarp:
|
||||
description: Erlaubt das Löschen von persönlichen Warps
|
||||
default: true
|
||||
survivalplus.warps:
|
||||
description: Erlaubt das Öffnen der Warps-GUI
|
||||
default: true
|
||||
|
||||
delwarp:
|
||||
description: Erlaubt das Löschen von persönlichen Warps
|
||||
default: true
|
||||
|
||||
survivalplus.startchallenge:
|
||||
description: Erlaubt das Starten von Fun-Challenges
|
||||
default: op
|
||||
survivalplus.heal:
|
||||
description: Erlaubt das Heilen des eigenen Spielers
|
||||
default: op
|
||||
survivalplus.heal.others:
|
||||
description: Erlaubt das Heilen anderer Spieler
|
||||
default: op
|
||||
survivalplus.notify:
|
||||
description: Erhält Benachrichtigungen, wenn ein Spieler einen Command- oder Structure-Block besitzt
|
||||
default: op
|
||||
survivalplus.chunkanimals:
|
||||
description: Erlaubt das Anzeigen der Anzahl der Tiere im aktuellen Chunk
|
||||
default: op
|
Reference in New Issue
Block a user