Bugfix for Globalhomes. After this the InfiniteHomes+ Plugin will only include the languages German and English in the GitHub Repo.

This commit is contained in:
2025-09-06 18:56:31 +02:00
parent f19def6dc6
commit e01fe15339
14 changed files with 261 additions and 219 deletions

View File

@@ -3,7 +3,7 @@ plugins {
}
group = "com.user404_"
version = "1.1"
version = "1.2+"
repositories {
mavenCentral()

View File

@@ -1 +1 @@
rootProject.name = "InfiniteHomes"
rootProject.name = "InfiniteHomes+"

View File

@@ -5,6 +5,7 @@ import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
@@ -26,20 +27,26 @@ import java.util.logging.Level;
public class InfiniteHomes extends JavaPlugin implements TabCompleter {
private Map<UUID, Map<String, Location>> homes;
private Map<String, Location> globalHomes;
private Map<UUID, Long> cooldowns;
private FileConfiguration homesConfig;
private File homesFile;
private FileConfiguration globalHomesConfig;
private File globalHomesFile;
private Map<String, FileConfiguration> translations;
private File translationsDir;
@Override
public void onEnable() {
homes = new HashMap<>();
globalHomes = new HashMap<>();
cooldowns = new HashMap<>();
translations = new HashMap<>();
setupHomesConfig();
setupGlobalHomesConfig();
loadHomesFromConfig();
loadGlobalHomesFromConfig();
setupTranslations();
// Standardkonfiguration erstellen, falls nicht vorhanden
@@ -51,6 +58,8 @@ public class InfiniteHomes extends JavaPlugin implements TabCompleter {
// TabCompleter registrieren
getCommand("home").setTabCompleter(this);
getCommand("delhome").setTabCompleter(this);
getCommand("globalhome").setTabCompleter(this);
getCommand("delglobalhome").setTabCompleter(this);
getLogger().info("InfiniteHomes plugin enabled!");
}
@@ -58,6 +67,7 @@ public class InfiniteHomes extends JavaPlugin implements TabCompleter {
@Override
public void onDisable() {
saveHomesToConfig();
saveGlobalHomesToConfig();
getLogger().info("InfiniteHomes plugin disabled!");
}
@@ -65,32 +75,57 @@ public class InfiniteHomes extends JavaPlugin implements TabCompleter {
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
List<String> completions = new ArrayList<>();
// Nur für Spieler und für die Befehle home und delhome
// Nur für Spieler und für die Befehle home, delhome, globalhome und delglobalhome
if (!(sender instanceof Player) || (!command.getName().equalsIgnoreCase("home") &&
!command.getName().equalsIgnoreCase("delhome"))) {
!command.getName().equalsIgnoreCase("delhome") &&
!command.getName().equalsIgnoreCase("globalhome") &&
!command.getName().equalsIgnoreCase("delglobalhome"))) {
return completions;
}
Player player = (Player) sender;
UUID playerUuid = player.getUniqueId();
// Wenn der Spieler keine Homes hat, leere Liste zurückgeben
if (!homes.containsKey(playerUuid) || homes.get(playerUuid).isEmpty()) {
return completions;
}
if (command.getName().equalsIgnoreCase("home") || command.getName().equalsIgnoreCase("delhome")) {
// Home-Namen des Spielers holen
UUID playerUuid = player.getUniqueId();
// Home-Namen des Spielers holen
Set<String> homeNames = homes.get(playerUuid).keySet();
// Wenn der Spieler keine Homes hat, leere Liste zurückgeben
if (!homes.containsKey(playerUuid) || homes.get(playerUuid).isEmpty()) {
return completions;
}
// Wenn kein Argument vorhanden ist, alle Home-Namen zurückgeben
if (args.length == 0 || args[0].isEmpty()) {
completions.addAll(homeNames);
} else {
// Home-Namen filtern, die mit dem eingegebenen Text beginnen
String input = args[0].toLowerCase();
for (String home : homeNames) {
if (home.toLowerCase().startsWith(input)) {
completions.add(home);
Set<String> homeNames = homes.get(playerUuid).keySet();
// Wenn kein Argument vorhanden ist, alle Home-Namen zurückgeben
if (args.length == 0 || args[0].isEmpty()) {
completions.addAll(homeNames);
} else {
// Home-Namen filtern, die mit dem eingegebenen Text beginnen
String input = args[0].toLowerCase();
for (String home : homeNames) {
if (home.toLowerCase().startsWith(input)) {
completions.add(home);
}
}
}
} else if (command.getName().equalsIgnoreCase("globalhome") || command.getName().equalsIgnoreCase("delglobalhome")) {
// Globale Home-Namen holen
if (globalHomes.isEmpty()) {
return completions;
}
Set<String> globalHomeNames = globalHomes.keySet();
// Wenn kein Argument vorhanden ist, alle globalen Home-Namen zurückgeben
if (args.length == 0 || args[0].isEmpty()) {
completions.addAll(globalHomeNames);
} else {
// Globale Home-Namen filtern, die mit dem eingegebenen Text beginnen
String input = args[0].toLowerCase();
for (String home : globalHomeNames) {
if (home.toLowerCase().startsWith(input)) {
completions.add(home);
}
}
}
}
@@ -116,6 +151,24 @@ public class InfiniteHomes extends JavaPlugin implements TabCompleter {
homesConfig = YamlConfiguration.loadConfiguration(homesFile);
}
private void setupGlobalHomesConfig() {
if (!getDataFolder().exists()) {
getDataFolder().mkdirs();
}
globalHomesFile = new File(getDataFolder(), "globalhomes.yml");
if (!globalHomesFile.exists()) {
try {
globalHomesFile.createNewFile();
} catch (IOException e) {
getLogger().log(Level.SEVERE, "Could not create globalhomes.yml", e);
}
}
globalHomesConfig = YamlConfiguration.loadConfiguration(globalHomesFile);
}
private void setupTranslations() {
translationsDir = new File(getDataFolder(), "translations");
if (!translationsDir.exists()) {
@@ -238,6 +291,38 @@ public class InfiniteHomes extends JavaPlugin implements TabCompleter {
}
}
private void loadGlobalHomesFromConfig() {
try {
globalHomes.clear();
for (String homeName : globalHomesConfig.getKeys(false)) {
Location location = (Location) globalHomesConfig.get(homeName);
if (location != null) {
globalHomes.put(homeName, location);
}
}
} catch (Exception e) {
getLogger().log(Level.WARNING, "Error loading global homes from config", e);
}
}
private void saveGlobalHomesToConfig() {
try {
// Clear existing data
for (String key : globalHomesConfig.getKeys(false)) {
globalHomesConfig.set(key, null);
}
// Save all global homes
for (Map.Entry<String, Location> entry : globalHomes.entrySet()) {
globalHomesConfig.set(entry.getKey(), entry.getValue());
}
globalHomesConfig.save(globalHomesFile);
} catch (Exception e) {
getLogger().log(Level.SEVERE, "Could not save global homes to config", e);
}
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (!(sender instanceof Player)) {
@@ -409,6 +494,83 @@ public class InfiniteHomes extends JavaPlugin implements TabCompleter {
return true;
}
if (cmd.getName().equalsIgnoreCase("setglobalhome")) {
if (!player.isOp()) {
player.sendMessage(getMessage(player, "no_permission"));
return true;
}
if (args.length != 1) {
player.sendMessage(getMessage(player, "usage.setglobalhome"));
return true;
}
String homeName = args[0].toLowerCase();
globalHomes.put(homeName, player.getLocation());
saveGlobalHomesToConfig(); // Sofort speichern
player.sendMessage(getMessage(player, "globalhome.set").replace("{home}", homeName));
return true;
}
if (cmd.getName().equalsIgnoreCase("globalhome")) {
if (args.length != 1) {
player.sendMessage(getMessage(player, "usage.globalhome"));
return true;
}
String homeName = args[0].toLowerCase();
if (globalHomes.containsKey(homeName)) {
player.teleport(globalHomes.get(homeName));
player.sendMessage(getMessage(player, "globalhome.teleport").replace("{home}", homeName));
} else {
player.sendMessage(getMessage(player, "globalhome.not_exist").replace("{home}", homeName));
}
return true;
}
if (cmd.getName().equalsIgnoreCase("globalhomes")) {
if (globalHomes.isEmpty()) {
player.sendMessage(getMessage(player, "globalhomes.none"));
return true;
}
Set<String> homeNames = globalHomes.keySet();
player.sendMessage(getMessage(player, "globalhomes.list.header"));
StringBuilder homesList = new StringBuilder();
for (String home : homeNames) {
if (homesList.length() > 0) {
homesList.append(", ");
}
homesList.append(home);
}
player.sendMessage(getMessage(player, "globalhomes.list.items").replace("{homes}", homesList.toString()));
return true;
}
if (cmd.getName().equalsIgnoreCase("delglobalhome") || cmd.getName().equalsIgnoreCase("dgh")) {
if (!player.isOp()) {
player.sendMessage(getMessage(player, "no_permission"));
return true;
}
if (args.length != 1) {
player.sendMessage(getMessage(player, "usage.delglobalhome"));
return true;
}
String homeName = args[0].toLowerCase();
if (globalHomes.containsKey(homeName)) {
globalHomes.remove(homeName);
saveGlobalHomesToConfig(); // Sofort speichern
player.sendMessage(getMessage(player, "globalhome.deleted").replace("{home}", homeName));
} else {
player.sendMessage(getMessage(player, "globalhome.not_exist").replace("{home}", homeName));
}
return true;
}
return false;
}
}

View File

@@ -1,5 +1,8 @@
# Home-Limit Configuration
max-homes: -1
# Home-Cooldown in seconds (-1 um to disable)
home-cooldown: -1
# Home-Cooldown in seconds (-1 to disable)
home-cooldown: -1
# Global homes storage setting
global-homes: {}

View File

@@ -1,7 +1,7 @@
name: InfiniteHomes
version: 1.1
name: InfiniteHomesPLUS
version: 1.2+
main: com.user404_.infinitehomes.InfiniteHomes
website: https://www.spigotmc.org/resources/infinitehomes-unlimited-or-configurable-homes-system.128492/
website: https://github.com/deutschich/InfiniteHomes/tree/%2B
api-version: 1.21
commands:
sethome:
@@ -25,3 +25,19 @@ commands:
homecooldown:
description: Set the global home cooldown (OP only).
usage: /homecooldown <seconds>
setglobalhome:
description: Set a global home accessible to all players (OP only)
usage: /setglobalhome <name>
aliases: [sgh]
globalhome:
description: Teleport to a global home
usage: /globalhome <name>
aliases: [gh]
globalhomes:
description: List all global homes
usage: /globalhomes
aliases: [listglobalhomes]
delglobalhome:
description: Delete a global home (OP only)
usage: /delglobalhome <name>
aliases: [deleteglobalhome, dgh]

View File

@@ -31,4 +31,13 @@ homes.limit.set: "§aGlobal home limit set to {max}."
# Cooldown messages
cooldown.set: "§aGlobal home cooldown set to {time} seconds."
cooldown.disabled: "§aHome cooldown disabled."
cooldown.disabled: "§aHome cooldown disabled."
# Global home messages
globalhome.set: "§aGlobal home '{home}' set!"
globalhome.not_exist: "§cGlobal home '{home}' does not exist."
globalhome.teleport: "§aTeleported to global home '{home}'!"
globalhome.list.header: "§aAvailable global homes:"
globalhome.list.items: "§e{homes}"
usage.setglobalhome: "§cUsage: /setglobalhome <name>"
usage.globalhome: "§cUsage: /globalhome <name>"

View File

@@ -1,32 +1,48 @@
# InfiniteHomes - Deutsche Übersetzung
# InfiniteHomes - Übersetzungsdatei
# Du kannst Übersetzungen für verschiedene Sprachen im translations-Ordner erstellen
# Benenne die Dateien texts_[lang].yml (z. B. texts_de.yml für Deutsch)
# Allgemeine Nachrichten
no_permission: "§cDu hast keine Berechtigung, diesen Befehl zu verwenden."
invalid_number: "§cBitte gib eine gültige Zahl ein."
cooldown.range: "§cCooldown muss zwischen -1 und 60 Sekunden liegen."
cooldown.range: "§cDer Cooldown muss zwischen -1 und 60 Sekunden liegen."
# Befehlsverwendung
usage.sethome: "§cVerwendung: /sethome <Name>"
usage.delhome: "§cVerwendung: /delhome <Name>"
usage.home: "§cVerwendung: /home <Name>"
usage.homecount: "§cVerwendung: /homecount <Zahl>"
usage.homecooldown: "§cVerwendung: /homecooldown <Sekunden>"
# Befehlsnutzung
usage.sethome: "§cBenutzung: /sethome <Name>"
usage.delhome: "§cBenutzung: /delhome <Name>"
usage.home: "§cBenutzung: /home <Name>"
usage.homecount: "§cBenutzung: /homecount <Zahl>"
usage.homecooldown: "§cBenutzung: /homecooldown <Sekunden>"
usage.setglobalhome: "§cBenutzung: /setglobalhome <Name>"
usage.globalhome: "§cBenutzung: /globalhome <Name>"
usage.delglobalhome: "§cBenutzung: /delglobalhome <Name>"
# Home-Nachrichten
home.set: "§aHome '{home}' gesetzt!"
home.deleted: "§aHome '{home}' gelöscht!"
home.not_exist: "§cHome '{home}' existiert nicht."
home.teleport: "§aZu Home '{home}' teleportiert!"
home.cooldown: "§cDu musst {time} Sekunden warten, bevor du /home wieder verwenden kannst."
home.teleport: "§aTeleportiert zum Home '{home}'!"
home.cooldown: "§cDu musst {time} Sekunden warten, bevor du /home erneut verwenden kannst."
# Globale Home-Nachrichten
globalhome.set: "§aGlobales Home '{home}' gesetzt!"
globalhome.deleted: "§aGlobales Home '{home}' gelöscht!"
globalhome.not_exist: "§cGlobales Home '{home}' existiert nicht."
globalhome.teleport: "§aTeleportiert zum globalen Home '{home}'!"
# Home-Liste Nachrichten
homes.none: "§cDu hast keine Homes gesetzt."
homes.unlimited: "unbegrenzt"
homes.list.header: "§aDeine Homes (§e{current}§a/§e{max}§a):"
homes.list.items: "§e{homes}"
homes.limit.reached: "§cDu hast die maximale Anzahl an Homes ({max}) erreicht."
homes.limit.reached: "§cDu hast die maximale Anzahl an Homes erreicht ({max})."
homes.limit.set: "§aGlobales Home-Limit auf {max} gesetzt."
# Globale Home-Liste Nachrichten
globalhomes.none: "§cEs sind keine globalen Homes gesetzt."
globalhomes.list.header: "§aVerfügbare globale Homes:"
globalhomes.list.items: "§e{homes}"
# Cooldown-Nachrichten
cooldown.set: "§aGlobaler Home-Cooldown auf {time} Sekunden gesetzt."
cooldown.disabled: "§aHome-Cooldown deaktiviert."
cooldown.disabled: "§aHome-Cooldown deaktiviert."

View File

@@ -1,4 +1,6 @@
# InfiniteHomes - English Translation
# InfiniteHomes - Translation File
# You can create translations for different languages in the translations folder
# Name the files texts_[lang].yml (e.g., texts_de.yml for German)
# General messages
no_permission: "§cYou don't have permission to use this command."
@@ -11,6 +13,9 @@ usage.delhome: "§cUsage: /delhome <name>"
usage.home: "§cUsage: /home <name>"
usage.homecount: "§cUsage: /homecount <number>"
usage.homecooldown: "§cUsage: /homecooldown <seconds>"
usage.setglobalhome: "§cUsage: /setglobalhome <name>"
usage.globalhome: "§cUsage: /globalhome <name>"
usage.delglobalhome: "§cUsage: /delglobalhome <name>"
# Home messages
home.set: "§aHome '{home}' set!"
@@ -19,6 +24,12 @@ home.not_exist: "§cHome '{home}' does not exist."
home.teleport: "§aTeleported to home '{home}'!"
home.cooldown: "§cYou must wait {time} seconds before using /home again."
# Global home messages
globalhome.set: "§aGlobal home '{home}' set!"
globalhome.deleted: "§aGlobal home '{home}' deleted!"
globalhome.not_exist: "§cGlobal home '{home}' does not exist."
globalhome.teleport: "§aTeleported to global home '{home}'!"
# Homes list messages
homes.none: "§cYou don't have any homes set."
homes.unlimited: "unlimited"
@@ -27,6 +38,11 @@ homes.list.items: "§e{homes}"
homes.limit.reached: "§cYou have reached the maximum number of homes ({max})."
homes.limit.set: "§aGlobal home limit set to {max}."
# Global homes list messages
globalhomes.none: "§cThere are no global homes set."
globalhomes.list.header: "§aAvailable global homes:"
globalhomes.list.items: "§e{homes}"
# Cooldown messages
cooldown.set: "§aGlobal home cooldown set to {time} seconds."
cooldown.disabled: "§aHome cooldown disabled."

View File

@@ -1,30 +0,0 @@
# Mensajes generales
no_permission: "§cNo tienes permiso para usar este comando."
invalid_number: "§cPor favor, proporciona un número válido."
cooldown.range: "§cEl tiempo de espera debe estar entre -1 y 60 segundos."
# Uso de comandos
usage.sethome: "§cUso: /sethome <nombre>"
usage.delhome: "§cUso: /delhome <nombre>"
usage.home: "§cUso: /home <nombre>"
usage.homecount: "§cUso: /homecount <número>"
usage.homecooldown: "§cUso: /homecooldown <segundos>"
# Mensajes de home
home.set: "§aHome '{home}' establecido!"
home.deleted: "§aHome '{home}' eliminado!"
home.not_exist: "§cHome '{home}' no existe."
home.teleport: "§aTeletransportado a home '{home}'!"
home.cooldown: "§cDebes esperar {time} segundos antes de usar /home de nuevo."
# Lista de homes
homes.none: "§cNo tienes ningún home establecido."
homes.unlimited: "ilimitado"
homes.list.header: "§aTus homes (§e{current}§a/§e{max}§a):"
homes.list.items: "§e{homes}"
homes.limit.reached: "§cHas alcanzado el número máximo de homes ({max})."
homes.limit.set: "§aLímite global de homes establecido a {max}."
# Mensajes de cooldown
cooldown.set: "§aCooldown global de homes establecido a {time} segundos."
cooldown.disabled: "§aCooldown de homes desactivado."

View File

@@ -1,30 +0,0 @@
# Messages générales
no_permission: "§cVous n'avez pas la permission d'utiliser cette commande."
invalid_number: "§cVeuillez fournir un nombre valide."
cooldown.range: "§cLe cooldown doit être compris entre -1 et 60 secondes."
# Utilisation des commandes
usage.sethome: "§cUtilisation : /sethome <nom>"
usage.delhome: "§cUtilisation : /delhome <nom>"
usage.home: "§cUtilisation : /home <nom>"
usage.homecount: "§cUtilisation : /homecount <nombre>"
usage.homecooldown: "§cUtilisation : /homecooldown <secondes>"
# Messages de home
home.set: "§aHome '{home}' défini !"
home.deleted: "§aHome '{home}' supprimé !"
home.not_exist: "§cHome '{home}' n'existe pas."
home.teleport: "§aTéléporté vers le home '{home}' !"
home.cooldown: "§cVous devez attendre {time} secondes avant d'utiliser /home à nouveau."
# Liste des homes
homes.none: "§cVous n'avez aucun home défini."
homes.unlimited: "illimité"
homes.list.header: "§aVos homes (§e{current}§a/§e{max}§a) :"
homes.list.items: "§e{homes}"
homes.limit.reached: "§cVous avez atteint le nombre maximum de homes ({max})."
homes.limit.set: "§aLimite globale de homes définie à {max}."
# Messages de cooldown
cooldown.set: "§aCooldown global des homes défini à {time} secondes."
cooldown.disabled: "§aCooldown des homes désactivé."

View File

@@ -1,30 +0,0 @@
# Messaggi generali
no_permission: "§cNon hai il permesso di usare questo comando."
invalid_number: "§cPer favore, inserisci un numero valido."
cooldown.range: "§cIl cooldown deve essere tra -1 e 60 secondi."
# Uso dei comandi
usage.sethome: "§cUso: /sethome <nome>"
usage.delhome: "§cUso: /delhome <nome>"
usage.home: "§cUso: /home <nome>"
usage.homecount: "§cUso: /homecount <numero>"
usage.homecooldown: "§cUso: /homecooldown <secondi>"
# Messaggi di home
home.set: "§aHome '{home}' impostata!"
home.deleted: "§aHome '{home}' eliminata!"
home.not_exist: "§cHome '{home}' non esiste."
home.teleport: "§aTeletrasportato a home '{home}'!"
home.cooldown: "§cDevi aspettare {time} secondi prima di usare di nuovo /home."
# Lista delle home
homes.none: "§cNon hai nessuna home impostata."
homes.unlimited: "illimitato"
homes.list.header: "§aLe tue home (§e{current}§a/§e{max}§a):"
homes.list.items: "§e{homes}"
homes.limit.reached: "§cHai raggiunto il numero massimo di home ({max})."
homes.limit.set: "§aLimite globale di home impostato a {max}."
# Messaggi di cooldown
cooldown.set: "§aCooldown globale delle home impostato a {time} secondi."
cooldown.disabled: "§aCooldown delle home disattivato."

View File

@@ -1,30 +0,0 @@
# Algemene berichten
no_permission: "§cJe hebt geen toestemming om dit commando te gebruiken."
invalid_number: "§cVoer een geldig nummer in."
cooldown.range: "§cCooldown moet tussen -1 en 60 seconden liggen."
# Gebruik van commando's
usage.sethome: "§cGebruik: /sethome <naam>"
usage.delhome: "§cGebruik: /delhome <naam>"
usage.home: "§cGebruik: /home <naam>"
usage.homecount: "§cGebruik: /homecount <nummer>"
usage.homecooldown: "§cGebruik: /homecooldown <seconden>"
# Home berichten
home.set: "§aHome '{home}' ingesteld!"
home.deleted: "§aHome '{home}' verwijderd!"
home.not_exist: "§cHome '{home}' bestaat niet."
home.teleport: "§aGeteleporteerd naar home '{home}'!"
home.cooldown: "§cJe moet {time} seconden wachten voordat je /home opnieuw kunt gebruiken."
# Home lijst
homes.none: "§cJe hebt geen homes ingesteld."
homes.unlimited: "onbeperkt"
homes.list.header: "§aJe homes (§e{current}§a/§e{max}§a):"
homes.list.items: "§e{homes}"
homes.limit.reached: "§cJe hebt het maximale aantal homes ({max}) bereikt."
homes.limit.set: "§aGlobale homelimit ingesteld op {max}."
# Cooldown berichten
cooldown.set: "§aGlobale home cooldown ingesteld op {time} seconden."
cooldown.disabled: "§aHome cooldown uitgeschakeld."

View File

@@ -1,30 +0,0 @@
# Mensagens gerais
no_permission: "§cVocê não tem permissão para usar este comando."
invalid_number: "§cPor favor, forneça um número válido."
cooldown.range: "§cO cooldown deve estar entre -1 e 60 segundos."
# Uso de comandos
usage.sethome: "§cUso: /sethome <nome>"
usage.delhome: "§cUso: /delhome <nome>"
usage.home: "§cUso: /home <nome>"
usage.homecount: "§cUso: /homecount <número>"
usage.homecooldown: "§cUso: /homecooldown <segundos>"
# Mensagens de home
home.set: "§aHome '{home}' definida!"
home.deleted: "§aHome '{home}' deletada!"
home.not_exist: "§cHome '{home}' não existe."
home.teleport: "§aTeleportado para a home '{home}'!"
home.cooldown: "§cVocê deve esperar {time} segundos antes de usar /home novamente."
# Lista de homes
homes.none: "§cVocê não tem nenhuma home definida."
homes.unlimited: "ilimitado"
homes.list.header: "§aSuas homes (§e{current}§a/§e{max}§a):"
homes.list.items: "§e{homes}"
homes.limit.reached: "§cVocê atingiu o número máximo de homes ({max})."
homes.limit.set: "§aLimite global de homes definido para {max}."
# Mensagens de cooldown
cooldown.set: "§aCooldown global de homes definido para {time} segundos."
cooldown.disabled: "§aCooldown de homes desativado."

View File

@@ -1,30 +0,0 @@
# Общие сообщения
no_permission: "§cУ вас нет разрешения на использование этой команды."
invalid_number: "§cПожалуйста, укажите корректное число."
cooldown.range: "§cВремя восстановления должно быть от -1 до 60 секунд."
# Использование команд
usage.sethome: "§cИспользование: /sethome <имя>"
usage.delhome: "§cИспользование: /delhome <имя>"
usage.home: "§cИспользование: /home <имя>"
usage.homecount: "§cИспользование: /homecount <число>"
usage.homecooldown: "§cИспользование: /homecooldown <секунды>"
# Сообщения о доме
home.set: "§aДом '{home}' установлен!"
home.deleted: "§aДом '{home}' удалён!"
home.not_exist: "§cДом '{home}' не существует."
home.teleport: "§aТелепортировано к дому '{home}'!"
home.cooldown: "§cВы должны подождать {time} секунд перед повторным использованием /home."
# Список домов
homes.none: "§cУ вас нет установленных домов."
homes.unlimited: "безлимитно"
homes.list.header: "§aВаши дома (§e{current}§a/§e{max}§a):"
homes.list.items: "§e{homes}"
homes.limit.reached: "§cВы достигли максимального числа домов ({max})."
homes.limit.set: "§aГлобальный лимит домов установлен на {max}."
# Сообщения о перезарядке
cooldown.set: "§aГлобальный таймер восстановления домов установлен на {time} секунд."
cooldown.disabled: "§aПерезарядка домов отключена."