1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Стартап Делаем конфиг! Берем строку/записываем в строку!

Тема в разделе "Разработка плагинов для новичков", создана пользователем Nikolai_Faint, 3 дек 2017.

Метки:
  1. Автор темы
    Nikolai_Faint

    Nikolai_Faint Активный участник Пользователь

    Баллы:
    96
    Привет,это я Faint! Решил сделать тутор [Конфиг и его возможности (Для новичков)]
    И так! Что нам понадобиться:
    - Eclipse (Сочувствую если у вас другой IDE)
    - Прямые руки
    - Spigot 1.8 - 1.8.9
    Все. Погнали!
    Для начала нам нужно сделать простой плагин (Будем играть с командами)

    Нам будет нужна команда /cmd (главная команда ) | /cmd (Player) (Сохраняем инфо о плеере в конф) | /cmd reload (перезагрузка конфига)
    Надо заменить значение cmd на команду,к примеру info
    И так,создадим Main(Если не знаете как работать с Eclipse,то вот вам мини тутор)
    Внимание! Чтобы сделать тему удобной,код будет под спойлером.
    Вот мы создали Main.
    Код:
    package me.faint.infocmd;
    
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Listener;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin implements Listener{
    public static Main m;
        @Override
        public void onEnable(){
        saveDefaultConfig();
        getLogger().info("Test CMD Enable!");
        }
        public Main(){
        Main.m = this;
        }
        public static void color(Player p, String msg){
        p.sendMessage(ChatColor.translateAlternateColorCodes('&', msg));
       }
    }
    
    Такс,теперь объяснение
    Что такое public static Main m;
    Это статическая функция(т.е если сложно то это указатель класса Main)
    Что такое public static void color
    Это вместо s = s.replace("&", "/u007"); (чтобы вам было проще)
    И так! Погнали теперь к классу CMD
    Код:
    package me.faint.infocmd;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    
    public class CMD implements CommandExecutor{
    public static Main m = Main.m;
        @SuppressWarnings("deprecation")
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(!(sender instanceof Player)){
                sender.sendMessage(ChatColor.RED + "[Info] You are not player!");
                return true;
            }
            Player p = (Player) sender;
            if(args.length == 0){
            String mes = m.getConfig().getString("command_glav");
            Main.color(p, mes);
            return true;
            }
            if(args[0].equalsIgnoreCase("reload")){
            String mes = m.getConfig().getString("command_reload");
            Main.color(p, mes);
            m.reloadConfig();
            return true;
            }
            if(args[0].equalsIgnoreCase("info")){
            String title1 = m.getConfig().getString("info.title");
            String title2 = m.getConfig().getString("info.subtitle");
            Player target = Bukkit.getPlayer(args[1]);
            title2 = title2.replace("%name%", target.getName());
            if(target != null){
            p.sendTitle(title1, title2);
            m.getConfig().set("players.", target.getName());
            m.getConfig().set("players.", target.getAddress().getHostName());
            m.getConfig().set("players.", target.getAddress().getPort());
            m.getConfig().set("players.", target.getWorld().getName());
            m.getConfig().set("players.", target.getGameMode().getValue());
            return true;
            }
            }
            return false;
        }
    }
    
    Много вопросов,мало ответов!
    Вопрос: Что это такое? if(args.length == 0){
    Ответ:
    Это аргумент главной команды,в Main он указан как
    getCommand("info").setExecutor(new CMD());
    То есть,если мы напишем /info то нам выдаст ту строку которую мы указали в конфиге.


    Вопрос: Что такое m.getConfig()
    Ответ: m - ссылка на класс Main. И от Main мы и получаем конфиг.


    Вопрос: Что такое if(args[0].equalsIgnoreCase("reload")){
    Это аргумент + команда
    Пример: /info reload - Перезагрузка конфига.


    CONFIG.YML (Выводим все свои грехи в конфиг):
    command_glav: '&4info reload | info (Player)'
    command_reload: '&2Конфиг перезагружен!'
    info:
    title: '&2Информация добавлена в конфиг!'
    subtitle: '&4Игрок: %name%'
    С plugin.yml думаю сами справитесь

    Всем покедова)
     
  2. AtomicScience

    AtomicScience Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Зачем вводить кучу методов? Не проще ли сразу использовать ChatColor.translateAlternateColorCodes(), а?

    А ничего так, что последнее значение тупо перезапишет все, что ты записывал выше?
    ------------------------------------------
    Короче, бесполезный гайд, если рассчитываешь на новичков, то говнокодить права не имеешь вообще, ибо привыкнут копировать твой код и писать такой же, знающие хотя бы Java Core и имеющие документацию - тоже ничего нового тут не узнают.
    Поэтому, пожалуйста, сделай одолжение и не делай больше туториалы, ладно?
     
    Последнее редактирование: 3 дек 2017
  3. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    хера-се говнокод
     
  4. Slavkaa

    Slavkaa Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Slavok2001
    Меня обогнал(((
     
  5. iD3LSY

    iD3LSY Активный участник Пользователь

    Баллы:
    76
    Все реально перезапишет. Во-первых, в таких случаях лучше юзать ConfigurationSection; Во-вторых, лучше переставай для таких целей юзать config.yml.

    Также много лишних переменных, по типу:
    Код:
    - XEPb.title
    - XEPb.subtitle
    Это лучше записать через лист/в одному строку, а потом split.
     
  6. Автор темы
    Nikolai_Faint

    Nikolai_Faint Активный участник Пользователь

    Баллы:
    96
    Любишь насиловать старые темы? (Фу таким быть)
     
  7. MicroNovaX

    MicroNovaX Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    MicroNovaX
    Старые(2 месяца)
     

Поделиться этой страницей