Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Метки:
Теги Теги
config конфиг

Nikolai_Faint

Активный участник
Пользователь
Баллы
96
Имя в Minecraft
fcode0xb
Привет,это я 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 думаю сами справитесь

Всем покедова)
 
public static void color(Player p, String msg){
p.sendMessage(ChatColor.translateAlternateColorCodes('&', msg));
}
Зачем вводить кучу методов? Не проще ли сразу использовать ChatColor.translateAlternateColorCodes(), а?

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());
А ничего так, что последнее значение тупо перезапишет все, что ты записывал выше?
------------------------------------------
Короче, бесполезный гайд, если рассчитываешь на новичков, то говнокодить права не имеешь вообще, ибо привыкнут копировать твой код и писать такой же, знающие хотя бы Java Core и имеющие документацию - тоже ничего нового тут не узнают.
Поэтому, пожалуйста, сделай одолжение и не делай больше туториалы, ладно?
 
Последнее редактирование:
А ничего так, что последнее значение тупо перезапишет все, что ты записывал выше?

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

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

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

Назад
Верх