Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

TorwaldOswarld

Активный участник
Пользователь
Баллы
78
Имя в Minecraft
PuxTa4
Привет всем.Помогите пожалуйста . Я написал плагин на приват территории , знаю такие уже есть , но мне нужно было . Так вот , после перезагрузки сервера слетает приват на территории . Каким образом можно сохранять приваты ?
 
Довольно просто. Могу объяснить на пальцах, а могу скинуть код. Как лучше?
 
Довольно просто. Могу объяснить на пальцах, а могу скинуть код. Как лучше?
Скинь код лучше , и пожалуйста , с описание , если не трудно , желательно сохранять всю это дела в отдельный файл :)
 
Кстати, каким образом вы храните ваши регионы? Я полагаю, что у региона должно быть минимум две Location и имя(опционально). Для этого лучше создавать отдельный класс, но это уж как хотите.

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

Так как вы храните ваши регионы?
Я храню локации в ArrayList
 
То есть, координаты отдельных блоков? И как это относится к регионам?
 
То есть, координаты отдельных блоков? И как это относится к регионам?
Неее , что-то типа worldedit , выделаю территорию , пишу команду и происходить приват территории
То есть, координаты отдельных блоков? И как это относится к регионам?
и ещё такой вопрос , как добавить второй аргумент в команду , например имя региона
 
Неее , что-то типа worldedit , выделаю территорию , пишу команду и происходить приват территории

и ещё такой вопрос , как добавить второй аргумент в команду , например имя региона
Java:
    @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];
                ...
            }
    }
 
Мда. Он это капать будет целый день, чтобы узнать что да как.

Неее , что-то типа worldedit , выделаю территорию , пишу команду и происходить приват территории

и ещё такой вопрос , как добавить второй аргумент в команду , например имя региона
Я советую вам для регионов создавать отдельный объект. Что-то типа:
Java:
    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;
        }
    }
 
Java:
    @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];
                ...
            }
    }
Сделал как сказал , всё равно не хочет воспринимать имя региона , говорит , что команда не верная
 
Мда. Он это капать будет целый день, чтобы узнать что да как.


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

Вы добавили вашу команду в plugin.yml?
Конечно
Вы добавили вашу команду в plugin.yml?
Я вам в личку отправил плагин , поработайте пожалуйста с ним , буду благодарен
 
TorwaldOswarld сказал(а):
...
getCommand("Protect").setExecutor(ce);
...
getCommand("protect").setExecutor(ce);
Java:
    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 - экземпляр вашего плагина
Поясню немного.
Сначала идет реализация класса RegionData.
Дальше, я создал ассоциативный массив Map, в котором буду ассоциировать имя региона(ключ) с его данными(значение).
Такой подход наиболее удобен, если требуется быстро получить данные о регионе по его имени.

Ниже привел код загрузки и сохранения регионов в файл SERVER/plugins/Имя_плагина/regions.yml.
Вы можете переделать этот код под свой вариант, а можете переделать свой код и включить использование RegionData в свой плагин.
 
Последнее редактирование:
getCommand("protect").setExecutor(ce);
Java:
    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 - экземпляр вашего плагина
Поясню немного.
Сначала идет реализация класса RegionData.
Дальше, я создал ассоциативный массив Map, в котором буду ассоциировать имя региона(ключ) с его данными(значение).
Такой подход наиболее удобен, если требуется быстро получить данные о регионе по его имени.

Ниже привел код загрузки и сохранения регионов в файл SERVER/plugins/Имя_плагина/regions.yml.
Вы можете переделать этот код под свой вариант, а можете переделать свой код и включить использование RegionData в свой плагин.
Я так и не понял , что нужно писать вместо PLUGIN ? И где String name = ""; Что за имя здесь нужно написать ?
 
Экземпляр класса вашего плагина. Если этот код будет располагаться в Core, то вместо plugin пишете this.
 
Ничего. Это всего лишь ненужная инициализация переменной.
 
А что вы сделали для этого? Оно же не будет все само делаться.
Я вам код весь нужный предоставил, вам осталось только додуматься как его использовать.
 

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

Назад
Верх