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

Помогите Как заменить строку в конфиге

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

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

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

    Баллы:
    66
    Имя в Minecraft:
    Den_Blade
    Нужно заменить одну строчку на другую, если точнее мне нужно поменять sumka на malruk, при этом сохранив содержимое, как реализовать?
    Код:
    e57a78ab-a096-375c-80aa-bcf846bf0786:
      sumka:
        '0': {}
        '1': {}
        '2': {}
        '3': {}
        '4': {}
        '5': {}
        '6': {}
        '7': {}
        '8':
          item:
            ==: org.*********ventory.ItemStack
            type: STONE
            damage: 1
    
     
  2. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    Получаешь список секций конфига, проходишься по ним. Там, где то, что тебе нужно заменить, сохраняешь содержимое и записываешь в новый ключ по тому же пути, а старое удаляешь.
     
  3. Автор темы
    Den_Blade

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

    Баллы:
    66
    Имя в Minecraft:
    Den_Blade
    Сделал что-то такое, но не работает
    Код:
        @EventHandler
        public void onInventoryClick(InventoryClickEvent e) {
    
            if (e.getInventory() != null && e.getInventory().getName().equalsIgnoreCase(ChatColor.GOLD + "Улучшение рюкзака")) {
                final Player p = (Player)e.getWhoClicked();
                e.setCancelled(true);
                if (e.getCurrentItem() == null) {
                    return;
                }
                File playerFile = new File(Main.instance.getDataFolder(), "/backpack" + "/" + p.getName() + ".yml");
                FileConfiguration playerData = YamlConfiguration.loadConfiguration(playerFile);
                if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§aУлучшение: §5Маленький рюкзак§5")) {
                    ConfigurationSection section = playerData.getConfigurationSection(p.getUniqueId().toString() + ".sumka");
                    for(String key : section.getKeys(false))
                    {
                    ConfigurationSection keySection = section.getConfigurationSection(key);
                    playerData.set(p.getUniqueId().toString() + ".sumka", null);
                    playerData.set(p.getUniqueId().toString() + ".malruk", keySection);
                    }
                    Main.BackPack(p, "backpack1");
                }
                
            }
        }
        
    }
     
  4. MySoR

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

    Баллы:
    76
    Имя в Minecraft:
    MySoR
    А разве не прощще не перезаписывпть путь а просто хранить все данные в конфиге изначально (в твоем случае скорее всего размер сумки и ее тип) . Так и мароки меньше и тд.
     
  5. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    Во-первых, ты не сохранил конфиг. Во-вторых, сначала перенеси все, а потом выставляй в том пути null, да и убери эту строку из цикла, ты ведь ее один раз должен только выполнить. На остальное я не особо смотрел, так что если все равно не будет работать - пиши.
     
  6. alexandrage

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

    Баллы:
    173
    Ой нафиг, даже комментировать этот ужас не хочется. :D
     
  7. Автор темы
    Den_Blade

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

    Баллы:
    66
    Имя в Minecraft:
    Den_Blade
    Сделал так, заменяет, но айтемы не перекидывает, создается пустой рюкзак
    Код:
        @EventHandler
        public void onInventoryClick(InventoryClickEvent e) {
    
            if (e.getInventory() != null && e.getInventory().getName().equalsIgnoreCase(ChatColor.GOLD + "Улучшение рюкзака")) {
                final Player p = (Player)e.getWhoClicked();
                e.setCancelled(true);
                if (e.getCurrentItem() == null) {
                    return;
                }
                File playerFile = new File(Main.instance.getDataFolder(), "/backpack" + "/" + p.getName() + ".yml");
                FileConfiguration playerData = YamlConfiguration.loadConfiguration(playerFile);
                if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§aУлучшение: §5Маленький рюкзак§5")) {
                    ConfigurationSection section = playerData.getConfigurationSection(p.getUniqueId().toString() + ".sumka");
                    for(String key : section.getKeys(false))
                    {
                    ConfigurationSection keySection = section.getConfigurationSection(key);
    
                    playerData.set(p.getUniqueId().toString() + ".malruk", keySection);
                    
                    }
                    playerData.set(p.getUniqueId().toString() + ".sumka", null);
                    Main.instance.saveCustomYml(playerData, playerFile);
                    Main.BackPack(p, "backpack1");
                }
                
            }
        }
     
  8. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    PHP:
    public static void renameSection(ConfigurationSection parentSectionString oldNameString newName) {
        
    ConfigurationSection oldSection parentSection.getConfigurationSection(oldName);
        if (
    oldSection == null) {
            throw new 
    IllegalArgumentException("Секция не имеет раздела " oldName);
        }
        if (
    parentSection.contains(newName)) {
            throw new 
    IllegalArgumentException("Секция уже имеет раздел " newName);
        }
        
    parentSection.createSection(newNameoldSection.getValues(true));
        
    parentSection.set(oldNamenull);
    }
    Пример использования:
    ConfigurationSection data = config.getConfigurationSection(p.getUniqueId().toString());
    renameSection(data, "sumka", "malruk");

    После этого не забудь сохранить конфиг в файл, если это требуется
     
Статус темы:
Закрыта.

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