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

Помогите Чтение из config.yml позиций и прочего

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

Статус темы:
Закрыта.
  1. Автор темы
    Firec

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

    Баллы:
    61
    Есть примерно такой файл конфига:
    Код:
    work:
      block1:
        x: 0
        y: 1
        z: 0
        id: 1
      block2:
        x: 54
        y: 35
        z: 81
        id: 95
    ...
    Как можно с этим работать из кода? Т.е. добавлять читать и удалять данные, записанные таким форматом.
     
  2. Gru2303

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

    Баллы:
    76
    Имя в Minecraft:
    Gru2303
  3. Автор темы
    Firec

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

    Баллы:
    61
    Вот ты серьёзно?
    1. Я уже натыкался на эту ссылку во время попыток разобраться с этой проблемой самостоятельно.
    2. Там нигде нет информации о том, как мне из этого файла достать данные типа HashMap<String, HashMap<String, String>>.
    3. Сам ты никак не помог этим. Даже будь где-то там ответ на мой вопрос - ты никак не указал куда и как смотреть. Ни примера кода, ни короткого объяснения. Спасибо!
     
  4. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Орнул, спасибо.
    Ямл в ведре умеет сам читать и записывать локацию. Просто передай ему ее.
     
  5. Автор темы
    Firec

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

    Баллы:
    61
    Класс, спасибо. Буду думать чей из ваших ответов полезней - ссылка в никуда или совет без ссылок и указаний хоть куда-то.
     
  6. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Потому что понятно же все. Ты даже не кодер и полез в разработку плагинов. Сначала изучи Java, а потом уже задавай тут вопросы. Никто тут не горит желанием обучать школьника, который еще и проявляет агрессию. Тебе нужно не делать сервера в майне а играть на таких.
     
  7. Автор темы
    Firec

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

    Баллы:
    61
    Код:
    package FTSP.main;
    
    import java.util.Map.Entry;
    import java.util.Arrays;
    import java.util.Date;
    import java.util.HashMap;
    
    import org.bukkit.BanList;
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import net.milkbowl.vault.economy.Economy;
    
    
    public class FTSP extends JavaPlugin implements Listener{
        public HashMap<String, HashMap<String, String>> reports = new HashMap<String, HashMap<String, String>>();
        public HashMap<String, Integer> toBan = new HashMap<String, Integer>();
        
        public Integer[] stars = {1,2,4,8,0};
        
        public static Economy economy;
        
        public void onEnable() {
            economy = getServer().getServicesManager().getRegistration(Economy.class).getProvider();
            getConfig().options().copyDefaults();
            saveDefaultConfig();
            getServer().getPluginManager().registerEvents(this, this);
        }
        
        @EventHandler
        public void quit(PlayerQuitEvent e) {
            Player p = e.getPlayer();
            if(reports.containsKey(p.getName())) {
                reports.remove(p.getName());
            }
            if(checkReport(p.getName())) {
                Bukkit.broadcastMessage("Игрок "+ChatColor.RED+p.getName()+ChatColor.WHITE+" вышел и получил бан!");
            }
        }
        
        @EventHandler
        public void death(PlayerDeathEvent e) {
            Player p = e.getEntity().getPlayer();
            Player k = e.getEntity().getKiller();
            if(reports.containsKey(p.getName())) {
                reports.remove(p.getName());
            }
            if(checkReport(p.getName())) {
                if(k!=null) {
                    Bukkit.broadcastMessage("Игрок "+ChatColor.RED+p.getName()+ChatColor.WHITE+" был убит игроком "+ChatColor.GOLD+k.getName()+" и получил бан!");
                } else {
                    Bukkit.broadcastMessage("Игрок "+ChatColor.RED+p.getName()+ChatColor.WHITE+" умер и получил бан!");
                }
            }
        }
        
        private boolean checkReport(String player) {
            if(toBan.containsKey(player)) {
                Date banDate = new Date(System.currentTimeMillis()+stars[toBan.get(player)]*60*60*1000);
                if(stars[toBan.get(player)]==0) { banDate = null; }
                Bukkit.getBanList(BanList.Type.NAME).addBan(player, null, banDate, null);
                Bukkit.getPlayer(player).kickPlayer(null);
                toBan.remove(player);
                return true;
            }
            return false;
        }
        
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            Player from = (Player) sender;
            if(cmd.getName().equals("report")) {
                if(args.length<1) { return false; }
                
                if(args[0]=="send") {
                    if(args.length<2) { return false; }
                    
                    String player = args[1];
                    
                    if(!from.hasPermission("FTSP.report.send")) { return true; }
                    String desc = "";
                    
                    if(args.length>2) {
                        desc = String.join(" ", Arrays.copyOfRange(args, 2, args.length));
                    }
                    
                    HashMap<String, String> tmp = new HashMap<String, String>();
                    
                    tmp.put("from", from.getName());
                    tmp.put("desc", desc);
                    
                    reports.put(player, tmp);
                    
                    String report_notify = "";
                    report_notify += ChatColor.RED + "[ЖАЛОБА] ";
                    report_notify += ChatColor.GOLD + from.getName() + " -> " + player + "\n";
                    report_notify += ChatColor.YELLOW + desc;
                    
                    Bukkit.broadcast(report_notify, "FTSP.report.look");
                    return true;
                } else if(args[0]=="list") {
                    if(!from.hasPermission("FTSP.report.list")) { return true; }
                    String list = ChatColor.GREEN + "Список отправленных репортов:";
                    for(Entry<String, HashMap<String, String>> player1 : reports.entrySet()) {
                        list += "\n\n";
                        list += ChatColor.GOLD + player1.getValue().get("from") + " -> " + player1.getKey();
                        list += ChatColor.WHITE + " " + player1.getValue().get("desc");
                    }
                    sender.sendMessage(list);
                    return true;
                } else if(args[0]=="accept") {
                    if(args.length<2) { return false; }
    
                    String player = args[1];
                    
                    if(!from.hasPermission("FTSP.report.accept")) { from.sendMessage("AAA"); return true; }
                    if(args.length!=3) { return false; }
    
                    try {
                        Integer star = Integer.parseInt(args[2]);
                        reports.remove(player);
                        toBan.put(player, star);
                        Bukkit.broadcastMessage("Игрок "+ChatColor.RED+player+ChatColor.WHITE+" объявлен в розыск! Уровень опастности: "+star);
                    } catch (Exception e) { return false; }
                    return true;
                } else {
                    return false;
                }
            }
            return false;
        }
    }
    Не помню школьников, которые умеют что-то большее чем System.out.prinLn и разделение плагина на миллиард файлов потому что так было в гайде. Да и в любом случае ты ошибся - я студент). Жду, когда напишешь про switch и что-нибудь ещё, что фактически будет синтаксическим сахаром.

    С агрессией всё было бы ещё проще, если бы ты глянул на время моего сообщения. Я уже около 10 часов с перерывами на еду и туалет пытаюь разобраться с сохранение и использованием сраных координат. И ничего найти не мог. А спуся 10 часов мне скинули ссылку в которой нет вообще никакой полезной информации.

    Ну и про то, что я не программист и мне стоит идити учить Java тоже упомину. Ты в глаза не видел мой код. Ты не видел моих навоков от слова совсем. А всё, на чём ты мог основываться - я не нашел нужную информацию в документации к немаленькому такому API. Гениально!

    А теперь на последок вежливо попрошу - либо вообще ничего не пишите, либо распишите всё максимально понятно для человека, который впервые увидел слово Bukkit, Spigot или ещё что-то.
     
  8. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Посмотри как я делаю конфиг в своих кланах. Так же это будет работать и с локацией. (но там у меня hocon).

    А код у тебя говно... upload_2020-4-24_21-17-54.png Что это вообще? пакеты нормально назови.... toLowerCase
     
  9. Gru2303

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

    Баллы:
    76
    Имя в Minecraft:
    Gru2303
    Классный ГоВнОкОд. Респект!!
     
  10. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    Не гоните тут на школьников, я в свои 14(2016 год) начал программировать ^.-
     
  11. Gru2303

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

    Баллы:
    76
    Имя в Minecraft:
    Gru2303
    Лол мне 15 :). И писать код и то умею.

    Начал писать гавнокод у 10 )))

    Держи почитай книжку...

    https://www.investigatii.md/uploads/resurse/Clean_Code.pdf
     

    Вложения:

  12. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Код:
            ConfigurationSection work = this.getConfig().getConfigurationSection("work");
            work.getKeys(false).forEach(key -> {
                ConfigurationSection block = work.getConfigurationSection(key);
                int x = block.getInt("x");
                int y = block.getInt("z");
                int z = block.getInt("z");
                int id = block.getInt("id");
            });
     
  13. chelyaba

    chelyaba Ньюби

    Баллы:
    1
    Ужас на поцана накинулись за код
     
  14. BDMan

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

    Баллы:
    76
    Имя в Minecraft:
    CKATEPTb
    Если бы он агрессивно не кидался на людей, а написал бы "я так не понимаю, сделайте пожалуйста вместо меня", этого бы не было .
     
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Я уже ответил нормально, не парься. Новичкам сложно эти непонятные конфиги ковырять.
     
Статус темы:
Закрыта.

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