[FrozenCore] GameBreaker

Фанатик пришел

Никакого плагина нет, о чем ты

Все файлы пустые, сделаны только сообщения. По чему вы вообще судите

Удобно когда загнал все строки в один класс и используешь их в других одного плагина

Пример
package ru.weblox.api.utils;

import cn.nukkit.utils.TextFormat;

public interface Lang {

    String GLOBAL_COMMAND_NOT_PERMISSION = "{red}У вас нет прав на использование этой команды";
    String CLEARED_TIMED = "{red}Очистка произойдет через %s %s";
    String CLEARED_SUCCESS = "{red}С земли %s %s %s";
    String COMMAND_BAN_ALERT = "Вы забанены администратором %s. Причина: %s.\nВремя до окончания бана: %s.";
    String COMMAND_BAN_ALREADY_BAN = "Игрок уже был забанен ранее";
    String COMMAND_BAN_BROADCAST = "{red}Администратор %s забанил игрока %s на %s. Причина: %s";
    @SuppressWarnings("unused")
    String COMMAND_BAN_DESCRIPTION = "Забанить игрока";
    String COMMAND_BAN_INCORRECT_DAYS = "Некорректные дни (от 5 до 30)";
    String COMMAND_BAN_NO_REASON = "Причина не указана";
    @SuppressWarnings("unused")
    String COMMAND_FREEZE_DESCRIPTION = "Заморозить игрока";
    String COMMAND_FREEZE_OFFLINE_PLAYER = "{red}Игрок не существует или не в сети";
    String COMMAND_FREEZE_PLAYER = "{green}Вы заморозили %s";
    String COMMAND_FREEZE_YOUSELF = "{green}Вы заморозили себя";
    @SuppressWarnings("unused")
    String COMMAND_GIVEMONEY_DESCRIPTION = "Выдать игроку денег";
    String COMMAND_GIVEMONEY_SUCCESS = "Вы успешно выдали игроку %s %s₽";
    @SuppressWarnings("unused")
    String COMMAND_GOD_DESCRIPTION = "Включить режим бога";
    String COMMAND_GOD_DISABLE = "Режим бога выключен";
    String COMMAND_GOD_ENABLE = "Режим бога включен";
    @SuppressWarnings("unused")
    String COMMAND_ID_DESCRIPTION = "Покажите id предмета, который у вас в руке";
    String COMMAND_ID_TOGGLE_OFF = "Информация о предмете, который у вас есть в руках, больше не будет вам показана";
    String COMMAND_ID_TOGGLE_ON = "Теперь будет отображаться информация о любом предмете, который у вас есть в руке";
    String COMMAND_MUTE_ALERT = "Вы замучены администратором %s. Причина: %s.\nВремя до окончания мута: %s.";
    String COMMAND_MUTE_ALREADY_MUTE = "Игрок уже в муте";
    String COMMAND_MUTE_BROADCAST = "{red}Администратор %s замутил игрока %s на %s. Причина: %s";
    @SuppressWarnings("unused")
    String COMMAND_MUTE_DESCRIPTION = "Замутить игрока";
    String COMMAND_MUTE_INCORRECT_TIME = "Некорректное время (от 30 до 180 минут)";
    String COMMAND_MUTE_NO_REASON = "Нет причины";
    String COMMAND_MUTE_ON_PLAYER = "Вас замутил администратор %s на %s. Причина: %s";
    @SuppressWarnings("unused")
    String COMMAND_MYMONEY_DESCRIPTION = "Показать баланс";
    String COMMAND_MYMONEY = "Ваш баланс: %s₽";
    @SuppressWarnings("unused")
    String COMMAND_PAY_DESCRIPTION = "Перевести денег игроку";
    String COMMAND_PAY_NOT_MONEY = "У вас недостаточно денег для перечисления";
    String COMMAND_PAY_SUCCESS = "Вы перевели игроку %s %s₽";
    String COMMAND_PAY_TARGET_SUCCESS = "Игрок %s перевел вам %s₽";
    @SuppressWarnings("unused")
    String COMMAND_REDUCEMONEY_DESCRIPTION = "Забрать денег у игрока";
    String COMMAND_REDUCEMONEY_SUCCESS = "Вы забрали у игрока %s %s₽";
    @SuppressWarnings("unused")
    String COMMAND_SETMONEY_DESCRIPTION = "Установить баланс игроку";
    String COMMAND_SETMONEY_SUCCESS = "Вы установили игроку %s баланс %s₽";
    String COMMAND_UNBAN_BROADCAST = "{red}Администратор %s разбанил игрока %s. Причина: %s";
    @SuppressWarnings("unused")
    String COMMAND_UNBAN_DESCRIPTION = "Разбанить игрока";
    String COMMAND_UNBAN_NOT_BAN = "Игрок не находился в бане";
    @SuppressWarnings("unused")
    String COMMAND_UNFREEZE_DESCRIPTION = "Разморозить игрока";
    String COMMAND_UNFREEZE_OFFLINE_PLAYER = "Игрок не существует, или не в сети";
    String COMMAND_UNFREEZE_PLAYER = "Вы разморозили %s";
    String COMMAND_UNFREEZE_YOUSELF = "Вы разморозили себя";
    String COMMAND_UNMUTE_BROADCAST = "{red}Администратор %s размутил игрока %s. Причина: %s";
    @SuppressWarnings("unused")
    String COMMAND_UNMUTE_DESCRIPTION = "Размутить игрока";
    String COMMAND_UNMUTE_NOT_MUTE = "Игрок не находился в муте";
    String COMMAND_UNMUTE_ON_PLAYER = "Вас размутил администратор %s. Причина: %s";
    String CREATIVE_DROP_ITEM = "{red}Вы не можете выбрасывать вещи из креатива";
    String CREATIVE_PICKUP_ITEM = "{red}Вы не можете поднимать предметы в креативе";
    String GLOBAL_COMMAND_INVALID_NUMBER_OF_ARGUMENTS = "Неверное колличество аргументов";
    @SuppressWarnings("unused")
    String GLOBAL_COMMAND_PARAMS_DAYS = "дни";
    @SuppressWarnings("unused")
    String GLOBAL_COMMAND_PARAMS_PLAYER = "игрок";
    @SuppressWarnings("unused")
    String GLOBAL_COMMAND_PARAMS_REASON = "причина";
    @SuppressWarnings("unused")
    String GLOBAL_COMMAND_PARAMS_TIME = "время";
    String GLOBAL_COMMAND_UNKNOWN_SUBCOMMAND = "Неизвестная суб-команда";
    String GLOBAL_COMMAND_USE_INGAME = "Пожалуйста, используйте эту команду в игре";
    String PRIVATE_MESSAGE_PLACEHOLDER_SENDER = "{blue}[П] {yellow}Вы > %s > {reset} %s";
    String PRIVATE_MESSAGE_PLACEHOLDER_SENT = "{blue}[П] {yellow}%s > Вам > {reset} %s";
    String PRIVATE_MESSAGE_PLAYER_OFFLINE = "Игрок не существует, или не в сети";
    String PRIVATE_MESSAGE_SEND_YOURSELF = "Вы не можете отправить личное сообщение себе";
    String SCHEMATICS_SCHEM_IMPORT_SUCCESS = "Схема %s успешно импортирована";
    String SCHEMATICS_SCHEM_INVALID = "Схема недействительна";
    String SCHEMATICS_SCHEM_NOT_FOUND = "Схема %s не найдена";
    String FORM_TELEPORTATION_TITLE = "Телепортация";
    String FORM_TELEPORTATION_LABEL = "Телепорт в другой мир";
    String FORM_TELEPORTATION_TELEPORT = "Вы телепортированы в %s";
    String FORM_GENERATION_TITLE = "Генерация мира";
    String FORM_GENERATION_INPUT_NAME_NAME = "Название";
    String FORM_GENERATION_INPUT_NAME_PLACEHOLDER = "Введите название мира";
    String COMMAND_TIME_LEVEL_NOT_FOUND = "Мир с названием %s не найден";
    String COMMAND_TIME_LEVEL_START = "Время в мире %s запущено";
    String COMMAND_TIME_LEVEL_STOP = "Время в мире %s остановлено";
    String COMMAND_TIME_LEVELS_STOP = "Время во всех мирах остановлено";
    String COMMAND_TIME_LEVELS_START = "Время во всех мирах запущено";
    String COMMAND_TIME_LEVEL_QUERY = "Время в мире %s: %s";
    String AUTORESTART_MESSAGE = "{red}Перезагрузка через %s мин.";

