Update from Git Manager GUI
This commit is contained in:
@@ -43,6 +43,7 @@ import de.viper.survivalplus.commands.WarpsCommand;
|
|||||||
import de.viper.survivalplus.fun.FunChallengeManager;
|
import de.viper.survivalplus.fun.FunChallengeManager;
|
||||||
import de.viper.survivalplus.listeners.ChallengeCollectListener;
|
import de.viper.survivalplus.listeners.ChallengeCollectListener;
|
||||||
import de.viper.survivalplus.commands.StartFunChallengeCommand;
|
import de.viper.survivalplus.commands.StartFunChallengeCommand;
|
||||||
|
import de.viper.survivalplus.commands.SurvivalPlusTabCompleter;
|
||||||
|
|
||||||
// --- NEU: Imports für Heads, Vanish & Shops ---
|
// --- NEU: Imports für Heads, Vanish & Shops ---
|
||||||
import de.viper.survivalplus.commands.HeadCommand;
|
import de.viper.survivalplus.commands.HeadCommand;
|
||||||
@@ -339,6 +340,7 @@ public class SurvivalPlus extends JavaPlugin {
|
|||||||
getCommand("sethome").setExecutor(new HomeCommand(this));
|
getCommand("sethome").setExecutor(new HomeCommand(this));
|
||||||
getCommand("delhome").setExecutor(new HomeCommand(this));
|
getCommand("delhome").setExecutor(new HomeCommand(this));
|
||||||
getCommand("homelist").setExecutor(new HomeCommand(this));
|
getCommand("homelist").setExecutor(new HomeCommand(this));
|
||||||
|
getCommand("home").setExecutor(new HomeCommand(this));
|
||||||
getCommand("inv").setExecutor(new InventoryCommand(this));
|
getCommand("inv").setExecutor(new InventoryCommand(this));
|
||||||
getCommand("ec").setExecutor(new EnderchestCommand(this));
|
getCommand("ec").setExecutor(new EnderchestCommand(this));
|
||||||
getCommand("setspawn").setExecutor(new SetSpawnCommand(this));
|
getCommand("setspawn").setExecutor(new SetSpawnCommand(this));
|
||||||
@@ -429,7 +431,7 @@ public class SurvivalPlus extends JavaPlugin {
|
|||||||
|
|
||||||
lockSystem = new LockSystem(this);
|
lockSystem = new LockSystem(this);
|
||||||
pluginManager.registerEvents(lockSystem, this);
|
pluginManager.registerEvents(lockSystem, this);
|
||||||
getCommand("sp").setExecutor(lockSystem);
|
getCommand("splock").setExecutor(lockSystem);
|
||||||
getCommand("sp").setExecutor(new CommandExecutor() {
|
getCommand("sp").setExecutor(new CommandExecutor() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
@@ -451,6 +453,7 @@ public class SurvivalPlus extends JavaPlugin {
|
|||||||
});
|
});
|
||||||
pluginManager.registerEvents(new RepairSignListener(getConfig(), getLangConfig()), this);
|
pluginManager.registerEvents(new RepairSignListener(getConfig(), getLangConfig()), this);
|
||||||
pluginManager.registerEvents(new ToolUpgradeListener(this), this);
|
pluginManager.registerEvents(new ToolUpgradeListener(this), this);
|
||||||
|
registerTabCompleters();
|
||||||
startAutoClearTask();
|
startAutoClearTask();
|
||||||
spawnArmorStandExample();
|
spawnArmorStandExample();
|
||||||
getLogger().info(getMessage("plugin.enabled"));
|
getLogger().info(getMessage("plugin.enabled"));
|
||||||
@@ -459,13 +462,13 @@ public class SurvivalPlus extends JavaPlugin {
|
|||||||
if (Bukkit.getWorlds().isEmpty()) return;
|
if (Bukkit.getWorlds().isEmpty()) return;
|
||||||
Bukkit.getWorlds().forEach(world -> {
|
Bukkit.getWorlds().forEach(world -> {
|
||||||
world.setGameRule(GameRule.KEEP_INVENTORY, false);
|
world.setGameRule(GameRule.KEEP_INVENTORY, false);
|
||||||
getLogger().info("Gamerule keepInventory in Welt '" + world.getName() + "' wurde auf false gesetzt.");
|
logDebug("Gamerule keepInventory in Welt '" + world.getName() + "' wurde auf false gesetzt.");
|
||||||
});
|
});
|
||||||
}, 20L);
|
}, 20L);
|
||||||
}
|
}
|
||||||
if (getConfig().getBoolean("force-survival", true)) {
|
if (getConfig().getBoolean("force-survival", true)) {
|
||||||
pluginManager.registerEvents(new ForceSurvivalListener(this), this);
|
pluginManager.registerEvents(new ForceSurvivalListener(this), this);
|
||||||
getLogger().info("Force-Survival ist aktiv. Spieler werden beim Joinen in Survival gesetzt.");
|
logDebug("Force-Survival ist aktiv. Spieler werden beim Joinen in Survival gesetzt.");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
if (tablistFile == null) tablistFile = new File(getDataFolder(), "tablist.yml");
|
if (tablistFile == null) tablistFile = new File(getDataFolder(), "tablist.yml");
|
||||||
@@ -477,7 +480,7 @@ public class SurvivalPlus extends JavaPlugin {
|
|||||||
if (defStream != null) {
|
if (defStream != null) {
|
||||||
tablistConfig.setDefaults(YamlConfiguration.loadConfiguration(new InputStreamReader(defStream)));
|
tablistConfig.setDefaults(YamlConfiguration.loadConfiguration(new InputStreamReader(defStream)));
|
||||||
}
|
}
|
||||||
getLogger().info("Animierte Tablist wurde geladen!");
|
logDebug("Animierte Tablist wurde geladen!");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
getLogger().log(Level.WARNING, "Fehler beim Laden der Tablist-Konfiguration", e);
|
getLogger().log(Level.WARNING, "Fehler beim Laden der Tablist-Konfiguration", e);
|
||||||
}
|
}
|
||||||
@@ -493,10 +496,10 @@ public class SurvivalPlus extends JavaPlugin {
|
|||||||
} catch (NoSuchMethodError | NoClassDefFoundError e) {
|
} catch (NoSuchMethodError | NoClassDefFoundError e) {
|
||||||
world.setGameRuleValue(GameRule.COMMAND_BLOCK_OUTPUT.getName(), Boolean.toString(cmdAllowed));
|
world.setGameRuleValue(GameRule.COMMAND_BLOCK_OUTPUT.getName(), Boolean.toString(cmdAllowed));
|
||||||
}
|
}
|
||||||
getLogger().info("Gamerule commandBlockOutput in Welt '" + world.getName() + "' gesetzt auf " + cmdAllowed);
|
logDebug("Gamerule commandBlockOutput in Welt '" + world.getName() + "' gesetzt auf " + cmdAllowed);
|
||||||
}
|
}
|
||||||
removeForbiddenBlocksFromInventories(cmdAllowed, structAllowed);
|
removeForbiddenBlocksFromInventories(cmdAllowed, structAllowed);
|
||||||
getLogger().info("Block-Regeln angewendet: CommandBlocks erlaubt=" + cmdAllowed + ", StructureBlocks erlaubt=" + structAllowed);
|
logDebug("Block-Regeln angewendet: CommandBlocks erlaubt=" + cmdAllowed + ", StructureBlocks erlaubt=" + structAllowed);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ensureVersionAtTop(File file, String version) {
|
private void ensureVersionAtTop(File file, String version) {
|
||||||
@@ -563,7 +566,7 @@ private void ensureConfigVersion(FileConfiguration config, File file, String ver
|
|||||||
}
|
}
|
||||||
|
|
||||||
Files.write(file.toPath(), lines, StandardCharsets.UTF_8);
|
Files.write(file.toPath(), lines, StandardCharsets.UTF_8);
|
||||||
getLogger().info("config.yml: Version oben gesetzt auf " + version);
|
logDebug("config.yml: Version oben gesetzt auf " + version);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
getLogger().warning("Konnte Version in config.yml nicht setzen: " + e.getMessage());
|
getLogger().warning("Konnte Version in config.yml nicht setzen: " + e.getMessage());
|
||||||
}
|
}
|
||||||
@@ -885,7 +888,7 @@ private void ensureConfigVersion(FileConfiguration config, File file, String ver
|
|||||||
// Save updated config
|
// Save updated config
|
||||||
try {
|
try {
|
||||||
currentConfig.save(file);
|
currentConfig.save(file);
|
||||||
getLogger().info(fileName + " erfolgreich aktualisiert.");
|
logDebug(fileName + " erfolgreich aktualisiert.");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
getLogger().severe("Fehler beim Speichern der " + fileName + ": " + e.getMessage());
|
getLogger().severe("Fehler beim Speichern der " + fileName + ": " + e.getMessage());
|
||||||
}
|
}
|
||||||
@@ -1113,7 +1116,7 @@ private void ensureConfigVersion(FileConfiguration config, File file, String ver
|
|||||||
if (!leashesFile.exists()) {
|
if (!leashesFile.exists()) {
|
||||||
try {
|
try {
|
||||||
leashesFile.createNewFile();
|
leashesFile.createNewFile();
|
||||||
getLogger().info("leashes.yml wurde erstellt.");
|
logDebug("leashes.yml wurde erstellt.");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
getLogger().severe("Fehler beim Erstellen der leashes.yml: " + e.getMessage());
|
getLogger().severe("Fehler beim Erstellen der leashes.yml: " + e.getMessage());
|
||||||
}
|
}
|
||||||
@@ -1128,7 +1131,7 @@ private void ensureConfigVersion(FileConfiguration config, File file, String ver
|
|||||||
public void saveLeashesConfig() {
|
public void saveLeashesConfig() {
|
||||||
try {
|
try {
|
||||||
leashesConfig.save(leashesFile);
|
leashesConfig.save(leashesFile);
|
||||||
getLogger().info("leashes.yml erfolgreich gespeichert.");
|
logDebug("leashes.yml erfolgreich gespeichert.");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
getLogger().log(Level.SEVERE, "Fehler beim Speichern der leashes.yml: " + e.getMessage());
|
getLogger().log(Level.SEVERE, "Fehler beim Speichern der leashes.yml: " + e.getMessage());
|
||||||
}
|
}
|
||||||
@@ -1136,7 +1139,7 @@ private void ensureConfigVersion(FileConfiguration config, File file, String ver
|
|||||||
|
|
||||||
public void reloadLeashesConfig() {
|
public void reloadLeashesConfig() {
|
||||||
leashesConfig = YamlConfiguration.loadConfiguration(leashesFile);
|
leashesConfig = YamlConfiguration.loadConfiguration(leashesFile);
|
||||||
getLogger().info("leashes.yml erfolgreich neu geladen.");
|
logDebug("leashes.yml erfolgreich neu geladen.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// === MobCap.yml ===
|
// === MobCap.yml ===
|
||||||
@@ -1145,7 +1148,7 @@ private void ensureConfigVersion(FileConfiguration config, File file, String ver
|
|||||||
if (!mobCapFile.exists()) {
|
if (!mobCapFile.exists()) {
|
||||||
try {
|
try {
|
||||||
mobCapFile.createNewFile();
|
mobCapFile.createNewFile();
|
||||||
getLogger().info("mobcap.yml wurde erstellt.");
|
logDebug("mobcap.yml wurde erstellt.");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
getLogger().severe("Fehler beim Erstellen der mobcap.yml: " + e.getMessage());
|
getLogger().severe("Fehler beim Erstellen der mobcap.yml: " + e.getMessage());
|
||||||
}
|
}
|
||||||
@@ -1160,7 +1163,7 @@ private void ensureConfigVersion(FileConfiguration config, File file, String ver
|
|||||||
public void saveMobCapConfig() {
|
public void saveMobCapConfig() {
|
||||||
try {
|
try {
|
||||||
mobCapConfig.save(mobCapFile);
|
mobCapConfig.save(mobCapFile);
|
||||||
getLogger().info("mobcap.yml erfolgreich gespeichert.");
|
logDebug("mobcap.yml erfolgreich gespeichert.");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
getLogger().log(Level.SEVERE, "Fehler beim Speichern der mobcap.yml: " + e.getMessage());
|
getLogger().log(Level.SEVERE, "Fehler beim Speichern der mobcap.yml: " + e.getMessage());
|
||||||
}
|
}
|
||||||
@@ -1168,7 +1171,7 @@ private void ensureConfigVersion(FileConfiguration config, File file, String ver
|
|||||||
|
|
||||||
public void reloadMobCapConfig() {
|
public void reloadMobCapConfig() {
|
||||||
mobCapConfig = YamlConfiguration.loadConfiguration(mobCapFile);
|
mobCapConfig = YamlConfiguration.loadConfiguration(mobCapFile);
|
||||||
getLogger().info("mobcap.yml erfolgreich neu geladen.");
|
logDebug("mobcap.yml erfolgreich neu geladen.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// === NEU: MobAdapt.yml ===
|
// === NEU: MobAdapt.yml ===
|
||||||
@@ -1210,10 +1213,10 @@ private void ensureConfigVersion(FileConfiguration config, File file, String ver
|
|||||||
int intervalTicks = intervalMinutes * 60 * 20; // Minuten in Ticks umrechnen
|
int intervalTicks = intervalMinutes * 60 * 20; // Minuten in Ticks umrechnen
|
||||||
if (intervalTicks > 0) {
|
if (intervalTicks > 0) {
|
||||||
autoClearTaskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new AutoClearTask(this), intervalTicks, intervalTicks);
|
autoClearTaskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new AutoClearTask(this), intervalTicks, intervalTicks);
|
||||||
getLogger().info("AutoClearTask gestartet mit Intervall von " + intervalMinutes + " Minuten.");
|
logDebug("AutoClearTask gestartet mit Intervall von " + intervalMinutes + " Minuten.");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
getLogger().info("AutoClearTask deaktiviert, da auto-clear-enabled auf false gesetzt ist.");
|
logDebug("AutoClearTask deaktiviert, da auto-clear-enabled auf false gesetzt ist.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1283,11 +1286,13 @@ private void ensureConfigVersion(FileConfiguration config, File file, String ver
|
|||||||
|
|
||||||
LockSystem lockSystem = new LockSystem(this);
|
LockSystem lockSystem = new LockSystem(this);
|
||||||
pm.registerEvents(lockSystem, this);
|
pm.registerEvents(lockSystem, this);
|
||||||
getCommand("lock").setExecutor(lockSystem);
|
getCommand("splock").setExecutor(lockSystem);
|
||||||
|
|
||||||
// Commands neu registrieren
|
// Commands neu registrieren
|
||||||
getCommand("friend").setExecutor(friendCommand);
|
getCommand("friend").setExecutor(friendCommand);
|
||||||
|
|
||||||
|
registerTabCompleters();
|
||||||
|
|
||||||
getLogger().info(getMessage("plugin.reloaded"));
|
getLogger().info(getMessage("plugin.reloaded"));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
getLogger().severe("Fehler beim Neuladen des Plugins: " + e.getMessage());
|
getLogger().severe("Fehler beim Neuladen des Plugins: " + e.getMessage());
|
||||||
@@ -1299,6 +1304,14 @@ private void ensureConfigVersion(FileConfiguration config, File file, String ver
|
|||||||
return bannerManager;
|
return bannerManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public WarpManager getWarpManager() {
|
||||||
|
return warpManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FunChallengeManager getFunChallengeManager() {
|
||||||
|
return funChallengeManager;
|
||||||
|
}
|
||||||
|
|
||||||
// Nur Fehler/Exceptions
|
// Nur Fehler/Exceptions
|
||||||
public void log(String msg) {
|
public void log(String msg) {
|
||||||
if (getConfig().getBoolean("debug-logging", false) && debugWriter != null) {
|
if (getConfig().getBoolean("debug-logging", false) && debugWriter != null) {
|
||||||
@@ -1308,6 +1321,25 @@ private void ensureConfigVersion(FileConfiguration config, File file, String ver
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void registerTabCompleters() {
|
||||||
|
SurvivalPlusTabCompleter completer = new SurvivalPlusTabCompleter(this);
|
||||||
|
String[] commands = {
|
||||||
|
"sp", "ir", "gm", "sethome", "delhome", "homelist", "home", "inv", "ec",
|
||||||
|
"setworldspawn", "setspawn", "clearchat", "clearitems", "closedoors", "sit",
|
||||||
|
"back", "friend", "stats", "showarmorstands", "cleardebugarmorstands", "trash",
|
||||||
|
"workbench", "anvil", "leashcount", "splock", "tp", "tphere", "tpa",
|
||||||
|
"tpaccept", "tpdeny", "block", "unblock", "blocklist", "kit", "nick", "ride",
|
||||||
|
"vanish", "freeze", "lootchests", "tploot", "day", "night", "trade", "tradeaccept",
|
||||||
|
"report", "showreport", "clearreport", "shop", "spawn", "setwarp", "delwarp",
|
||||||
|
"warps", "startchallenge", "heal", "claim", "head"
|
||||||
|
};
|
||||||
|
for (String name : commands) {
|
||||||
|
if (getCommand(name) != null) {
|
||||||
|
getCommand(name).setTabCompleter(completer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void logError(String msg, Throwable t) {
|
public void logError(String msg, Throwable t) {
|
||||||
if (getConfig().getBoolean("debug-logging", false) && debugWriter != null) {
|
if (getConfig().getBoolean("debug-logging", false) && debugWriter != null) {
|
||||||
debugWriter.println("[" + new java.util.Date() + "] ERROR: " + msg);
|
debugWriter.println("[" + new java.util.Date() + "] ERROR: " + msg);
|
||||||
@@ -1317,6 +1349,16 @@ private void ensureConfigVersion(FileConfiguration config, File file, String ver
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void logDebug(String msg) {
|
||||||
|
if (!getConfig().getBoolean("debug-logging", false)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (debugWriter != null) {
|
||||||
|
debugWriter.println("[" + new java.util.Date() + "] " + msg);
|
||||||
|
}
|
||||||
|
getLogger().info(msg);
|
||||||
|
}
|
||||||
|
|
||||||
// Komplette Plugin-Logs in console.log
|
// Komplette Plugin-Logs in console.log
|
||||||
public void logConsole(String msg) {
|
public void logConsole(String msg) {
|
||||||
if (getConfig().getBoolean("debug-logging", false) && consoleWriter != null) {
|
if (getConfig().getBoolean("debug-logging", false) && consoleWriter != null) {
|
||||||
|
|||||||
@@ -30,20 +30,32 @@ public class PluginCommand implements CommandExecutor {
|
|||||||
|
|
||||||
// /sp oder /sp help
|
// /sp oder /sp help
|
||||||
if (args.length == 0 || args[0].equalsIgnoreCase("help")) {
|
if (args.length == 0 || args[0].equalsIgnoreCase("help")) {
|
||||||
|
String mode = "all";
|
||||||
int page = 1;
|
int page = 1;
|
||||||
|
|
||||||
if (args.length > 1 && args[0].equalsIgnoreCase("help")) {
|
if (args.length > 1 && args[0].equalsIgnoreCase("help")) {
|
||||||
try {
|
String arg1 = args[1];
|
||||||
page = Integer.parseInt(args[1]);
|
if (isInteger(arg1)) {
|
||||||
if (page < 1) page = 1;
|
page = Integer.parseInt(arg1);
|
||||||
} catch (NumberFormatException e) {
|
} else {
|
||||||
sender.sendMessage(color(lang.getString(
|
mode = arg1.toLowerCase();
|
||||||
"sp.invalid-subcommand",
|
if (args.length > 2) {
|
||||||
"§cUngültiger Unterbefehl! Verwendung: /sp [reload|help|info|share]"
|
String arg2 = args[2];
|
||||||
)));
|
if (isInteger(arg2)) {
|
||||||
return true;
|
page = Integer.parseInt(arg2);
|
||||||
|
} else {
|
||||||
|
sender.sendMessage(color(lang.getString(
|
||||||
|
"sp.invalid-subcommand",
|
||||||
|
"§cUngültiger Unterbefehl! Verwendung: /sp help [player|admin|system|all] [seite]"
|
||||||
|
)));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
showHelp(sender, page);
|
|
||||||
|
if (page < 1) page = 1;
|
||||||
|
showHelp(sender, mode, page);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,7 +187,7 @@ public class PluginCommand implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showHelp(CommandSender sender, int page) {
|
private void showHelp(CommandSender sender, String mode, int page) {
|
||||||
FileConfiguration help = plugin.getHelpConfig();
|
FileConfiguration help = plugin.getHelpConfig();
|
||||||
FileConfiguration lang = plugin.getLangConfig();
|
FileConfiguration lang = plugin.getLangConfig();
|
||||||
|
|
||||||
@@ -184,7 +196,30 @@ public class PluginCommand implements CommandExecutor {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> commands = new ArrayList<>(help.getConfigurationSection("commands").getKeys(false));
|
List<String> orderedCommands = new ArrayList<>(help.getConfigurationSection("commands").getKeys(false));
|
||||||
|
if (orderedCommands.isEmpty()) {
|
||||||
|
sender.sendMessage(color(lang.getString("sp.help-not-found", "&cKeine Befehle verfügbar.")));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String normalizedMode = mode == null ? "all" : mode.toLowerCase();
|
||||||
|
if (!normalizedMode.equals("all") && !normalizedMode.equals("player")
|
||||||
|
&& !normalizedMode.equals("admin") && !normalizedMode.equals("system")) {
|
||||||
|
sender.sendMessage(color(help.getString(
|
||||||
|
"help-usage",
|
||||||
|
"&cVerwendung: /sp help [player|admin|system|all] [seite]"
|
||||||
|
)));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> commands = new ArrayList<>();
|
||||||
|
for (String key : orderedCommands) {
|
||||||
|
String group = help.getString("commands." + key + ".group", "player").toLowerCase();
|
||||||
|
if (normalizedMode.equals("all") || group.equals(normalizedMode)) {
|
||||||
|
commands.add(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (commands.isEmpty()) {
|
if (commands.isEmpty()) {
|
||||||
sender.sendMessage(color(lang.getString("sp.help-not-found", "&cKeine Befehle verfügbar.")));
|
sender.sendMessage(color(lang.getString("sp.help-not-found", "&cKeine Befehle verfügbar.")));
|
||||||
return;
|
return;
|
||||||
@@ -199,19 +234,30 @@ public class PluginCommand implements CommandExecutor {
|
|||||||
int startIndex = (page - 1) * COMMANDS_PER_PAGE;
|
int startIndex = (page - 1) * COMMANDS_PER_PAGE;
|
||||||
int endIndex = Math.min(startIndex + COMMANDS_PER_PAGE, commands.size());
|
int endIndex = Math.min(startIndex + COMMANDS_PER_PAGE, commands.size());
|
||||||
|
|
||||||
|
String lastGroup = null;
|
||||||
for (int i = startIndex; i < endIndex; i++) {
|
for (int i = startIndex; i < endIndex; i++) {
|
||||||
String cmd = commands.get(i);
|
String cmd = commands.get(i);
|
||||||
|
String group = help.getString("commands." + cmd + ".group", "player").toLowerCase();
|
||||||
|
if (lastGroup == null || !lastGroup.equals(group)) {
|
||||||
|
String groupTitle = help.getString("groups." + group + ".title", "&6-- " + group + " --");
|
||||||
|
sender.sendMessage(color(groupTitle));
|
||||||
|
lastGroup = group;
|
||||||
|
}
|
||||||
String usage = help.getString("commands." + cmd + ".usage", "");
|
String usage = help.getString("commands." + cmd + ".usage", "");
|
||||||
String description = help.getString("commands." + cmd + ".description", "");
|
String description = help.getString("commands." + cmd + ".description", "");
|
||||||
sender.sendMessage(color(usage + " §7- " + description));
|
sender.sendMessage(color(usage + " §7- " + description));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sender instanceof Player player) {
|
if (sender instanceof Player player) {
|
||||||
|
String modeSuffix = normalizedMode.equals("all") ? "" : " " + normalizedMode;
|
||||||
|
String navBase = "/sp help" + modeSuffix + " ";
|
||||||
TextComponent navigation = new TextComponent();
|
TextComponent navigation = new TextComponent();
|
||||||
|
|
||||||
if (page > 1) {
|
if (page > 1) {
|
||||||
TextComponent prev = new TextComponent(color(help.getString("navigation.prev", "« Vorherige ")));
|
TextComponent prev = new TextComponent(color(help.getString("navigation.prev", "« Vorherige ")));
|
||||||
prev.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/sp help " + (page - 1)));
|
prev.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, navBase + (page - 1)));
|
||||||
|
prev.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
|
||||||
|
new ComponentBuilder("§7Klicke für Seite " + (page - 1)).create()));
|
||||||
navigation.addExtra(prev);
|
navigation.addExtra(prev);
|
||||||
} else {
|
} else {
|
||||||
navigation.addExtra(color(help.getString("navigation.prev-disabled", "« ")));
|
navigation.addExtra(color(help.getString("navigation.prev-disabled", "« ")));
|
||||||
@@ -224,7 +270,9 @@ public class PluginCommand implements CommandExecutor {
|
|||||||
|
|
||||||
if (page < totalPages) {
|
if (page < totalPages) {
|
||||||
TextComponent next = new TextComponent(color(help.getString("navigation.next", " Nächste »")));
|
TextComponent next = new TextComponent(color(help.getString("navigation.next", " Nächste »")));
|
||||||
next.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/sp help " + (page + 1)));
|
next.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, navBase + (page + 1)));
|
||||||
|
next.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
|
||||||
|
new ComponentBuilder("§7Klicke für Seite " + (page + 1)).create()));
|
||||||
navigation.addExtra(next);
|
navigation.addExtra(next);
|
||||||
} else {
|
} else {
|
||||||
navigation.addExtra(color(help.getString("navigation.next-disabled", " »")));
|
navigation.addExtra(color(help.getString("navigation.next-disabled", " »")));
|
||||||
@@ -242,6 +290,18 @@ public class PluginCommand implements CommandExecutor {
|
|||||||
sender.sendMessage(color(help.getString("footer", "&7==========================")));
|
sender.sendMessage(color(help.getString("footer", "&7==========================")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isInteger(String value) {
|
||||||
|
if (value == null || value.isEmpty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < value.length(); i++) {
|
||||||
|
if (!Character.isDigit(value.charAt(i))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private String color(String input) {
|
private String color(String input) {
|
||||||
return ChatColor.translateAlternateColorCodes('&', input == null ? "" : input);
|
return ChatColor.translateAlternateColorCodes('&', input == null ? "" : input);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,369 @@
|
|||||||
|
package de.viper.survivalplus.commands;
|
||||||
|
|
||||||
|
import de.viper.survivalplus.SurvivalPlus;
|
||||||
|
import de.viper.survivalplus.Manager.Warp;
|
||||||
|
import de.viper.survivalplus.Manager.WarpManager;
|
||||||
|
import de.viper.survivalplus.fun.FunChallenge;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabCompleter;
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class SurvivalPlusTabCompleter implements TabCompleter {
|
||||||
|
|
||||||
|
private static final List<String> SP_SUBCOMMANDS = List.of(
|
||||||
|
"help", "reload", "info", "share", "shareconfirm", "sharecancel", "cb",
|
||||||
|
"lock", "unlock", "friendadd", "friendremove"
|
||||||
|
);
|
||||||
|
private static final List<String> SP_CB_SUBCOMMANDS = List.of("add", "remove", "list");
|
||||||
|
private static final List<String> FRIEND_SUBCOMMANDS = List.of("add", "accept", "deny", "list", "del", "confirm", "tp");
|
||||||
|
private static final List<String> CLAIM_SUBCOMMANDS = List.of("mark", "unclaim", "del", "delete", "trust", "untrust", "info", "kick", "ban", "unban");
|
||||||
|
private static final List<String> SPLOCK_SUBCOMMANDS = List.of("lock", "unlock", "friendadd", "friendremove");
|
||||||
|
private static final List<String> SHOP_SUBCOMMANDS = List.of("gui", "add");
|
||||||
|
private static final List<String> NICK_SUBCOMMANDS = List.of("off", "remove", "reset");
|
||||||
|
private static final List<String> GAMEMODE_SUBCOMMANDS = List.of("0", "1", "2", "3", "survival", "creative", "adventure", "spectator");
|
||||||
|
|
||||||
|
private final SurvivalPlus plugin;
|
||||||
|
|
||||||
|
public SurvivalPlusTabCompleter(SurvivalPlus plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
String cmd = command.getName().toLowerCase(Locale.ROOT);
|
||||||
|
if (args.length == 0) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (cmd) {
|
||||||
|
case "sp":
|
||||||
|
return completeSp(sender, args);
|
||||||
|
case "friend":
|
||||||
|
return completeFriend(sender, args);
|
||||||
|
case "claim":
|
||||||
|
return completeClaim(sender, args);
|
||||||
|
case "splock":
|
||||||
|
return completeSplock(sender, args);
|
||||||
|
case "shop":
|
||||||
|
return completeShop(sender, args);
|
||||||
|
case "nick":
|
||||||
|
return filterPrefix(NICK_SUBCOMMANDS, args[0]);
|
||||||
|
case "gm":
|
||||||
|
return completeGamemode(sender, args);
|
||||||
|
case "tp":
|
||||||
|
case "tphere":
|
||||||
|
case "tpa":
|
||||||
|
case "trade":
|
||||||
|
case "tradeaccept":
|
||||||
|
case "report":
|
||||||
|
case "showreport":
|
||||||
|
case "clearreport":
|
||||||
|
case "block":
|
||||||
|
case "unblock":
|
||||||
|
case "head":
|
||||||
|
case "freeze":
|
||||||
|
return completePlayerArg(sender, args);
|
||||||
|
case "heal":
|
||||||
|
case "inv":
|
||||||
|
case "ec":
|
||||||
|
case "ride":
|
||||||
|
return completeOptionalPlayerArg(sender, args);
|
||||||
|
case "tploot":
|
||||||
|
return completeTploot(args);
|
||||||
|
case "startchallenge":
|
||||||
|
return completeChallenges(args);
|
||||||
|
case "delwarp":
|
||||||
|
return completePlayerWarpNames(sender, args);
|
||||||
|
case "home":
|
||||||
|
case "delhome":
|
||||||
|
return completePlayerHomeNames(sender, args);
|
||||||
|
default:
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> completeSp(CommandSender sender, String[] args) {
|
||||||
|
if (args.length == 1) {
|
||||||
|
return filterPrefix(SP_SUBCOMMANDS, args[0]);
|
||||||
|
}
|
||||||
|
if (args.length == 2 && args[0].equalsIgnoreCase("cb")) {
|
||||||
|
return filterPrefix(SP_CB_SUBCOMMANDS, args[1]);
|
||||||
|
}
|
||||||
|
if (args.length == 3 && args[0].equalsIgnoreCase("cb") && args[1].equalsIgnoreCase("remove")) {
|
||||||
|
return filterPrefix(getBlockedCommands(), args[2]);
|
||||||
|
}
|
||||||
|
if (args.length == 2 && (args[0].equalsIgnoreCase("friendadd") || args[0].equalsIgnoreCase("friendremove"))) {
|
||||||
|
return filterPrefix(getOnlinePlayerNames(sender), args[1]);
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> completeFriend(CommandSender sender, String[] args) {
|
||||||
|
if (args.length == 1) {
|
||||||
|
return filterPrefix(FRIEND_SUBCOMMANDS, args[0]);
|
||||||
|
}
|
||||||
|
if (args.length == 2) {
|
||||||
|
String sub = args[0].toLowerCase(Locale.ROOT);
|
||||||
|
if (sub.equals("add") || sub.equals("accept") || sub.equals("deny") || sub.equals("tp")) {
|
||||||
|
return filterPrefix(getOnlinePlayerNames(sender), args[1]);
|
||||||
|
}
|
||||||
|
if (sub.equals("del") || sub.equals("confirm")) {
|
||||||
|
return filterPrefix(getFriendNames(sender), args[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> completeClaim(CommandSender sender, String[] args) {
|
||||||
|
if (args.length == 1) {
|
||||||
|
return filterPrefix(CLAIM_SUBCOMMANDS, args[0]);
|
||||||
|
}
|
||||||
|
if (args.length == 2) {
|
||||||
|
String sub = args[0].toLowerCase(Locale.ROOT);
|
||||||
|
if (sub.equals("mark")) {
|
||||||
|
return filterPrefix(List.of("1", "2"), args[1]);
|
||||||
|
}
|
||||||
|
if (sub.equals("trust") || sub.equals("untrust") || sub.equals("kick") || sub.equals("ban") || sub.equals("unban")
|
||||||
|
|| sub.equals("unclaim") || sub.equals("del") || sub.equals("delete")) {
|
||||||
|
return filterPrefix(getOnlinePlayerNames(sender), args[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> completeSplock(CommandSender sender, String[] args) {
|
||||||
|
if (args.length == 1) {
|
||||||
|
return filterPrefix(SPLOCK_SUBCOMMANDS, args[0]);
|
||||||
|
}
|
||||||
|
if (args.length == 2) {
|
||||||
|
String sub = args[0].toLowerCase(Locale.ROOT);
|
||||||
|
if (sub.equals("friendadd") || sub.equals("friendremove")) {
|
||||||
|
return filterPrefix(getOnlinePlayerNames(sender), args[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> completeShop(CommandSender sender, String[] args) {
|
||||||
|
if (args.length == 1) {
|
||||||
|
return filterPrefix(SHOP_SUBCOMMANDS, args[0]);
|
||||||
|
}
|
||||||
|
if (args.length == 2 && args[0].equalsIgnoreCase("add")) {
|
||||||
|
String prefix = args[1];
|
||||||
|
if (prefix.length() < 2) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
return getMaterialNames(prefix);
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> completeGamemode(CommandSender sender, String[] args) {
|
||||||
|
if (args.length == 1) {
|
||||||
|
return filterPrefix(GAMEMODE_SUBCOMMANDS, args[0]);
|
||||||
|
}
|
||||||
|
if (args.length == 2) {
|
||||||
|
return filterPrefix(getOnlinePlayerNames(sender), args[1]);
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> completePlayerArg(CommandSender sender, String[] args) {
|
||||||
|
if (args.length == 1) {
|
||||||
|
return filterPrefix(getOnlinePlayerNames(sender), args[0]);
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> completeOptionalPlayerArg(CommandSender sender, String[] args) {
|
||||||
|
if (args.length == 1) {
|
||||||
|
return filterPrefix(getOnlinePlayerNames(sender), args[0]);
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> completeTploot(String[] args) {
|
||||||
|
if (args.length == 1) {
|
||||||
|
return filterPrefix(getWorldNames(), args[0]);
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> completeChallenges(String[] args) {
|
||||||
|
if (args.length == 1) {
|
||||||
|
return filterPrefix(getChallengeNames(), args[0]);
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> completePlayerHomeNames(CommandSender sender, String[] args) {
|
||||||
|
if (args.length == 1) {
|
||||||
|
return filterPrefix(getHomeNames(sender), args[0]);
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> completePlayerWarpNames(CommandSender sender, String[] args) {
|
||||||
|
if (args.length == 1) {
|
||||||
|
return filterPrefix(getWarpNames(sender), args[0]);
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> getOnlinePlayerNames(CommandSender sender) {
|
||||||
|
List<String> names = new ArrayList<>();
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
|
if (!player.getName().equalsIgnoreCase(sender.getName())) {
|
||||||
|
names.add(player.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> getBlockedCommands() {
|
||||||
|
FileConfiguration blocked = plugin.getBlockedCommandsConfig();
|
||||||
|
if (blocked == null) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
List<String> commands = blocked.getStringList("blocked-commands");
|
||||||
|
return commands == null ? Collections.emptyList() : commands;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> getFriendNames(CommandSender sender) {
|
||||||
|
if (!(sender instanceof Player player)) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
FileConfiguration friends = plugin.getFriendsConfig();
|
||||||
|
if (friends == null) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
List<String> friendIds = friends.getStringList(player.getUniqueId().toString() + ".friends");
|
||||||
|
if (friendIds == null || friendIds.isEmpty()) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
List<String> names = new ArrayList<>();
|
||||||
|
for (String id : friendIds) {
|
||||||
|
try {
|
||||||
|
UUID uuid = UUID.fromString(id);
|
||||||
|
OfflinePlayer offline = Bukkit.getOfflinePlayer(uuid);
|
||||||
|
if (offline.getName() != null) {
|
||||||
|
names.add(offline.getName());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String storedName = friends.getString(id + ".name");
|
||||||
|
if (storedName != null && !storedName.isEmpty()) {
|
||||||
|
names.add(storedName);
|
||||||
|
}
|
||||||
|
} catch (IllegalArgumentException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> getHomeNames(CommandSender sender) {
|
||||||
|
if (!(sender instanceof Player player)) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
FileConfiguration homes = plugin.getHomesConfig();
|
||||||
|
if (homes == null) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
String path = "homes." + player.getUniqueId();
|
||||||
|
if (homes.getConfigurationSection(path) == null) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
return new ArrayList<>(homes.getConfigurationSection(path).getKeys(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> getWarpNames(CommandSender sender) {
|
||||||
|
if (!(sender instanceof Player player)) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
WarpManager warpManager = plugin.getWarpManager();
|
||||||
|
if (warpManager == null) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
List<String> warps = new ArrayList<>();
|
||||||
|
for (Warp warp : warpManager.getWarps().values()) {
|
||||||
|
if (warp.getOwner().equalsIgnoreCase(player.getName())) {
|
||||||
|
warps.add(warp.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return warps;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> getChallengeNames() {
|
||||||
|
if (plugin.getFunChallengeManager() == null) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
List<String> names = new ArrayList<>();
|
||||||
|
for (FunChallenge challenge : plugin.getFunChallengeManager().getChallenges()) {
|
||||||
|
names.add(challenge.getName());
|
||||||
|
}
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> getWorldNames() {
|
||||||
|
List<String> names = new ArrayList<>();
|
||||||
|
for (World world : Bukkit.getWorlds()) {
|
||||||
|
names.add(world.getName());
|
||||||
|
}
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> getMaterialNames(String prefix) {
|
||||||
|
List<String> names = new ArrayList<>();
|
||||||
|
String normalized = prefix == null ? "" : prefix.toUpperCase(Locale.ROOT);
|
||||||
|
for (Material material : Material.values()) {
|
||||||
|
if (!material.isItem() || material == Material.AIR) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String name = material.name();
|
||||||
|
if (name.startsWith(normalized)) {
|
||||||
|
names.add(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Collections.sort(names);
|
||||||
|
if (names.size() > 25) {
|
||||||
|
return new ArrayList<>(names.subList(0, 25));
|
||||||
|
}
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> filterPrefix(Collection<String> options, String prefix) {
|
||||||
|
if (options == null || options.isEmpty()) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
String normalized = prefix == null ? "" : prefix.toLowerCase(Locale.ROOT);
|
||||||
|
List<String> results = new ArrayList<>();
|
||||||
|
Set<String> dedup = new HashSet<>();
|
||||||
|
for (String option : options) {
|
||||||
|
if (option == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String value = option.toString();
|
||||||
|
if (value.toLowerCase(Locale.ROOT).startsWith(normalized)) {
|
||||||
|
if (dedup.add(value)) {
|
||||||
|
results.add(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Collections.sort(results);
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -32,7 +32,7 @@ public class MobCapListener implements Listener {
|
|||||||
public void reloadConfig(FileConfiguration config) {
|
public void reloadConfig(FileConfiguration config) {
|
||||||
this.enabled = config.getBoolean("mob-cap.enabled", true);
|
this.enabled = config.getBoolean("mob-cap.enabled", true);
|
||||||
this.maxAnimalsPerChunk = config.getInt("mob-cap.max-animals-per-chunk", 10);
|
this.maxAnimalsPerChunk = config.getInt("mob-cap.max-animals-per-chunk", 10);
|
||||||
plugin.getLogger().info("MobCapListener: enabled=" + enabled + ", maxAnimalsPerChunk=" + maxAnimalsPerChunk);
|
plugin.logDebug("MobCapListener: enabled=" + enabled + ", maxAnimalsPerChunk=" + maxAnimalsPerChunk);
|
||||||
|
|
||||||
// Bereinige bestehende Daten
|
// Bereinige bestehende Daten
|
||||||
chunkAnimalMap.clear();
|
chunkAnimalMap.clear();
|
||||||
@@ -40,7 +40,7 @@ public class MobCapListener implements Listener {
|
|||||||
if (!enabled) {
|
if (!enabled) {
|
||||||
plugin.getMobCapConfig().set("mobcap", null); // Bereinige mobcap.yml
|
plugin.getMobCapConfig().set("mobcap", null); // Bereinige mobcap.yml
|
||||||
plugin.saveMobCapConfig();
|
plugin.saveMobCapConfig();
|
||||||
plugin.getLogger().info("MobCapListener: Daten bereinigt, da enabled=false");
|
plugin.logDebug("MobCapListener: Daten bereinigt, da enabled=false");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,7 +89,7 @@ public class MobCapListener implements Listener {
|
|||||||
|
|
||||||
// Speichere aktualisierte mobcap.yml
|
// Speichere aktualisierte mobcap.yml
|
||||||
saveChunkAnimalMap();
|
saveChunkAnimalMap();
|
||||||
plugin.getLogger().info("MobCapListener: Nach Reload " + chunkAnimalMap.size() + " Chunks mit Tieren gefunden.");
|
plugin.logDebug("MobCapListener: Nach Reload " + chunkAnimalMap.size() + " Chunks mit Tieren gefunden.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@@ -106,7 +106,7 @@ public class MobCapListener implements Listener {
|
|||||||
int animalCount = animalToPlayer.size();
|
int animalCount = animalToPlayer.size();
|
||||||
if (animalCount >= maxAnimalsPerChunk) {
|
if (animalCount >= maxAnimalsPerChunk) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
plugin.getLogger().info("Spawn von " + entity.getType() + " in Chunk " + chunkKey + " verhindert: Limit von " + maxAnimalsPerChunk + " erreicht.");
|
plugin.logDebug("Spawn von " + entity.getType() + " in Chunk " + chunkKey + " verhindert: Limit von " + maxAnimalsPerChunk + " erreicht.");
|
||||||
|
|
||||||
// HINWEIS: Wenn du dem Züchter eine Nachricht schicken willst, nutze EntityBreedEvent
|
// HINWEIS: Wenn du dem Züchter eine Nachricht schicken willst, nutze EntityBreedEvent
|
||||||
// Hier ist das nicht möglich, weil man beim Spawn keinen Spielerzugriff hat
|
// Hier ist das nicht möglich, weil man beim Spawn keinen Spielerzugriff hat
|
||||||
@@ -132,7 +132,7 @@ public class MobCapListener implements Listener {
|
|||||||
if (animalCount >= maxAnimalsPerChunk) {
|
if (animalCount >= maxAnimalsPerChunk) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
player.sendMessage(plugin.getMessage("mob-cap.limit-reached").replace("%max%", String.valueOf(maxAnimalsPerChunk)));
|
player.sendMessage(plugin.getMessage("mob-cap.limit-reached").replace("%max%", String.valueOf(maxAnimalsPerChunk)));
|
||||||
plugin.getLogger().info("Interaktion mit " + entity.getType() + " in Chunk " + chunkKey + " verhindert: Limit von " + maxAnimalsPerChunk + " erreicht.");
|
plugin.logDebug("Interaktion mit " + entity.getType() + " in Chunk " + chunkKey + " verhindert: Limit von " + maxAnimalsPerChunk + " erreicht.");
|
||||||
} else {
|
} else {
|
||||||
animalToPlayer.put(entity.getUniqueId(), player.getUniqueId());
|
animalToPlayer.put(entity.getUniqueId(), player.getUniqueId());
|
||||||
saveChunkAnimalMap();
|
saveChunkAnimalMap();
|
||||||
@@ -157,7 +157,7 @@ public class MobCapListener implements Listener {
|
|||||||
chunkAnimalMap.remove(chunkKey);
|
chunkAnimalMap.remove(chunkKey);
|
||||||
}
|
}
|
||||||
saveChunkAnimalMap();
|
saveChunkAnimalMap();
|
||||||
plugin.getLogger().info("Tier " + entity.getType() + " in Chunk " + chunkKey + " gestorben. Verbleibende Tiere: " + animalToPlayer.size());
|
plugin.logDebug("Tier " + entity.getType() + " in Chunk " + chunkKey + " gestorben. Verbleibende Tiere: " + animalToPlayer.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public class MobLeashLimitListener implements Listener {
|
|||||||
public void reloadConfig(FileConfiguration config) {
|
public void reloadConfig(FileConfiguration config) {
|
||||||
this.enabled = config.getBoolean("mob-leash-limit.enabled", true);
|
this.enabled = config.getBoolean("mob-leash-limit.enabled", true);
|
||||||
this.maxLeashCount = config.getInt("mob-leash-limit.max-leash-count", 5);
|
this.maxLeashCount = config.getInt("mob-leash-limit.max-leash-count", 5);
|
||||||
plugin.getLogger().info("MobLeashLimitListener: enabled=" + enabled + ", maxLeashCount=" + maxLeashCount);
|
plugin.logDebug("MobLeashLimitListener: enabled=" + enabled + ", maxLeashCount=" + maxLeashCount);
|
||||||
|
|
||||||
// Bereinige bestehende Daten
|
// Bereinige bestehende Daten
|
||||||
leashedEntities.clear();
|
leashedEntities.clear();
|
||||||
@@ -40,7 +40,7 @@ public class MobLeashLimitListener implements Listener {
|
|||||||
if (!enabled) {
|
if (!enabled) {
|
||||||
plugin.getLeashesConfig().set("leashes", null); // Bereinige leashes.yml
|
plugin.getLeashesConfig().set("leashes", null); // Bereinige leashes.yml
|
||||||
plugin.saveLeashesConfig();
|
plugin.saveLeashesConfig();
|
||||||
plugin.getLogger().info("MobLeashLimitListener: Daten bereinigt, da enabled=false");
|
plugin.logDebug("MobLeashLimitListener: Daten bereinigt, da enabled=false");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,7 +119,7 @@ public class MobLeashLimitListener implements Listener {
|
|||||||
// Speichere aktualisierte leashes.yml
|
// Speichere aktualisierte leashes.yml
|
||||||
plugin.saveLeashesConfig();
|
plugin.saveLeashesConfig();
|
||||||
|
|
||||||
plugin.getLogger().info("MobLeashLimitListener: Nach Reload " + leashedEntities.size() + " Spieler mit angeleinten Tieren gefunden.");
|
plugin.logDebug("MobLeashLimitListener: Nach Reload " + leashedEntities.size() + " Spieler mit angeleinten Tieren gefunden.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@@ -135,7 +135,7 @@ public class MobLeashLimitListener implements Listener {
|
|||||||
if (itemInHand != null && itemInHand.getType() == Material.LEAD) {
|
if (itemInHand != null && itemInHand.getType() == Material.LEAD) {
|
||||||
Set<UUID> playerLeashedEntities = leashedEntities.computeIfAbsent(playerId, k -> new HashSet<>());
|
Set<UUID> playerLeashedEntities = leashedEntities.computeIfAbsent(playerId, k -> new HashSet<>());
|
||||||
int currentCount = playerLeashedEntities.size();
|
int currentCount = playerLeashedEntities.size();
|
||||||
plugin.getLogger().info("PlayerInteractEntity: player=" + player.getName() + ", currentCount=" + currentCount + ", maxLeashCount=" + maxLeashCount);
|
plugin.logDebug("PlayerInteractEntity: player=" + player.getName() + ", currentCount=" + currentCount + ", maxLeashCount=" + maxLeashCount);
|
||||||
|
|
||||||
if (playerLeashedEntities.contains(entityId)) {
|
if (playerLeashedEntities.contains(entityId)) {
|
||||||
// Ableinen
|
// Ableinen
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ public class SitListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
plugin.getLogger().info("Ghost Stands (Sit) bereinigt.");
|
plugin.logDebug("Ghost Stands (Sit) bereinigt.");
|
||||||
}, 20L);
|
}, 20L);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,362 +1,364 @@
|
|||||||
header: "&6=== SurvivalPlus Hilfe ==="
|
header: "&6=== SurvivalPlus Hilfe ==="
|
||||||
footer: "&6==========================="
|
footer: "&6==========================="
|
||||||
|
help-usage: "&cVerwendung: /sp help [player|admin|system|all] [seite]"
|
||||||
|
|
||||||
|
navigation:
|
||||||
|
prev: "&7« Vorherige Seite"
|
||||||
|
next: "&7Nächste Seite »"
|
||||||
|
prev-disabled: "&8« Vorherige Seite"
|
||||||
|
next-disabled: "&8Nächste Seite »"
|
||||||
|
page: "&fSeite {current} von {total}"
|
||||||
|
|
||||||
|
groups:
|
||||||
|
system:
|
||||||
|
title: "&6-- System --"
|
||||||
|
player:
|
||||||
|
title: "&6-- Spieler --"
|
||||||
|
admin:
|
||||||
|
title: "&6-- Admin --"
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
gm:
|
|
||||||
description: "&eÄndert den Spielmodus eines Spielers (survival, creative, adventure, spectator)."
|
|
||||||
usage: "&b/gm <modus> [spieler]"
|
|
||||||
|
|
||||||
sp:
|
sp:
|
||||||
description: "&eHauptbefehl für SurvivalPlus mit Unterbefehlen."
|
group: system
|
||||||
usage: "&b/sp [reload | help | info | share | lock]"
|
description: "&eHauptbefehl für SurvivalPlus."
|
||||||
|
usage: "&b/sp [help|info|share|cb|reload]"
|
||||||
sp_reload:
|
|
||||||
description: "&eLädt das Plugin neu."
|
|
||||||
usage: "&b/sp reload"
|
|
||||||
|
|
||||||
sp_help:
|
sp_help:
|
||||||
description: "&eZeigt die Hilfe für SurvivalPlus-Befehle an."
|
group: system
|
||||||
usage: "&b/sp help"
|
description: "&eZeigt die Hilfe an (Spieler/Admin/System)."
|
||||||
|
usage: "&b/sp help [player|admin|system|all] [seite]"
|
||||||
|
|
||||||
sp_info:
|
sp_info:
|
||||||
description: "&eZeigt Informationen über das Plugin an."
|
group: system
|
||||||
|
description: "&eZeigt Plugin-Infos und Links."
|
||||||
usage: "&b/sp info"
|
usage: "&b/sp info"
|
||||||
|
|
||||||
sp_share:
|
sp_share:
|
||||||
description: "&eTeilt deine Koordinaten nach Bestätigung mit allen Spielern."
|
group: player
|
||||||
|
description: "&eTeilt deine Koordinaten nach Bestätigung."
|
||||||
usage: "&b/sp share"
|
usage: "&b/sp share"
|
||||||
|
|
||||||
|
shareconfirm:
|
||||||
|
group: player
|
||||||
|
description: "&eBestätigt das Teilen der Koordinaten."
|
||||||
|
usage: "&b/sp shareconfirm"
|
||||||
|
|
||||||
|
sharecancel:
|
||||||
|
group: player
|
||||||
|
description: "&eBricht das Teilen der Koordinaten ab."
|
||||||
|
usage: "&b/sp sharecancel"
|
||||||
|
|
||||||
sp_cb_add:
|
sp_cb_add:
|
||||||
|
group: admin
|
||||||
description: "&eFügt einen Befehl zur Blockierliste hinzu."
|
description: "&eFügt einen Befehl zur Blockierliste hinzu."
|
||||||
usage: "&b/sp cb add <befehl>"
|
usage: "&b/sp cb add <befehl>"
|
||||||
|
|
||||||
sp_cb_remove:
|
sp_cb_remove:
|
||||||
|
group: admin
|
||||||
description: "&eEntfernt einen Befehl aus der Blockierliste."
|
description: "&eEntfernt einen Befehl aus der Blockierliste."
|
||||||
usage: "&b/sp cb remove <befehl>"
|
usage: "&b/sp cb remove <befehl>"
|
||||||
|
|
||||||
sp_cb_list:
|
sp_cb_list:
|
||||||
|
group: admin
|
||||||
description: "&eZeigt die Liste der blockierten Befehle an."
|
description: "&eZeigt die Liste der blockierten Befehle an."
|
||||||
usage: "&b/sp cb list"
|
usage: "&b/sp cb list"
|
||||||
|
|
||||||
|
sp_reload:
|
||||||
|
group: admin
|
||||||
|
description: "&eLädt das Plugin neu."
|
||||||
|
usage: "&b/sp reload"
|
||||||
|
|
||||||
|
splock:
|
||||||
|
group: player
|
||||||
|
description: "&eSperrt/entsperrt Container und verwaltet Freunde."
|
||||||
|
usage: "&b/splock lock|unlock|friendadd|friendremove [spieler]"
|
||||||
|
|
||||||
sp_lock_lock:
|
sp_lock_lock:
|
||||||
description: "&eSperrt einen Container (z.B. Kiste oder Tür)."
|
group: player
|
||||||
usage: "&b/sp lock "
|
description: "&eStartet den Lock-Modus (Block anklicken)."
|
||||||
|
usage: "&b/sp lock"
|
||||||
|
|
||||||
sp_lock_unlock:
|
sp_lock_unlock:
|
||||||
description: "&eEntsperrt einen Container (z.B. Kiste oder Tür)."
|
group: player
|
||||||
usage: "&b/sp lock "
|
description: "&eEntsperrt einen Block, den du ansiehst."
|
||||||
|
usage: "&b/sp unlock"
|
||||||
|
|
||||||
sp_lock_friendadd:
|
sp_lock_friendadd:
|
||||||
description: "&eFügt einen Freund zum Container-Sperrsystem hinzu."
|
group: player
|
||||||
usage: "&b/sp lock friendadd <Spieler>"
|
description: "&eFügt einen Freund zum Lock-System hinzu."
|
||||||
|
usage: "&b/sp friendadd <spieler>"
|
||||||
|
|
||||||
sp_lock_friendremove:
|
sp_lock_friendremove:
|
||||||
description: "&eEntfernt einen Freund aus dem Container-Sperrsystem."
|
group: player
|
||||||
usage: "&b/sp lock friendremove <Spieler>"
|
description: "&eEntfernt einen Freund aus dem Lock-System."
|
||||||
|
usage: "&b/sp friendremove <spieler>"
|
||||||
|
|
||||||
shareconfirm:
|
home:
|
||||||
description: "&eBestätigt das Teilen deiner Koordinaten mit allen Spielern."
|
group: player
|
||||||
usage: "&b/sp shareconfirm"
|
description: "&eTeleportiert dich zu einem Home."
|
||||||
|
usage: "&b/home <name>"
|
||||||
sharecancel:
|
|
||||||
description: "&eBricht das Teilen deiner Koordinaten ab."
|
|
||||||
usage: "&b/sp sharecancel"
|
|
||||||
|
|
||||||
sethome:
|
sethome:
|
||||||
description: "&eSetzt ein Home mit dem angegebenen Namen."
|
group: player
|
||||||
|
description: "&eSetzt ein Home mit Namen."
|
||||||
usage: "&b/sethome <name>"
|
usage: "&b/sethome <name>"
|
||||||
|
|
||||||
delhome:
|
delhome:
|
||||||
description: "&eLöscht ein Home mit dem angegebenen Namen."
|
group: player
|
||||||
|
description: "&eLöscht ein Home."
|
||||||
usage: "&b/delhome <name>"
|
usage: "&b/delhome <name>"
|
||||||
|
|
||||||
homelist:
|
homelist:
|
||||||
description: "&eÖffnet eine GUI mit allen Homes."
|
group: player
|
||||||
|
description: "&eÖffnet die Homes-Übersicht."
|
||||||
usage: "&b/homelist"
|
usage: "&b/homelist"
|
||||||
|
|
||||||
home:
|
warps:
|
||||||
description: "&eTeleportiert zu einem Home."
|
group: player
|
||||||
usage: "&b/home <name>"
|
description: "&eÖffnet die Warps-Übersicht."
|
||||||
|
usage: "&b/warps"
|
||||||
|
|
||||||
inv:
|
setwarp:
|
||||||
description: "&eÖffnet das Inventar (eigenes oder das eines anderen Spielers)."
|
group: player
|
||||||
usage: "&b/inv [spieler]"
|
description: "&eSetzt einen persönlichen Warp."
|
||||||
|
usage: "&b/setwarp <name>"
|
||||||
|
|
||||||
ec:
|
delwarp:
|
||||||
description: "&eÖffnet die Endertruhe (eigene oder die eines anderen Spielers)."
|
group: player
|
||||||
usage: "&b/ec [spieler]"
|
description: "&eLöscht einen persönlichen Warp."
|
||||||
|
usage: "&b/delwarp <name>"
|
||||||
|
|
||||||
setworldspawn:
|
spawn:
|
||||||
description: "&eSetzt den Weltspawnpunkt auf die Position des Spielers."
|
group: player
|
||||||
usage: "&b/setworldspawn"
|
description: "&eTeleportiert dich zum Weltspawn."
|
||||||
|
usage: "&b/spawn"
|
||||||
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: "&eLöscht alle herumliegenden Items."
|
|
||||||
usage: "&b/clearitems"
|
|
||||||
|
|
||||||
closedoors:
|
|
||||||
description: "&eSchließt alle Türen im angegebenen Radius."
|
|
||||||
usage: "&b/closedoors <radius>"
|
|
||||||
|
|
||||||
sit:
|
|
||||||
description: "&eLässt den Spieler sich hinsetzen oder aufstehen."
|
|
||||||
usage: "&b/sit"
|
|
||||||
|
|
||||||
back:
|
back:
|
||||||
|
group: player
|
||||||
description: "&eTeleportiert zum letzten Todespunkt."
|
description: "&eTeleportiert zum letzten Todespunkt."
|
||||||
usage: "&b/back"
|
usage: "&b/back"
|
||||||
|
|
||||||
friend:
|
|
||||||
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>"
|
|
||||||
|
|
||||||
freeze:
|
|
||||||
description: "&eFriert einen Spieler ein (Bewegung unmöglich)."
|
|
||||||
usage: "&b/freeze <Spieler>"
|
|
||||||
|
|
||||||
ir:
|
|
||||||
description: "&eBenennt das Item in der Hand um."
|
|
||||||
usage: "&b/ir <neuer_name>"
|
|
||||||
|
|
||||||
showarmorstands:
|
|
||||||
description: "&eMacht alle unsichtbaren Armor Stands sichtbar."
|
|
||||||
usage: "&b/showarmorstands"
|
|
||||||
|
|
||||||
cleardebugarmorstands:
|
|
||||||
description: "&eEntfernt alle Debug-ArmorStands."
|
|
||||||
usage: "&b/cleardebugarmorstands"
|
|
||||||
|
|
||||||
trash:
|
|
||||||
description: "&eÖffnet den Mülleimer."
|
|
||||||
usage: "&b/trash"
|
|
||||||
|
|
||||||
workbench:
|
|
||||||
description: "&eÖffnet eine Werkbank-GUI."
|
|
||||||
usage: "&b/workbench"
|
|
||||||
|
|
||||||
anvil:
|
|
||||||
description: "&eÖffnet eine Amboss-GUI."
|
|
||||||
usage: "&b/anvil"
|
|
||||||
|
|
||||||
stats:
|
|
||||||
description: "&eZeigt deine Statistiken an."
|
|
||||||
usage: "&b/stats"
|
|
||||||
|
|
||||||
spawn:
|
|
||||||
description: "&eTeleportiert dich zum Weltspawnpunkt."
|
|
||||||
usage: "&b/spawn"
|
|
||||||
|
|
||||||
tp:
|
|
||||||
description: "&eTeleportiert dich zu einem Spieler."
|
|
||||||
usage: "&b/tp <Spieler>"
|
|
||||||
|
|
||||||
tphere:
|
|
||||||
description: "&eTeleportiert einen Spieler zu dir."
|
|
||||||
usage: "&b/tphere <Spieler>"
|
|
||||||
|
|
||||||
tpa:
|
tpa:
|
||||||
description: "&eSendet eine Teleportanfrage an einen Spieler."
|
group: player
|
||||||
usage: "&b/tpa <Spieler>"
|
description: "&eSendet eine Teleportanfrage."
|
||||||
|
usage: "&b/tpa <spieler>"
|
||||||
|
|
||||||
tpaccept:
|
tpaccept:
|
||||||
|
group: player
|
||||||
description: "&eAkzeptiert eine Teleportanfrage."
|
description: "&eAkzeptiert eine Teleportanfrage."
|
||||||
usage: "&b/tpaccept"
|
usage: "&b/tpaccept"
|
||||||
|
|
||||||
tpdeny:
|
tpdeny:
|
||||||
|
group: player
|
||||||
description: "&eLehnt eine Teleportanfrage ab."
|
description: "&eLehnt eine Teleportanfrage ab."
|
||||||
usage: "&b/tpdeny"
|
usage: "&b/tpdeny"
|
||||||
|
|
||||||
|
friend:
|
||||||
|
group: player
|
||||||
|
description: "&eFreundesliste verwalten."
|
||||||
|
usage: "&b/friend [add|accept|deny|list|del|confirm|tp] [spieler]"
|
||||||
|
|
||||||
block:
|
block:
|
||||||
description: "&eBlockiert einen Spieler."
|
group: player
|
||||||
usage: "&b/block <Spieler>"
|
description: "&eBlockiert einen Spieler im Chat."
|
||||||
|
usage: "&b/block <spieler>"
|
||||||
|
|
||||||
unblock:
|
unblock:
|
||||||
description: "&eEntblockt einen Spieler."
|
group: player
|
||||||
usage: "&b/unblock <Spieler>"
|
description: "&eEntblockt einen Spieler im Chat."
|
||||||
|
usage: "&b/unblock <spieler>"
|
||||||
|
|
||||||
blocklist:
|
blocklist:
|
||||||
description: "&eZeigt eine Liste der blockierten Spieler."
|
group: player
|
||||||
|
description: "&eZeigt deine Blockliste."
|
||||||
usage: "&b/blocklist"
|
usage: "&b/blocklist"
|
||||||
|
|
||||||
vanish:
|
trade:
|
||||||
description: "&eMacht dich für andere Spieler unsichtbar."
|
group: player
|
||||||
usage: "&b/vanish"
|
description: "&eStartet einen Handel."
|
||||||
|
usage: "&b/trade <spieler>"
|
||||||
|
|
||||||
|
tradeaccept:
|
||||||
|
group: player
|
||||||
|
description: "&eAkzeptiert einen Handel."
|
||||||
|
usage: "&b/tradeaccept <spieler>"
|
||||||
|
|
||||||
|
report:
|
||||||
|
group: player
|
||||||
|
description: "&eMeldet einen Spieler an Admins."
|
||||||
|
usage: "&b/report <spieler> [grund]"
|
||||||
|
|
||||||
|
stats:
|
||||||
|
group: player
|
||||||
|
description: "&eZeigt deine Statistiken."
|
||||||
|
usage: "&b/stats"
|
||||||
|
|
||||||
kit:
|
kit:
|
||||||
|
group: player
|
||||||
description: "&eHolt das Starterkit."
|
description: "&eHolt das Starterkit."
|
||||||
usage: "&b/kit"
|
usage: "&b/kit"
|
||||||
|
|
||||||
leashcount:
|
|
||||||
description: "&eZeigt die Anzahl der geleinten Tiere an."
|
|
||||||
usage: "&b/leashcount"
|
|
||||||
|
|
||||||
nick:
|
nick:
|
||||||
description: "&eÄndert deinen Nicknamen mit Farb- und Hex-Support."
|
group: player
|
||||||
usage: "&b/nick <Name>"
|
description: "&eSetzt deinen Nickname."
|
||||||
|
usage: "&b/nick <name> | off"
|
||||||
|
|
||||||
ride:
|
ride:
|
||||||
|
group: player
|
||||||
description: "&eReite einen Spieler oder Mob."
|
description: "&eReite einen Spieler oder Mob."
|
||||||
usage: "&b/ride [spieler]"
|
usage: "&b/ride [spieler]"
|
||||||
|
|
||||||
|
sit:
|
||||||
|
group: player
|
||||||
|
description: "&eHinsetzen/Aufstehen."
|
||||||
|
usage: "&b/sit"
|
||||||
|
|
||||||
|
ir:
|
||||||
|
group: player
|
||||||
|
description: "&eBenennt das Item in der Hand um."
|
||||||
|
usage: "&b/ir <neuer_name>"
|
||||||
|
|
||||||
|
trash:
|
||||||
|
group: player
|
||||||
|
description: "&eÖffnet den Mülleimer."
|
||||||
|
usage: "&b/trash"
|
||||||
|
|
||||||
|
workbench:
|
||||||
|
group: player
|
||||||
|
description: "&eÖffnet eine Werkbank-GUI."
|
||||||
|
usage: "&b/workbench"
|
||||||
|
|
||||||
|
anvil:
|
||||||
|
group: player
|
||||||
|
description: "&eÖffnet eine Amboss-GUI."
|
||||||
|
usage: "&b/anvil"
|
||||||
|
|
||||||
|
leashcount:
|
||||||
|
group: player
|
||||||
|
description: "&eZeigt die Anzahl geleinter Tiere."
|
||||||
|
usage: "&b/leashcount"
|
||||||
|
|
||||||
lootchests:
|
lootchests:
|
||||||
description: "&eZeigt eine Liste aller aktiven Loot-Kisten an. Admins können per Klick teleportieren."
|
group: admin
|
||||||
|
description: "&eListet aktive Loot-Kisten."
|
||||||
usage: "&b/lootchests"
|
usage: "&b/lootchests"
|
||||||
|
|
||||||
tploot:
|
tploot:
|
||||||
description: "&eTeleportiert dich zu einer Loot-Kiste (nur Admins)."
|
group: admin
|
||||||
|
description: "&eTeleportiert zu einer Loot-Kiste."
|
||||||
usage: "&b/tploot <welt> <x> <y> <z>"
|
usage: "&b/tploot <welt> <x> <y> <z>"
|
||||||
|
|
||||||
|
shop:
|
||||||
|
group: player
|
||||||
|
description: "&eShop GUI (Admin: /shop add ...)."
|
||||||
|
usage: "&b/shop [gui|add]"
|
||||||
|
|
||||||
|
claim:
|
||||||
|
group: player
|
||||||
|
description: "&eClaim-System verwalten."
|
||||||
|
usage: "&b/claim [mark|unclaim|trust|untrust|info|kick|ban|unban]"
|
||||||
|
|
||||||
|
startchallenge:
|
||||||
|
group: admin
|
||||||
|
description: "&eStartet eine Fun-Challenge."
|
||||||
|
usage: "&b/startchallenge <name>"
|
||||||
|
|
||||||
|
head:
|
||||||
|
group: player
|
||||||
|
description: "&eGibt dir den Kopf eines Spielers."
|
||||||
|
usage: "&b/head <spieler>"
|
||||||
|
|
||||||
|
heal:
|
||||||
|
group: admin
|
||||||
|
description: "&eHeilt einen Spieler vollständig."
|
||||||
|
usage: "&b/heal [spieler]"
|
||||||
|
|
||||||
|
gm:
|
||||||
|
group: admin
|
||||||
|
description: "&eÄndert den Spielmodus."
|
||||||
|
usage: "&b/gm <modus> [spieler]"
|
||||||
|
|
||||||
|
tp:
|
||||||
|
group: admin
|
||||||
|
description: "&eTeleportiert dich zu einem Spieler."
|
||||||
|
usage: "&b/tp <spieler>"
|
||||||
|
|
||||||
|
tphere:
|
||||||
|
group: admin
|
||||||
|
description: "&eTeleportiert einen Spieler zu dir."
|
||||||
|
usage: "&b/tphere <spieler>"
|
||||||
|
|
||||||
|
inv:
|
||||||
|
group: admin
|
||||||
|
description: "&eÖffnet ein Inventar (eigen/anderer)."
|
||||||
|
usage: "&b/inv [spieler]"
|
||||||
|
|
||||||
|
ec:
|
||||||
|
group: admin
|
||||||
|
description: "&eÖffnet eine Endertruhe (eigene/andere)."
|
||||||
|
usage: "&b/ec [spieler]"
|
||||||
|
|
||||||
|
setworldspawn:
|
||||||
|
group: admin
|
||||||
|
description: "&eSetzt den Weltspawn auf deine Position."
|
||||||
|
usage: "&b/setworldspawn"
|
||||||
|
|
||||||
|
setspawn:
|
||||||
|
group: admin
|
||||||
|
description: "&eSetzt den Serverspawn auf deine Position."
|
||||||
|
usage: "&b/setspawn"
|
||||||
|
|
||||||
|
clearchat:
|
||||||
|
group: admin
|
||||||
|
description: "&eLeert den Chat."
|
||||||
|
usage: "&b/clearchat"
|
||||||
|
|
||||||
|
clearitems:
|
||||||
|
group: admin
|
||||||
|
description: "&eEntfernt herumliegende Items."
|
||||||
|
usage: "&b/clearitems"
|
||||||
|
|
||||||
|
closedoors:
|
||||||
|
group: admin
|
||||||
|
description: "&eSchließt Türen im Radius."
|
||||||
|
usage: "&b/closedoors <radius>"
|
||||||
|
|
||||||
|
showarmorstands:
|
||||||
|
group: admin
|
||||||
|
description: "&eMacht Debug-ArmorStands sichtbar."
|
||||||
|
usage: "&b/showarmorstands"
|
||||||
|
|
||||||
|
cleardebugarmorstands:
|
||||||
|
group: admin
|
||||||
|
description: "&eEntfernt Debug-ArmorStands."
|
||||||
|
usage: "&b/cleardebugarmorstands"
|
||||||
|
|
||||||
|
vanish:
|
||||||
|
group: admin
|
||||||
|
description: "&eMacht dich unsichtbar."
|
||||||
|
usage: "&b/vanish"
|
||||||
|
|
||||||
|
freeze:
|
||||||
|
group: admin
|
||||||
|
description: "&eFriert einen Spieler ein."
|
||||||
|
usage: "&b/freeze <spieler>"
|
||||||
|
|
||||||
day:
|
day:
|
||||||
|
group: admin
|
||||||
description: "&eSetzt die Zeit auf Tag."
|
description: "&eSetzt die Zeit auf Tag."
|
||||||
usage: "&b/day"
|
usage: "&b/day"
|
||||||
|
|
||||||
night:
|
night:
|
||||||
|
group: admin
|
||||||
description: "&eSetzt die Zeit auf Nacht."
|
description: "&eSetzt die Zeit auf Nacht."
|
||||||
usage: "&b/night"
|
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 <Spieler> [Grund]"
|
|
||||||
|
|
||||||
showreport:
|
showreport:
|
||||||
description: "&eZeigt alle Reports eines Spielers an."
|
group: admin
|
||||||
usage: "&b/showreport <Spieler>"
|
description: "&eZeigt Reports eines Spielers."
|
||||||
|
usage: "&b/showreport <spieler>"
|
||||||
|
|
||||||
clearreport:
|
clearreport:
|
||||||
description: "&eLöscht alle Reports eines Spielers."
|
group: admin
|
||||||
usage: "&b/clearreport <Spieler>"
|
description: "&eLöscht Reports eines Spielers."
|
||||||
|
usage: "&b/clearreport <spieler>"
|
||||||
shop:
|
|
||||||
description: "&eVerwaltet den Server-Shop (z.B. Items hinzufügen)."
|
|
||||||
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]"
|
|
||||||
|
|
||||||
claim:
|
|
||||||
description: "&eVerwaltet Claims für den Anti-Grief-Schutz."
|
|
||||||
usage: "&b/claim [mark <1|2>| unclaim | trust <spieler> | untrust <spieler> | info | kick <spieler> | ban <spieler> | unban <spieler>]"
|
|
||||||
subcommands:
|
|
||||||
mark:
|
|
||||||
description: "&eMarkiert die erste oder zweite Ecke eines zu schützenden Bereichs."
|
|
||||||
usage: "&b/claim mark <1|2>"
|
|
||||||
unclaim:
|
|
||||||
description: "&eGibt den geschützten Bereich frei, in dem du stehst."
|
|
||||||
usage: "&b/claim unclaim"
|
|
||||||
trust:
|
|
||||||
description: "&eFügt einen Spieler als vertrauenswürdig hinzu, sodass er im Bereich bauen kann."
|
|
||||||
usage: "&b/claim trust <spieler>"
|
|
||||||
untrust:
|
|
||||||
description: "&eEntfernt die Vertrauensberechtigung eines Spielers für den Bereich."
|
|
||||||
usage: "&b/claim untrust <spieler>"
|
|
||||||
info:
|
|
||||||
description: "&eZeigt Informationen über den aktuellen Claim an."
|
|
||||||
usage: "&b/claim info"
|
|
||||||
kick:
|
|
||||||
description: "&eWirft einen Spieler aus dem Claim."
|
|
||||||
usage: "&b/claim kick <Spieler>"
|
|
||||||
ban:
|
|
||||||
description: "&eVerbannt einen Spieler permanent aus dem Claim."
|
|
||||||
usage: "&b/claim ban <Spieler>"
|
|
||||||
unban:
|
|
||||||
description: "&eEntbannt einen Spieler aus dem Claim."
|
|
||||||
usage: "&b/claim unban <Spieler>"
|
|
||||||
|
|
||||||
messages:
|
|
||||||
header: "&6=== Befehle ==="
|
|
||||||
footer: "&6================"
|
|
||||||
navigation:
|
|
||||||
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|lock]"
|
|
||||||
no-permission: "&cDu hast keine Berechtigung für diesen Befehl!"
|
|
||||||
plugin:
|
|
||||||
reloaded: "&aSurvivalPlus wurde erfolgreich neu geladen!"
|
|
||||||
info:
|
|
||||||
header: "&7===== SurvivalPlus Info ====="
|
|
||||||
name: "&ePlugin-Name: &f"
|
|
||||||
version: "&eVersion: &f"
|
|
||||||
author: "&eErsteller: &f"
|
|
||||||
description: "&eBeschreibung:\n&f"
|
|
||||||
footer: "&7=========================="
|
|
||||||
share:
|
|
||||||
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]"
|
|
||||||
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!"
|
|
||||||
vanish:
|
|
||||||
activated: "&aDu bist nun unsichtbar."
|
|
||||||
deactivated: "&cDu bist nun sichtbar."
|
|
||||||
freeze:
|
|
||||||
frozen: "&cDu wurdest von einem Admin eingefroren! &lKeine Bewegung möglich!"
|
|
||||||
unfrozen: "&aDu bist nicht mehr eingefroren."
|
|
||||||
player-frozen: "&a%player% wurde eingefroren."
|
|
||||||
player-unfrozen: "&a%player% wurde aufgetaut."
|
|
||||||
claim:
|
|
||||||
kicked: "&cDu wurdest aus dem Claim geworfen!"
|
|
||||||
kicked-target: "&aSpieler wurde aus dem Claim geworfen."
|
|
||||||
banned: "&cDu bist aus diesem Gebiet verbannt!"
|
|
||||||
unbanned: "&aDu bist für dieses Gebiet entbannt."
|
|
||||||
admin-banned: "&aSpieler wurde von diesem Claim gebannt."
|
|
||||||
admin-unbanned: "&aSpieler wurde für diesen Claim entbannt."
|
|
||||||
@@ -1,7 +1,21 @@
|
|||||||
|
|
||||||
|
reload:
|
||||||
|
success: "§aSurvivalPlus wurde erfolgreich neu geladen!"
|
||||||
|
|
||||||
|
invalid-subcommand: "§cUngültiger Unterbefehl! Verwendung: /sp [reload|help|info|share]"
|
||||||
|
|
||||||
|
player-only: "§cDieser Befehl ist nur für Spieler!"
|
||||||
|
|
||||||
|
not-found: "§cKeine Befehle verfügbar."
|
||||||
|
|
||||||
|
groups:
|
||||||
|
system: "&6-- System --"
|
||||||
|
player: "&6-- Spieler --"
|
||||||
|
admin: "&6-- Admin --"
|
||||||
sp:
|
sp:
|
||||||
no-permission: "§cDu hast keine Berechtigung für diesen Befehl!"
|
no-permission: "§cDu hast keine Berechtigung für diesen Befehl!"
|
||||||
plugin.reloaded: "§aSurvivalPlus wurde erfolgreich neu geladen!"
|
plugin.reloaded: "§aSurvivalPlus wurde erfolgreich neu geladen!"
|
||||||
invalid-subcommand: "§cUngültiger Unterbefehl! Verwendung: /sp [ reload | help | info | share ]"
|
invalid-subcommand: "§cUngültiger Unterbefehl! Verwendung: /sp [help|info|share|shareconfirm|sharecancel|cb|reload]"
|
||||||
help-not-found: "§cHilfedatei (help.yml) konnte nicht geladen werden!"
|
help-not-found: "§cHilfedatei (help.yml) konnte nicht geladen werden!"
|
||||||
|
|
||||||
share:
|
share:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: SurvivalPlus
|
name: SurvivalPlus
|
||||||
version: 1.1.2
|
version: 1.1.3
|
||||||
|
|
||||||
main: de.viper.survivalplus.SurvivalPlus
|
main: de.viper.survivalplus.SurvivalPlus
|
||||||
api-version: 1.21
|
api-version: 1.21
|
||||||
|
|||||||
Reference in New Issue
Block a user