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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем TorwaldOswarld, 29 июл 2015.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Баллы:
    76
    Код:
        @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 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
  11. leonmark061

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

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

    Я советую вам для регионов создавать отдельный объект. Что-то типа:
    Код:
        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 Активный участник Пользователь

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

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

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

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

    Баллы:
    68
    Имя в Minecraft:
    _TheMaxPlay_
    Получилось так
    Код:
    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 Активный участник Пользователь

    Баллы:
    76
    getCommand("protect").setExecutor(ce);[DOUBLEPOST=1438200583,1438199828][/DOUBLEPOST]
    Код:
        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 в свой плагин.
     
    Последнее редактирование: 29 июл 2015
  16. Автор темы
    TorwaldOswarld

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

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

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

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

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

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

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

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

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

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

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

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

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