Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Помогите Слетают регионы

Discussion in 'Разработка плагинов для новичков' started by TorwaldOswarld, Jul 29, 2015.

  1. Автор темы
    TorwaldOswarld

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

    Trophy Points:
    68
    Имя в Minecraft:
    _TheMaxPlay_
    Привет всем.Помогите пожалуйста . Я написал плагин на приват территории , знаю такие уже есть , но мне нужно было . Так вот , после перезагрузки сервера слетает приват на территории . Каким образом можно сохранять приваты ?
     
  2. Хостинг MineCraft
    <
  3. leonmark061

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

    Trophy Points:
    76
    Довольно просто. Могу объяснить на пальцах, а могу скинуть код. Как лучше?
     
  4. Автор темы
    TorwaldOswarld

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

    Trophy Points:
    68
    Имя в Minecraft:
    _TheMaxPlay_
    Скинь код лучше , и пожалуйста , с описание , если не трудно , желательно сохранять всю это дела в отдельный файл :)
     
  5. leonmark061

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

    Trophy Points:
    76
    Кстати, каким образом вы храните ваши регионы? Я полагаю, что у региона должно быть минимум две Location и имя(опционально). Для этого лучше создавать отдельный класс, но это уж как хотите.

    Так как вы храните ваши регионы?
     
  6. Автор темы
    TorwaldOswarld

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

    Trophy Points:
    68
    Имя в Minecraft:
    _TheMaxPlay_
    Я храню локации в ArrayList
     
  7. leonmark061

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

    Trophy Points:
    76
    То есть, координаты отдельных блоков? И как это относится к регионам?
     
  8. Автор темы
    TorwaldOswarld

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

    Trophy Points:
    68
    Имя в Minecraft:
    _TheMaxPlay_
    Неее , что-то типа worldedit , выделаю территорию , пишу команду и происходить приват территории[DOUBLEPOST=1438197857,1438197600][/DOUBLEPOST]
    и ещё такой вопрос , как добавить второй аргумент в команду , например имя региона
     
  9. leonmark061

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

    Trophy Points:
    76
    Code:
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label,
                String[] args)
        {
            if(cmd.getName().equalsIgnoreCase("somecommand"))
            {
             
                if(args.length == 1)
                {
                    String rgName = args[0];
                    ...
                }
        }
     
  10. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Trophy Points:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
  11. leonmark061

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

    Trophy Points:
    76
    Мда. Он это капать будет целый день, чтобы узнать что да как.

    Я советую вам для регионов создавать отдельный объект. Что-то типа:
    Code:
        public class RegionData
        {
            Location start;//начальные координаты
            Location end;//конченые координаты
          
            String name = "";//имя
          
            //конструктор по-умолчанию
            public RegionData(Location start, Location end, String name)
            {
                this.start = start;
                this.end = end;
              
                this.name = name;
            }
          
            //get-, set-методы
          
            public String getName()
            {
                return name;
            }
          
            public Location getStartLocation()
            {
                return start;
            }
          
            public Location getEndLocation()
            {
                return end;
            }
          
            public void setName(String val)
            {
                name = val;
            }
          
            public void setStartLocation(Location val)
            {
                start = val;
            }
          
            public void setEndLocation(Location val)
            {
                end = val;
            }
        }
     
  12. Автор темы
    TorwaldOswarld

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

    Trophy Points:
    68
    Имя в Minecraft:
    _TheMaxPlay_
    Сделал как сказал , всё равно не хочет воспринимать имя региона , говорит , что команда не верная
     
  13. leonmark061

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

    Trophy Points:
    76
    Вы добавили вашу команду в plugin.yml?
     
  14. Автор темы
    TorwaldOswarld

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

    Trophy Points:
    68
    Имя в Minecraft:
    _TheMaxPlay_
    Получилось так
    Code:
    package ru.ShaKe.AGP;
    
    import java.util.ArrayList;
    import java.util.logging.Logger;
    
    import org.bukkit.Location;
    import org.bukkit.plugin.PluginDescriptionFile;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Core extends JavaPlugin {
    public final Logger logger = Logger.getLogger("Minecraft");
    
    public final AdvancedGriefProtectionListener agp = new AdvancedGriefProtectionListener(this);
    
    public final CubeGenerateProtect cgp = new CubeGenerateProtect(this);
    public final Methods m = new Methods();
    public final AdvancedGriefProtectionCommandListener ce = new AdvancedGriefProtectionCommandListener(this);
    
    public ArrayList<Location> protectedBlocks = new ArrayList<Location>();
    
    public Location l1 = null;
    public Location l2 = null;
    
    public int ID = 0;
    
        public void onEnable() {
          
            PluginManager pm = getServer().getPluginManager();
            PluginDescriptionFile pdfFile = this.getDescription();
          
            getCommand("Protect").setExecutor(ce);
          
            this.logger.info(" [AdvancedProtection] " + pdfFile.getName() + " Version " + pdfFile.getVersion() + " Has Been Enabled! ");
            this.logger.info(" [AdvancedProtection] Plugin Made By" + pdfFile.getAuthors());
            pm.registerEvents(agp, this);
        }
        public void onDisable() {
          
        }
         public class RegionData
           {
               Location l1;
               Location l2;
            
               String name = "";
            
               public RegionData(Location start, Location end, String name)
               {
                   this.l1 = l1;
                   this.l2 = l2;
                
                   this.name = name;
               }
            
               //get-, set-методы
            
               public String getName()
               {
                   return name;
               }
            
               public Location getStartLocation()
               {
                   return l1;
               }
            
               public Location getEndLocation()
               {
                   return l2;
    }
    
    [DOUBLEPOST=1438199133,1438199101][/DOUBLEPOST]
    Конечно[DOUBLEPOST=1438199414][/DOUBLEPOST]
    Я вам в личку отправил плагин , поработайте пожалуйста с ним , буду благодарен
     
  15. leonmark061

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

    Trophy Points:
    76
    getCommand("protect").setExecutor(ce);[DOUBLEPOST=1438200583,1438199828][/DOUBLEPOST]
    Code:
        public class RegionData
        {
            Location start;//начальные координаты
            Location end;//конченые координаты
      
            String name = "";//имя
      
            //конструктор по-умолчанию
            public RegionData(Location start, Location end, String name)
            {
                this.start = start;
                this.end = end;
          
                this.name = name;
            }
      
            //get-, set-методы
      
            public String getName()
            {
                return name;
            }
      
            public Location getStartLocation()
            {
                return start;
            }
      
            public Location getEndLocation()
            {
                return end;
            }
      
            public void setName(String val)
            {
                name = val;
            }
      
            public void setStartLocation(Location val)
            {
                start = val;
            }
      
            public void setEndLocation(Location val)
            {
                end = val;
            }
        }
    
        Map<String, RegionData> regions = new HashMap<String, RegionData>();
    
        //загразка
        public void Load()
        {
            File f = new File(PLUGIN.getDataFolder().getAbsolutePath()+"/regions.yml");//ищем файл regions.yml
      
            if(!f.exists())//если его нет, пропускаем код ниже
                return;
      
            FileConfiguration data = YamlConfiguration.loadConfiguration(f);//загружаем кофиг
      
            Set<String> keys = data.getKeys(false);//ключевые значения главной секции из конфига.
      
            for(String region : keys)//проходим по списку
            {
                RegionData rg;//объявление переменной типа RegionData
          
                String world = data.getString(region + ".world");
          
                Location start = data.getVector(region + ".start").toLocation(Bukkit.getWorld(world));
                Location end = data.getVector(region + ".end").toLocation(Bukkit.getWorld(world));
          
                rg = new RegionData(start, end, region);
          
                regions.put(region, rg);
            }
        }
    
        public void Save()
        {
            File f = new File(PLUGIN.getDataFolder().getAbsolutePath()+"/regions.yml");//ищем файл regions.yml
      
            YamlConfiguration data = new YamlConfiguration();
      
            for(Map.Entry<String, RegionData> entry : regions.entrySet())
            {
                data.set(entry.getKey()+".world", entry.getValue().getStartLocation().getWorld().getName());
                data.set(entry.getKey() + ".start", entry.getValue().getStartLocation().toVector());
                data.set(entry.getKey() + ".end", entry.getValue().getEndLocation().toVector());
            }
      
            try
            {
                data.save(f);
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    Где PLUGIN - экземпляр вашего плагина[DOUBLEPOST=1438200857][/DOUBLEPOST]Поясню немного.
    Сначала идет реализация класса RegionData.
    Дальше, я создал ассоциативный массив Map, в котором буду ассоциировать имя региона(ключ) с его данными(значение).
    Такой подход наиболее удобен, если требуется быстро получить данные о регионе по его имени.

    Ниже привел код загрузки и сохранения регионов в файл SERVER/plugins/Имя_плагина/regions.yml.[DOUBLEPOST=1438201878][/DOUBLEPOST]Вы можете переделать этот код под свой вариант, а можете переделать свой код и включить использование RegionData в свой плагин.
     
    Last edited: Jul 29, 2015
  16. Автор темы
    TorwaldOswarld

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

    Trophy Points:
    68
    Имя в Minecraft:
    _TheMaxPlay_
    Я так и не понял , что нужно писать вместо PLUGIN ? И где String name = ""; Что за имя здесь нужно написать ?
     
  17. leonmark061

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

    Trophy Points:
    76
    Экземпляр класса вашего плагина. Если этот код будет располагаться в Core, то вместо plugin пишете this.
     
  18. Автор темы
    TorwaldOswarld

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

    Trophy Points:
    68
    Имя в Minecraft:
    _TheMaxPlay_
    А в String name = ""; , что писать
     
  19. leonmark061

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

    Trophy Points:
    76
    Ничего. Это всего лишь ненужная инициализация переменной.
     
  20. Автор темы
    TorwaldOswarld

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

    Trophy Points:
    68
    Имя в Minecraft:
    _TheMaxPlay_
    Пишу /protect имя рг , но плагин не записывает имя рг .И регионы не сохраняются
     
  21. leonmark061

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

    Trophy Points:
    76
    А что вы сделали для этого? Оно же не будет все само делаться.[DOUBLEPOST=1438241269,1438241233][/DOUBLEPOST]Я вам код весь нужный предоставил, вам осталось только додуматься как его использовать.
     

Share This Page