Помогите Создание файла config.yml и настройка кода через него

  • Автор темы Автор темы Folzy
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Folzy

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
CUBOPHORIA
Создал плагин.
Но мне нужен создать к нему config.yml
Чтоб через него настраивать параметр:
Bukkit.getScheduler().tunTaskLater
(Настройка времени через config.yml)
Как мне это сделать?
 
Код:
public class ConfigManager {
    private Main instance;

    public ConfigManager(Main instance) {
        this.instance = instance;
    }

    public void registerConfiguration() {
        Type.CONFIG = instance.getConfig();
    }

    public void unregisterConfiguration() {
        saveConfig("config.yml", Type.CONFIG);
    }

    public static class Type {
        public static FileConfiguration CONFIG;
    }

    public static void saveConfig(String file, FileConfiguration config) {
        try {
            config.save(new File(Main.instance.getDataFolder(), file));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private FileConfiguration loadConfiguration(String fileName) {
        File f = new File(instance.getDataFolder(), fileName);

        if(!f.exists()) {
            try {
                f.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return YamlConfiguration.loadConfiguration(f);
    }
}
 
Код:
public class ConfigManager {
    private Main instance;

    public ConfigManager(Main instance) {
        this.instance = instance;
    }

    public void registerConfiguration() {
        Type.CONFIG = instance.getConfig();
    }

    public void unregisterConfiguration() {
        saveConfig("config.yml", Type.CONFIG);
    }

    public static class Type {
        public static FileConfiguration CONFIG;
    }

    public static void saveConfig(String file, FileConfiguration config) {
        try {
            config.save(new File(Main.instance.getDataFolder(), file));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private FileConfiguration loadConfiguration(String fileName) {
        File f = new File(instance.getDataFolder(), fileName);

        if(!f.exists()) {
            try {
                f.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return YamlConfiguration.loadConfiguration(f);
    }
}
Совсем больной?) Зачем релизовывать то, что и так есть в ведроапи? Еще и таким ужасным костылем.
 
Код:
public class ConfigManager {
    private Main instance;

    public ConfigManager(Main instance) {
        this.instance = instance;
    }

    public void registerConfiguration() {
        Type.CONFIG = instance.getConfig();
    }

    public void unregisterConfiguration() {
        saveConfig("config.yml", Type.CONFIG);
    }

    public static class Type {
        public static FileConfiguration CONFIG;
    }

    public static void saveConfig(String file, FileConfiguration config) {
        try {
            config.save(new File(Main.instance.getDataFolder(), file));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private FileConfiguration loadConfiguration(String fileName) {
        File f = new File(instance.getDataFolder(), fileName);

        if(!f.exists()) {
            try {
                f.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return YamlConfiguration.loadConfiguration(f);
    }
}
Смотри у меня есть такой код
Код:
package org.rb.guide;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.*********ventory.ItemStack;

public class Handler implements Listener {
    public Handler(MinerBlock plugin) {
        this.plugin = plugin;
    }
    
private MinerBlock plugin = (MinerBlock)MinerBlock.getPlugin(MinerBlock.class);
    public static ItemStack coal = new ItemStack(Material.COAL);
    public static ItemStack iron_ingot = new ItemStack(Material.IRON_INGOT);
    public static ItemStack gold_ingot = new ItemStack(Material.GOLD_INGOT);
    public static ItemStack diamond = new ItemStack(Material.DIAMOND);
    public static ItemStack emerald = new ItemStack(Material.EMERALD);
    
    @EventHandler
    public void Break(BlockBreakEvent e)
    {
        Player p = e.getPlayer();
        Block b = e.getBlock();
        Material ore = b.getType();
        
        if(ore == Material.COAL_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), coal);
            b.setType(Material.BEDROCK);
            p.setExp(0.1F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
                
                @Override
                public void run() {
                    b.setType(Material.COAL_ORE);
                }
            }, 140);
        }
                if(ore == Material.IRON_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), iron_ingot);
            b.setType(Material.BEDROCK);
            p.setExp(0.15F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
                
                @Override
                public void run() {
                    b.setType(Material.IRON_ORE);
                }
            }, 200);
        }
                         if(ore == Material.GOLD_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), gold_ingot);
            b.setType(Material.BEDROCK);
            p.setExp(0.2F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
                
                @Override
                public void run() {
                    b.setType(Material.GOLD_INGOT);
                }
            }, 260);
        }
                         if(ore == Material.DIAMOND_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), diamond);
            b.setType(Material.BEDROCK);
            p.setExp(0.25F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
                
                @Override
                public void run() {
                    b.setType(Material.DIAMOND);
                }
            }, 340);
        }
                         if(ore == Material.EMERALD_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), emerald);
            b.setType(Material.BEDROCK);
            p.setExp(0.3F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
                
                @Override
                public void run() {
                    b.setType(Material.EMERALD);
                }
            }, 400);
        }                 
    }
    
}