    default String tr(String text) {
        for (TextFormat color : TextFormat.values()) {
            text = text.replace("{" + color.name().toLowerCase() + "}", color.toString());
        }
        return text;
    }

    default String tr(String text, Object[] args) {
        text = tr(text);
        return text.formatted(args);
    }
}
player.sendMessage(tr(COMMAND_TIME_LEVELS_START));

А у меня все сообщения в отдельном файле

import cn.nukkit.plugin.Plugin;
import cn.nukkit.utils.Config;
import cn.nukkit.utils.TextFormat;

import java.util.HashMap;
import java.util.Map;

public class Language {

    private static final Map<String, String> messages = new HashMap<>();

    /**
     * Load language
     */
    public static void init(Plugin plugin) {
        String language = plugin.getConfig().getString("language", "eng").toLowerCase();
        plugin.saveResource("lang/" + language + ".yml");

        Config config = new Config(plugin.getDataFolder() + "/lang/" + language + ".yml", Config.YAML);
        config.getAll().forEach((key, value) -> {
            if (value instanceof String message) {
                messages.put(key, message);
            }
        });
    }

    /**
     * Get message
     * @param key Message key
     * @param replacements Message parameters
     * @return String message
     */
    public static String get(String key, Object... replacements) {
        String message = TextFormat.colorize(messages.getOrDefault(key, key));

        int i = 0;
        for (Object replacement : replacements) {
            message = message.replace("[" + i + "]", String.valueOf(replacement));
            i++;
        }

        return message;
    }
}

аналогично

1 лайк

Я не пользуюсь конфигом, потому что хочу чтобы при вводе ключа отображались подсказки

В таком случае было бы логично хранить в константах ключи для конфигов :clown_face:

Это не то же самое, лол.

Тоже хотел об этом написать

Да и я не совсем об этом

я точно также делаю, но в будущем полностью переделаю все

Так а смысл писать отдельно ключи и потом в конфиги тексты, при добавлении новой строки добавлять и там и там, легче в классе сделать и все

Кошмар

Да какая мне разница?
Ты сказал что не используешь кфг из за удобства работы с подсказками, я сказал что то же удобство можно получить не теряя всех возможностей кфг.
Всё, тема за сим закрыта.

опять же, это первое что пришло в голову, в будущем я полностью переработаю все)

Да я не агитирую, просто в том и суть что потом всё это переделывать)
Как будто мало того что работа с текстом это всегда геморрой…

В мое случае использования того же конфига - напряг мозгов + мусор в папке плагина, так что я воспользовался легким путем, который будет легко переделан)

че он написал

То что он гкодер и приправил всё это матом