Compare commits

...
11 Commits
Author SHA1 Message Date
Ben Woo 3356724481 Merge pull request #3256 from Multiverse/fix/generator-tab-complete
Improve generator provider tab-complete logic
2025-06-10 11:30:59 +08:00
Ben Woo 8dcdf68b9f Merge pull request #3257 from Whitebrim/patch-1
lang: fix deposit/withdraw (en)
2025-06-10 11:30:45 +08:00
Ben Woo ae0f25a0f8 Merge pull request #3255 from Whitebrim/main
Translation to Russian
2025-06-10 11:30:30 +08:00
Whitebrim 148f513bc2 lang: fix deposit/withdraw (en) 2025-06-10 03:38:57 +03:00
Whitebrim 29f60bcde5 lang: fix deposit/withdraw 2025-06-10 03:36:45 +03:00
Ben Woo e9ddb24706 Improve generator provider tab-complete logic 2025-06-09 23:16:43 +08:00
Whitebrim 71e815a9bd Create multiverse-core_ru.properties
Translated to Russian
2025-06-07 21:17:47 +03:00
Ben Woo a55ce680df Merge pull request #3254 from Multiverse/fix/world-chart
Fix bstats world chart
2025-06-07 13:42:40 +08:00
Ben Woo 3e47460c3b Fix bstats world chart 2025-06-07 13:36:57 +08:00
Ben Woo abd6983eee Merge pull request #3253 from Multiverse/fix/donate-colour
Add green colour to donate and enable message
2025-06-07 00:16:12 +08:00
Ben Woo 7f15a28a69 Add green colour to donate and enable message 2025-06-07 00:00:03 +08:00
6 changed files with 359 additions and 31 deletions

No files matched your search

@@ -2,6 +2,7 @@ package org.mvplugins.multiverse.core;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.function.Consumer;
import com.dumptruckman.minecraft.util.Logging;
@@ -10,7 +11,7 @@ import jakarta.inject.Inject;
import org.apache.commons.lang3.text.WordUtils;
import org.bstats.bukkit.Metrics;
import org.bstats.charts.AdvancedPie;
import org.bstats.charts.MultiLineChart;
import org.bstats.charts.SingleLineChart;
import org.bukkit.World;
import org.jvnet.hk2.annotations.Service;
@@ -79,18 +80,15 @@ final class BstatsMetricsConfigurator {
}
private void addWorldCountMetric() {
addMultiLineMetric("world_count", map -> {
map.put("Loaded worlds", worldManager.getLoadedWorlds().size());
map.put("Total number of worlds", worldManager.getWorlds().size());
});
addLineMetric("worlds", () -> worldManager.getWorlds().size());
}
private void addAdvancedPieMetric(String chartId, Consumer<Map<String, Integer>> metricsFunc) {
metrics.addCustomChart(createAdvancedPieChart(chartId, metricsFunc));
}
private void addMultiLineMetric(String chartId, Consumer<Map<String, Integer>> metricsFunc) {
metrics.addCustomChart(createMultiLineChart(chartId, metricsFunc));
private void addLineMetric(String chartId, Callable<Integer> metricsFunc) {
metrics.addCustomChart(createLineChart(chartId, metricsFunc));
}
private void incrementCount(Map<String, Integer> map, String key) {
@@ -104,9 +102,7 @@ final class BstatsMetricsConfigurator {
return new AdvancedPie(chartId, () -> map);
}
private MultiLineChart createMultiLineChart(String chartId, Consumer<Map<String, Integer>> metricsFunc) {
Map<String, Integer> map = new HashMap<>();
metricsFunc.accept(map);
return new MultiLineChart(chartId, () -> map);
private SingleLineChart createLineChart(String chartId, Callable<Integer> metricsFunc) {
return new SingleLineChart(chartId, metricsFunc);
}
}
@@ -225,12 +225,12 @@ public class MultiverseCore extends MultiverseModule {
* Logs the enable message.
*/
private void logEnableMessage() {
Logging.config("Version %s (API v%s) Enabled - By %s",
Logging.config("\u001B[32mVersion %s (API v%s) Enabled - By %s\u001B[39m",
this.getDescription().getVersion(), getVersionAsNumber(), StringFormatter.joinAnd(getDescription().getAuthors()));
if (configProvider.get().isShowingDonateMessage()) {
Logging.config("Help dumptruckman keep this project alive. Become a patron! https://www.patreon.com/dumptruckman");
Logging.config("One time donations are also appreciated: https://www.paypal.me/dumptruckman");
Logging.config("\u001B[32mHelp dumptruckman keep this project alive. Become a patron! https://www.patreon.com/dumptruckman\u001B[39m");
Logging.config("\u001B[32mOne time donations are also appreciated: https://www.paypal.me/dumptruckman\u001B[39m");
}
}
@@ -17,7 +17,10 @@ public interface GeneratorPlugin {
* <p>Suggest possible generator ids. To be used in command tab-completion.</p>
*
* <p>These suggestions can be static without relying on currentIdInput, or dynamically changed based
* on the currentIdInput.</p>
* on the currentIdInput. Add an entry of empty string "" if your plugin supports generator string without an id.</p>
*
* <p>These suggestions should be quick lookups, that gets from your cached or loaded data as tab-complete handler
* may be called multiple times a second.</p>
*
* @param currentIdInput The current state user input. This may be null or empty if user has not started
* any input for generator id.
@@ -1,13 +1,12 @@
package org.mvplugins.multiverse.core.world.generators;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;
import com.dumptruckman.minecraft.util.Logging;
import com.google.common.base.Strings;
@@ -176,16 +175,19 @@ public final class GeneratorProvider implements Listener {
*/
public Collection<String> suggestGeneratorString(@Nullable String currentInput) {
String[] genSpilt = currentInput == null ? new String[0] : REPatterns.COLON.split(currentInput, 2);
List<String> suggestions = new ArrayList<>(generatorPlugins.keySet());
if (genSpilt.length < 2) {
return suggestions;
}
GeneratorPlugin generatorPlugin = generatorPlugins.get(genSpilt[0]);
if (generatorPlugin == null) {
return suggestions;
}
suggestions.addAll(generatorPlugin.suggestIds(genSpilt[1]).stream().map(id -> genSpilt[0] + ":" + id).toList());
return suggestions;
String generatorName = genSpilt[0];
String generatorId = genSpilt.length > 1 ? genSpilt[1] : "";
return generatorPlugins.entrySet().stream()
.flatMap(entry -> {
var ids = entry.getValue().suggestIds(entry.getKey().equals(generatorName) ? generatorId : "");
if (ids.isEmpty()) {
return Stream.of(entry.getKey());
}
return ids.stream().map(id -> Strings.isNullOrEmpty(id)
? entry.getKey()
: entry.getKey() + ":" + id);
})
.toList();
}
/**
@@ -238,10 +238,10 @@ mv-core.entrycheck.exceedplayerlimit=The world has reached its player limit.
mv-core.entrycheck.noworldaccess=You do not have permissions to access the world.
# economy
mv-core.economy.item.deposit=&fYou have been charged &a{price}.
mv-core.economy.item.withdraw=&a{price}&f has been deposited into your inventory.
mv-core.economy.vault.deposit=&fYou have been charged &2{price}.
mv-core.economy.vault.withdraw=&2{price}&f has been deposited into your account.
mv-core.economy.item.deposit=&a{price}&f has been deposited into your inventory.
mv-core.economy.item.withdraw=&fYou have been charged &a{price}.
mv-core.economy.vault.deposit=&2{price}&f has been deposited into your account.
mv-core.economy.vault.withdraw=&fYou have been charged &2{price}.
# multiverse parse destination failure reason
mv-core.destination.anchor.failurereason.anchornotfound=&cAnchor '&6{anchor}&c' does not exist!
@@ -0,0 +1,327 @@
# configuration
mv-core.config.save.failed=Не удалось сохранить файл config.yml Multiverse-Core. Ваши изменения будут временными!
mv-core.config.node.notfound=Узел не найден в конфигурации: {node}
# /mv check
mv-core.check.description=Проверяет, может ли игрок телепортироваться в указанное место.
mv-core.check.player.description=Игрок для проверки пункта назначения.
mv-core.check.destination.description=Место назначения, например, название мира.
mv-core.check.haspermission=&a{player} может телепортироваться в {destination}
mv-core.check.nopermission=&c{player} не может телепортироваться в {destination}
mv-core.check.location=Местоположение пункта назначения: &f{location}
# /mv clone
mv-core.clone.description=Клонирует мир.
mv-core.clone.world.description=Целевой мир для клонирования.
mv-core.clone.newWorld.description=Название нового клонированного мира.
mv-core.clone.cloning=Клонирование мира '{world}' в '{newworld}'...
mv-core.clone.success=&aМир клонирован в '{world}'!
# /mv config
mv-core.config.description=Показать или установить значение конфигурации.
mv-core.config.name.description=Название конфигурации для установки или отображения.
mv-core.config.value.description=Значение для установки конфигурации. Если не указано, будет показано текущее значение.
mv-core.config.show.success=&aКонфигурация '&6{name}&a' в данный момент установлена на '&6{value}&a'.
mv-core.config.show.error=&cНе удалось получить значение конфигурации для '&6{name}&c'.\n&c{error}
mv-core.config.set.success=&aУспешно установлена конфигурация '&6{name}&a' на '&6{value}&a'.
mv-core.config.set.error=&cНе удалось установить конфигурацию '&6{name}&c' на '&6{value}&c'.\n&c{error}
# /mv confirm
mv-core.confirm.description=Подтверждает опасные команды перед их выполнением.
# /mv coordinates
mv-core.coordinates.description=Просто отправляет ваши координаты
mv-core.coordinates.info.title=&b--- Информация о местоположении ---
mv-core.coordinates.info.world=&bМир: &f{world}
mv-core.coordinates.info.alias=&bПсевдоним: &f{alias}
mv-core.coordinates.info.worldScale=&bМасштаб мира: &f{scale}
mv-core.coordinates.info.coordinates=&bКоординаты: &f{coordinates}
mv-core.coordinates.info.direction=&bНаправление: &f{direction}
# /mv create
mv-core.create.description=Создает новый мир и подгружает его.
mv-core.create.name.description=Название нового мира.
mv-core.create.environment.description=Окружение мира. См.: /mv environments
mv-core.create.flags.description=Дополнительные настройки мира. См. https://gg.gg/nn8bl для всех возможных флагов.
mv-core.create.properties=Создание мира {worldName} со следующими свойствами:
mv-core.create.properties.environment=- Окружение: &f{environment}
mv-core.create.properties.seed=- Сид: &f{seed}
mv-core.create.properties.worldtype=- Тип мира: &f{worldType}
mv-core.create.properties.adjustspawn=- Настройка спавна: &f{adjustSpawn}
mv-core.create.properties.biome=- Биом: &f{biome}
mv-core.create.properties.generator=- Генератор: &f{generator}
mv-core.create.properties.generatorsettings=- Настройки генератора: &f{generatorSettings}
mv-core.create.properties.structures=- Структуры: &f{structures}
mv-core.create.loading=Создание мира...
mv-core.create.success=&aМир '{world}' создан!
# /mv debug
mv-core.debug.info.description=Показать текущий уровень отладки.
mv-core.debug.info.off=&fРежим отладки Multiverse &cВЫКЛЮЧЕН&f.
mv-core.debug.info.on=&fРежим отладки Multiverse установлен на &aуровень {level}&f.
mv-core.debug.change.description=Изменить уровень отладки.
mv-core.debug.change.syntax=уровень
mv-core.debug.change.level.description=Уровень отладки для установки.
# /mv delete
mv-core.delete.description=Удаляет мир с вашего сервера НАВСЕГДА.
mv-core.delete.deleting=Удаление мира '{world}'...
mv-core.delete.prompt=Вы уверены, что хотите удалить мир '{world}'?
mv-core.delete.success=&aМир '{world}' удален!
# /mv dumps
mv-core.dumps.description=Выводит информацию о версии в консоль или заливает в paste-сервисы
mv-core.dumps.url.list={service} : {link}
# /mv gamerule set
mv-core.gamerule.set.description=Изменяет игровое правило в одном или нескольких мирах.
mv-core.gamerule.set.gamerule.description=Игровое правило для установки.
mv-core.gamerule.set.value.description=Значение игрового правила.
mv-core.gamerule.set.world.description=Мир для применения игрового правила, по умолчанию мир текущего игрока.
mv-core.gamerule.set.failed=Не удалось установить игровое правило {gamerule} на {value} в {world}. &fОно должно быть типа {type}.
mv-core.gamerule.set.success.single=&aУспешно установлено {gamerule} на {value} в {world}.
mv-core.gamerule.set.success.multiple=&aУспешно установлено {gamerule} на {value} в {count} мирах.
# /mv gamerule reset
mv-core.gamerule.reset.description=Сбрасывает игровое правило в одном или нескольких мирах до значения по умолчанию.
mv-core.gamerule.reset.gamerule.description=Игровое правило для сброса.
mv-core.gamerule.reset.world.description=Мир для сброса игрового правила, по умолчанию мир текущего игрока.
mv-core.gamerule.reset.failed=Не удалось сбросить игровое правило {gamerule} в {world}.
mv-core.gamerule.reset.success.single=&aУспешно сброшено {gamerule} в {world}.
mv-core.gamerule.reset.success.multiple=&aУспешно сброшено {gamerule} в {count} мирах.
# /mv gamerule list
mv-core.gamerule.list.description=Выводит список игровых правил для указанного мира.
mv-core.gamerule.list.description.page=Страница для просмотра.
mv-core.gamerule.list.description.world=Мир для вывода списка игровых правил.
mv-core.gamerule.list.title= --- Игровые правила для {world} ---
# /mv generators
mv-core.generators.description=Выводит список генераторов, известных Multiverse
mv-core.generators.description.flags=Фильтр - показывает только соответствующие записи. Страница - страница для показа
mv-core.generators.empty=&cПлагины-генераторы не найдены.
# /mv import
mv-core.import.description=Импортирует существующую папку мира.
mv-core.import.name.description=Название папки мира.
mv-core.import.env.description=Окружение мира. См.: /mv env
mv-core.import.other.description=Другие настройки мира. См.: https://gg.gg/nn8c2
mv-core.import.importing=Начинается импорт мира '{world}'...
mv-core.import.success=&aМир '{world}' импортирован!
# /mv info
mv-core.info.description=Отображает все настроенные свойства мира.
mv-core.info.description.world=Мир для отображения информации.
mv-core.info.header=&a&l---- Информация о мире: &f&l{world}&a&l ----
mv-core.info.nocontent=&cТакое свойство мира не найдено!
# /mv list
mv-core.list.description=Отображает список всех миров, в которые вы можете войти.
mv-core.list.header=&6====[ Список миров Multiverse ]====
mv-core.list.nocontent=&cМиры не найдены, или у вас нет к ним доступа!
# /mv load
mv-core.load.description=Подгружает мир. Мир должен быть уже в worlds.yml, иначе используйте /mv import.
mv-core.load.world.description=Название мира, который вы хотите подгрузить.
mv-core.load.loading=Подгрузка мира '{world}'...
mv-core.load.success=&aМир '{world}' подгружен!
# /mv modify
mv-core.modify.description=Изменяет свойство заданного мира.
mv-core.modify.world.description=Название мира, который вы хотите изменить.
mv-core.modify.property.description=Свойство, которое вы хотите изменить.
mv-core.modify.value.description=Значение свойства.
mv-core.modify.cannothavevalue=Вы не можете указать значение для {action} '{property}'.
mv-core.modify.specifyvalue=Вы должны указать значение для {action} '{property}'.
mv-core.modify.success=&aУспешно {action} '&9{property}&a' на '&9{value}&a' в мире &9{world}&a.
mv-core.modify.failure=&cНе удалось {action} '&9{property}&c' на '&9{value}&c' в мире &9{world}&c.\n&c{error}
mv-core.modify.failure.novalue=&cНе удалось {action} '&9{property}&c' в мире &9{world}&c.\n&c{error}
# /mv regen
mv-core.regen.description=Регенерирует мир на вашем сервере. Предыдущее состояние будет потеряно НАВСЕГДА.
mv-core.regen.world.description=Мир, который вы хотите регенерировать.
mv-core.regen.other.description=Другие настройки мира. См.: http://gg.gg/nn8lk
mv-core.regen.regenerating=Регенерация мира '{world}'...
mv-core.regen.prompt=Вы уверены, что хотите регенерировать мир '{world}'?
mv-core.regen.success=&aМир '{world}' регенерирован!
# /mv reload
mv-core.reload.description=Перезагружает файлы конфигурации для всех модулей Multiverse.
mv-core.reload.reloading=&6Перезагрузка конфигураций всех плагинов Multiverse...
mv-core.reload.success=&aПерезагрузка завершена!
# /mv remove
mv-core.remove.description=Выгружает мир из Multiverse и удаляет его из worlds.yml. Это НЕ удаляет папку мира.
mv-core.remove.world.description=Мир, который вы хотите удалить из знаний MV.
mv-core.remove.success=&aМир '{world}' удален!
# /mv
mv-core.root.title=&a{name} версия {version}
mv-core.root.help=&aСм. &f/mv help&a для доступных команд.
# /mv setspawn
mv-core.setspawn.description=Устанавливает точку спавна указанного мира
mv-core.setspawn.location.description=Местоположение нового спавна
mv-core.setspawn.world.description=Целевой мир для установки спавна (по умолчанию текущий мир игрока)
# /mv spawn
mv-core.spawn.description=Телепортирует указанного игрока на спавн мира, в котором он находится
mv-core.spawn.player.description=Игрок
mv-core.spawn.success=Телепортирован {player} на спавн '{world}'!
mv-core.spawn.failed=Не удалось телепортировать {player} на спавн '{world}'. {reason}
# /mv tp
mv-core.teleport.description=Позволяет телепортироваться в место на вашем сервере!
mv-core.teleport.player.description=Целевой игрок для телепортации.
mv-core.teleport.destination.description=Местоположение, может быть название мира.
mv-core.teleport.toomanyplayers=&cВы не можете телепортировать более {count} игроков одновременно.
mv-core.teleport.success=Телепортирован {player} в {destination}.
mv-core.teleport.failed=Не удалось телепортировать {player} в {destination}. {reason}
# /mv unload
mv-core.unload.description=Выгружает мир из Multiverse. Это НЕ удаляет папку мира. Это НЕ удаляет его из файла конфигурации.
mv-core.unload.world.description=Название мира, который вы хотите выгрузить.
mv-core.unload.unloading=Выгрузка мира '{world}'...
mv-core.unload.success=&aМир '{world}' выгружен!
# /mv usage
mv-core.usage.description=Показать использование команд Multiverse-Core.
# /mv version
mv-core.version.description=Отображает версию и авторов
mv-core.version.mv=Версия Multiverse Core &fv{version}
mv-core.version.authors=Авторы Multiverse Core &f{authors}
mv-core.version.secretcode=Специальный код: &fFRN002
# /mv who
# /mv whoall
mv-core.who.description=Выводит список игроков в указанном мире
mv-core.who.all.description=Выводит список игроков во всех мирах
mv-core.who.world.description=Название мира, в котором вы хотите вывести список игроков
mv-core.who.flags.description=Фильтр - показывает только соответствующие записи. Страница - страница для показа
mv-core.who.empty=&7&oпусто
mv-core.who.header=&b====[ Список игроков в мирах Multiverse ]====
# /mv worldborder
mv-core.worldborder.center.nothingchanged=&cНичего не изменилось. Граница мира уже центрирована там для мира '&6{world}&c'.
mv-core.worldborder.center.success=&rУстановлен центр границы мира на &6{x}&r, &6{z}&r для мира '&6{world}&r'.
mv-core.worldborder.damageamount.nothingchanged=&cНичего не изменилось. Урон от границы мира уже такой для мира '&6{world}&c'.
mv-core.worldborder.damageamount.success=&rУстановлен урон от границы мира на {amount} за блок каждую секунду для мира '&6{world}&r'.
mv-core.worldborder.damagebuffer.nothingchanged=&cНичего не изменилось. Буфер урона границы мира уже на таком расстоянии для мира '&6{world}&c'.
mv-core.worldborder.damagebuffer.success=&rУстановлен буфер урона границы мира на {distance} блок(ов) для мира '&6{world}&r'.
mv-core.worldborder.get.size=&rГраница мира в данный момент {size} блок(ов) в ширину для мира '&6{world}&r'.
mv-core.worldborder.set.nothingchanged=&cНичего не изменилось. Граница мира уже такого размера для мира '&6{world}&c'.
mv-core.worldborder.set.immediate=&rУстановлена граница мира на {size} блок(ов) в ширину для мира '&6{world}&r'.
mv-core.worldborder.set.shrinking=&rСжатие границы мира до {size} блок(ов) в ширину за {time} секунд(ы) для мира '&6{world}&r'.
mv-core.worldborder.set.growing=&rРасширение границы мира до {size} блок(ов) в ширину за {time} секунд(ы) для мира '&6{world}&r'.
mv-core.worldborder.warningdistance.nothingchanged=&cНичего не изменилось. Предупреждение границы мира уже на таком расстоянии для мира '&6{world}&c'.
mv-core.worldborder.warningdistance.success=&rУстановлено расстояние предупреждения границы мира на {distance} блок(ов) для мира '&6{world}&r'.
mv-core.worldborder.warningtime.nothingchanged=&cНичего не изменилось. Время предупреждения границы мира уже такое для мира '&6{world}&c'.
mv-core.worldborder.warningtime.success=&rУстановлено время предупреждения границы мира на {time} секунд(ы) для мира '&6{world}&r'.
# commands error
mv-core.commands.error.playersonly=&cЭта команда может использоваться только игроками
mv-core.commands.error.multiverseworldonly=&cЭто может использоваться только в мирах multiverse
# entry check
mv-core.entrycheck.blacklisted=Мир '{world}' в черном списке.
mv-core.entrycheck.notenoughmoney=У вас недостаточно денег для оплаты пограничной пошлины. Вам необходимо заплатить {amount}.
mv-core.entrycheck.cannotpayentryfee=У вас нет возможности оплатить пограничную пошлину.
mv-core.entrycheck.exceedplayerlimit=Мир достиг лимита игроков.
mv-core.entrycheck.noworldaccess=У вас нет доступа к этому миру.
# economy
mv-core.economy.item.deposit=&a{price}&f было добавлено в ваш инвентарь.
mv-core.economy.item.withdraw=&fС вас снято &a{price}.
mv-core.economy.vault.deposit=&2{price}&f было добавлено на ваш счет.
mv-core.economy.vault.withdraw=&fС вас снято &2{price}.
# multiverse parse destination failure reason
mv-core.destination.anchor.failurereason.anchornotfound=&cЯкорь '&6{anchor}&c' не существует!
mv-core.destination.bed.failurereason.playernotfound=&cИгрок '&6{player}&c' не существует или не в сети! Для телепортации к собственной кровати используйте 'playerbed'.
mv-core.destination.cannon.failurereason.invalidformat=&cФормат пушки назначения: &6ca:worldname:x,y,z:pitch:yaw:speed
mv-core.destination.exact.failurereason.invalidformat=&cТочный формат назначения: &6e:worldname:x,y,z:pitch:yaw
mv-core.destination.player.failurereason.playernotfound=&cИгрок '&6{player}&c' не существует или не в сети!
mv-core.destination.shared.failurereason.invalidcoordinatesformat=Вы должны указать правильные координаты в этом формате: &6{x},{y},{z}
mv-core.destination.shared.failurereason.invalidnumberformat=Значение не является допустимым числом. {error}.
mv-core.destination.shared.failurereason.worldnotfound=&cМир '&6{world}&c' не существует или не подгружен!
mv-core.destination.parse.failurereason.invaliddestinationid=Неверный идентификатор назначения: {id}. Допустимые идентификаторы назначения: {ids}
# teleport failure reason
mv-core.teleportfailurereason.null.destination=Назначение недействительно!
mv-core.teleportfailurereason.null.location=Местоположение недействительно!
mv-core.teleportfailurereason.null.world=&cМир местоположения недействителен!
mv-core.teleportfailurereason.unsafe.location=Местоположение небезопасно! Используйте `--unsafe` для переопределения.
mv-core.teleportfailurereason.teleport.failed=Что-то отклонило телепортацию.
mv-core.teleportfailurereason.teleport.failed.exception=Произошла ошибка во время телепортации. См. консоль для подробностей.
mv-core.teleportfailurereason.event.cancelled=Телепортация была отменена другим плагином.
# world manager result
mv-core.cloneworld.invalidworldname=Мир '{world}' содержит недопустимые символы!
mv-core.cloneworld.worldexistfolder=Мир '{world}' существует в папках сервера! Вам нужно удалить его перед клонированием.
mv-core.cloneworld.worldexistunloaded=Мир '{world}' уже существует и не подгружен! Вам нужно удалить его перед клонированием.
mv-core.cloneworld.worldexistloaded=Мир '{world}' уже существует! Вам нужно удалить его перед клонированием.
mv-core.cloneworld.copyfailed=Не удалось скопировать мир в '{world}': {error}\n&fСм. консоль для подробностей.
mv-core.createworld.invalidworldname=Мир '{world}' содержит недопустимые символы!
mv-core.createworld.worldexistfolder=Мир '{world}' уже существует в папках сервера!&f Введите '&a/mv import {world} <environment>&f' если хотите импортировать его.
mv-core.createworld.worldexistunloaded=Мир '{world}' уже существует, но не подгружен!&f Введите '&a/mv load {world}&f' если хотите подгрузить его.
mv-core.createworld.worldexistloaded=Мир '{world}' уже существует!
mv-core.deleteworld.worldnonexistent=Мир '{world}' не найден!
mv-core.deleteworld.loadfailed=Не удалось подгрузить мир '{world}', существует ли папка мира?&f Вы можете выполнить '&a/mv remove {world}&f' чтобы удалить его из Multiverse, или попытаться подгрузить снова с '&a/mv load {world}&f'.
mv-core.deleteworld.worldfoldernotfound=Папка мира '{world}' не найдена!
mv-core.deleteworld.failedtodeletefolder=Не удалось удалить папку мира '{world}': {error}\n&fСм. консоль для подробностей.
mv-core.importworld.invalidworldname=Мир '{world}' содержит недопустимые символы!
mv-core.importworld.worldexistunloaded=Мир '{world}' уже существует, но не подгружен!&f Введите '&a/mv load {world}&f' если хотите подгрузить его.
mv-core.importworld.worldexistloaded=Мир '{world}' уже существует!
mv-core.importworld.worldfolderinvalid=Содержимое папки мира '{world}' не является допустимым миром!
mv-core.loadworld.worldalreadyloading=Мир '{world}' уже подгружается! Пожалуйста, подождите...
mv-core.loadworld.worldnonexistent=Мир '{world}' не найден! Используйте '&a/mv create {world} <environment>&f' чтобы создать его.
mv-core.loadworld.worldexistfolder=Мир '{world}' существует в папках сервера, но неизвестен Multiverse!&f Введите '&a/mv import {world} <environment>&f' если хотите импортировать его.
mv-core.loadworld.worldexistloaded=Мир '{world}' уже подгружен!
mv-core.removeworld.worldnonexistent=Мир '{world}' не найден!
mv-core.unloadworld.worldalreadyunloading=Мир '{world}' уже выгружается! Пожалуйста, подождите...
mv-core.unloadworld.worldnonexistent=Мир '{world}' не существует!
mv-core.unloadworld.worldunloaded=Мир '{world}' уже выгружен!
mv-core.unloadworld.bukkitunloadfailed=Bukkit не удалось выгрузить мир '{world}': {error}
mv-core.worldcreator.invalidbiomeprovider=&cНедопустимый поставщик биома '&6{biome}&c'! {error}\n&cСм. консоль для подробностей.
mv-core.worldcreator.invalidchunkgenerator=&cНедопустимый генератор чанков '&6{generator}&c'! {error}\n&cСкорее всего, это проблема с вашим плагином генератора, а НЕ с multiverse. См. консоль для подробностей.
mv-core.worldcreator.bukkitcreationfailed=&cBukkit не удалось создать мир '{world}': {error}\n&cСм. консоль для подробностей.
# queue command result
mv-core.queuecommand.nocommandinqueue=&cУ вас нет команд в очереди.
mv-core.queuecommand.invalidotp=&cНеверный OTP номер '&6{otp}&c'. Пожалуйста, попробуйте снова...
mv-core.queuecommand.commandexecutionerror=&cОшибка выполнения команды из очереди: {error}\n&fСм. консоль для подробностей.
# content display messages
mv-core.contentdisplay.nocontent=&cНет содержимого для отображения.
mv-core.contentdisplay.filter=&7[Фильтр '{filter}']
mv-core.contentdisplay.page=&7[Страница {current} из {total}]
mv-core.contentdisplay.invalidpage=&cНеверный номер страницы. Пожалуйста, введите номер страницы между &31&c и &3{total}&c.
mv-core.contentdisplay.empty=&7&oпусто
mv-core.contentdisplay.null=&7&onull
# multiverse world exception
mv-core.exception.multiverseworld.createnull=Созданный мир вернул null!
mv-core.exception.multiverseworld.unloaddefaultworld=&cВы не можете выгрузить основной мир! Мир &6{world}&c является основным миром, определенным в server.properties '&6level-name&c'.
mv-core.exception.multiverseworld.unloadplayersinworld=&cВ мире все еще находится &6{count}&c игрок(ов)! Используйте флаг '&6--remove-players&c' в вашей команде, чтобы телепортировать всех игроков из мира.
mv-core.exception.multiverseworld.unloaderror=&cПроизошла неизвестная ошибка при выгрузке мира: &6{world}&c.\n&cСм. консоль для подробностей.
# generic
mv-core.generic.success=Успешно!
mv-core.generic.failure=Неудача!
mv-core.generic.error=Ошибка!
mv-core.generic.null=Null!
mv-core.generic.you=вы