И как мне в этом коде сделать настройку кода Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable()

в файле config.yml ?
 
в src нужно создать config.yml , в мейне должно быть следующее
Код:
    public FileConfiguration config;
   
    public void onEnable(){
        config = getConfig(); // Передаешь конфиг в переменную
        saveDefaultConfig(); // Если конфиг не существует создаст его
    }
    
    public void onDisable() {
        saveConfig(); //Сохраняешь конфиг
    }
Дальше где угодно передаешь переменную конфига и вписываешь путь:значение
Код:
config.set("Time", 100);
Дальше когда тебе нужно получить значение

Код:
int time = config.getInt("Time");
 
Главное работает :good:
Всё что есть в этом классе, есть и в бакките, имеет смысл создавать такие менеджеры, когда нужен кастомный конфиг, или пихать туда свои методы для работы с конфигом
 
Всё что есть в этом классе, есть и в бакките, имеет смысл создавать такие менеджеры, когда нужен кастомный конфиг, или пихать туда свои методы для работы с конфигом
Ну так я и выложил, чтобы он ещё мог свои туда конфиги добавлять.
 
в src нужно создать config.yml , в мейне должно быть следующее
Код:
    public FileConfiguration config;
  
    public void onEnable(){
        config = getConfig(); // Передаешь конфиг в переменную
        saveDefaultConfig(); // Если конфиг не существует создаст его
    }
   
    public void onDisable() {
        saveConfig(); //Сохраняешь конфиг
    }
Дальше где угодно передаешь переменную конфига и вписываешь путь:значение
Код:
config.set("Time", 100);
Дальше когда тебе нужно получить значение

Код:
int time = config.getInt("Time");
[/QUOTE

Слушай я не очень понял смотри у меня два файла с классами
Первый класс MinerBlock
А второй класс Handler
Так вот MinerBlock.java
прописаны значения
onEnable
и
onDisable

а в классе Handler.java
Он вообще обработчик событий, там прописываются главные события.
Я прописал этот код в MinerBlock.java:
Код:
    public FileConfiguration config;
  
    public void onEnable(){
        config = getConfig(); // Передаешь конфиг в переменную
        saveDefaultConfig(); // Если конфиг не существует создаст его
    }
    
    public void onDisable() {
        saveConfig(); //Сохраняешь конфиг
    }

а вот эти оба кода не знаю где прописывать, можешь подробно написать:
Код:
config.set("Time", 100);
Код:
int time = config.getInt("Time");
 
Смотри вот мой MinerBlock.java:
Код:
package org.rb.guide;

import java.io.File;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;


    public class MinerBlock extends JavaPlugin {
           public FileConfiguration config;   
        
        @Override
        public void onEnable(){
            File config = new File(getDataFolder() + File.separator + "config.yml");
            if(!config.exists()){
                getLogger().info("Creating new config file...");
                getConfig().options().copyDefaults(true);
                saveDefaultConfig();
            }
            getLogger().info("Plugin Enabled!");
            Bukkit.getPluginManager().registerEvents(new Handler(this), this);
        }
        
        @Override
         public void onDisable(){
            getLogger().info("Plugin Enabled!");
            saveConfig();
        }
        
    }

А вот мой Handler.java:
Код:
package org.rb.guide;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.*********ventory.ItemStack;

public class Handler implements Listener {
    public Handler(MinerBlock plugin) {
        this.plugin = plugin;
    }
    
private MinerBlock plugin = (MinerBlock)MinerBlock.getPlugin(MinerBlock.class);
    public static ItemStack coal = new ItemStack(Material.COAL);
    public static ItemStack iron_ingot = new ItemStack(Material.IRON_INGOT);
    public static ItemStack gold_ingot = new ItemStack(Material.GOLD_INGOT);
    public static ItemStack diamond = new ItemStack(Material.DIAMOND);
    public static ItemStack emerald = new ItemStack(Material.EMERALD);
    
    @EventHandler
    public void Break(BlockBreakEvent e)
    {
        Player p = e.getPlayer();
        Block b = e.getBlock();
        Material ore = b.getType();
        
        if(ore == Material.COAL_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), coal);
            b.setType(Material.BEDROCK);
            p.setExp(0.1F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
                
                @Override
                public void run() {
                    b.setType(Material.COAL_ORE);
                }
            }, 140);
        }
                if(ore == Material.IRON_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), iron_ingot);
            b.setType(Material.BEDROCK);
            p.setExp(0.15F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
                
                @Override
                public void run() {
                    b.setType(Material.IRON_ORE);
                }
            }, 200);
        }
                         if(ore == Material.GOLD_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), gold_ingot);
            b.setType(Material.BEDROCK);
            p.setExp(0.2F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
                
                @Override
                public void run() {
                    b.setType(Material.GOLD_INGOT);
                }
            }, 260);
        }
                         if(ore == Material.DIAMOND_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), diamond);
            b.setType(Material.BEDROCK);
            p.setExp(0.25F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
                
                @Override
                public void run() {
                    b.setType(Material.DIAMOND);
                }
            }, 340);
        }
                         if(ore == Material.EMERALD_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), emerald);
            b.setType(Material.BEDROCK);
            p.setExp(0.3F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
                
                @Override
                public void run() {
                    b.setType(Material.EMERALD);
                }
            }, 400);
        }                 
    }
    
}

Ну и мой config.yml:
Код:
Coal:
    cooldown: 140

Покажи на моем примере что да и как
 
Вместо 140 - plugin.getConfig().getInt("Coal.cooldown");
 
Вместо 140 - plugin.getConfig().getInt("Coal.cooldown");
А как мне сделать так чтоб допустим угольная руда нпходилась не по всему миру
А в указанных координатах?
Тип с моим кодом по всему миру ломаешь руду и она превращается в бедрок.
А мне надо чтоб только в указанных координатах.
 
А как мне сделать так чтоб допустим угольная руда нпходилась не по всему миру
А в указанных координатах?
Тип с моим кодом по всему миру ломаешь руду и она превращается в бедрок.
А мне надо чтоб только в указанных координатах.
Создаешь регион ворлдагуарла, под названием, mine, для примера. Помещаешь в этот рг угольную руду.
Далее, делаешь вот так:
PHP:
@EventHandler
    public void Break(BlockBreakEvent e)
    {
        Player p = e.getPlayer();
        Block b = e.getBlock();
        Material ore = b.getType();
        RegionManager rgm = plugin.wg.getRegionManager(p.getWorld());
        ApplicableRegionSet ars = rgm.getApplicableRegions(p.getLocation());
        ars.getRegions();
        boolean isRightRegion = false;
        for (ProtectedRegion prg : ars){
              if (prg.getId().equalsIgnoreCase("mine")) {
                  isRightRegion = true;
              }
        }
       
        if(!isRightRegion) {
            return;
        }
        if(ore == Material.COAL_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), coal);
            b.setType(Material.BEDROCK);
            p.setExp(0.1F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
               
                @Override
                public void run() {
                    b.setType(Material.COAL_ORE);
                }
            }, 140);
        }
                if(ore == Material.IRON_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), iron_ingot);
            b.setType(Material.BEDROCK);
            p.setExp(0.15F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
               
                @Override
                public void run() {
                    b.setType(Material.IRON_ORE);
                }
            }, 200);
        }
                         if(ore == Material.GOLD_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), gold_ingot);
            b.setType(Material.BEDROCK);
            p.setExp(0.2F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
               
                @Override
                public void run() {
                    b.setType(Material.GOLD_INGOT);
                }
            }, 260);
        }
                         if(ore == Material.DIAMOND_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), diamond);
            b.setType(Material.BEDROCK);
            p.setExp(0.25F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
               
                @Override
                public void run() {
                    b.setType(Material.DIAMOND);
                }
            }, 340);
        }
                         if(ore == Material.EMERALD_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), emerald);
            b.setType(Material.BEDROCK);
            p.setExp(0.3F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
               
                @Override
                public void run() {
                    b.setType(Material.EMERALD);
                }
            }, 400);
        }                 
    }
 
Теперь если игрок сломает любой блок из представленных тобою в регионе mine, то он замениться на бедрок.
Если игрок находится за пределами - ничего не произойдет.
 
Создаешь регион ворлдагуарла, под названием, mine, для примера. Помещаешь в этот рг угольную руду.
Далее, делаешь вот так:
PHP:
@EventHandler
    public void Break(BlockBreakEvent e)
    {
        Player p = e.getPlayer();
        Block b = e.getBlock();
        Material ore = b.getType();
        RegionManager rgm = plugin.wg.getRegionManager(p.getWorld());
        ApplicableRegionSet ars = rgm.getApplicableRegions(p.getLocation());
        ars.getRegions();
        boolean isRightRegion = false;
        for (ProtectedRegion prg : ars){
              if (prg.getId().equalsIgnoreCase("mine")) {
                  isRightRegion = true;
              }
        }
      
        if(!isRightRegion) {
            return;
        }
        if(ore == Material.COAL_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), coal);
            b.setType(Material.BEDROCK);
            p.setExp(0.1F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
              
                @Override
                public void run() {
                    b.setType(Material.COAL_ORE);
                }
            }, 140);
        }
                if(ore == Material.IRON_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), iron_ingot);
            b.setType(Material.BEDROCK);
            p.setExp(0.15F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
              
                @Override
                public void run() {
                    b.setType(Material.IRON_ORE);
                }
            }, 200);
        }
                         if(ore == Material.GOLD_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), gold_ingot);
            b.setType(Material.BEDROCK);
            p.setExp(0.2F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
              
                @Override
                public void run() {
                    b.setType(Material.GOLD_INGOT);
                }
            }, 260);
        }
                         if(ore == Material.DIAMOND_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), diamond);
            b.setType(Material.BEDROCK);
            p.setExp(0.25F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
              
                @Override
                public void run() {
                    b.setType(Material.DIAMOND);
                }
            }, 340);
        }
                         if(ore == Material.EMERALD_ORE)
        {
            e.setCancelled(true);
            b.getLocation().add(0.5, 0.5, 0.5).getWorld().dropItemNaturally(b.getLocation(), emerald);
            b.setType(Material.BEDROCK);
            p.setExp(0.3F);
            Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
              
                @Override
                public void run() {
                    b.setType(Material.EMERALD);
                }
            }, 400);
        }                
    }
Все отлично но ошибки в RegionManager
ApplicableRegionSet
И в
for (ProtectedRegion prg : ars)
 
Теперь если игрок сломает любой блок из представленных тобою в регионе mine, то он замениться на бедрок.
Если игрок находится за пределами - ничего не произойдет.
Не подскажешь что у меня за ошибки?
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх