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

Идея Шерсть из полярного медведя

Тема в разделе "Запросы на разработку плагинов", создана пользователем chief, 15 июл 2016.

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

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

    Баллы:
    76
    Нужно сделать, чтобы с полярного медведя выпадала 1-2 блока шерсти с шансом 3/4
     
  2. Derik

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

    Баллы:
    76
    Имя в Minecraft:
    Derik
    Запросто, ща чайку налью и сделаю.
    Cкачать - WoolFromBear
    Могу рыбу очистить, чтобы не падала.
     
    Последнее редактирование: 15 июл 2016
  3. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    Чёт у тебя генератор имён для плагинов лагает.
    Рандомный медведь?
    Может хотя бы WoolFromBear?
     
  4. Derik

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

    Баллы:
    76
    Имя в Minecraft:
    Derik
    Исправил
     
    Последнее редактирование: 15 июл 2016
  5. Автор темы
    chief

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

    Баллы:
    76
    Было бы прекрасно, если бы вы еще дроп рыбы убрать

    Игроки озадачила меня вопросом "а откуда с него рыба выпадает". Майнкрафт не поддается логике :creeper:
    @Derik Спасибо за плагин :coffee:
     
  6. Derik

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

    Баллы:
    76
    Имя в Minecraft:
    Derik
  7. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
  8. Derik

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

    Баллы:
    76
    Имя в Minecraft:
    Derik
    Можно замутить еще там название свое и описание. Чтобы не тупо шерсть было написано. А там например ... - "Медвежья шерсть". И лоры с описаниями ниже.. И все это в конфиг вынести.
     
  9. Автор темы
    chief

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

    Баллы:
    76
    Действительно. Эта идея интересная и оригинальная
     
  10. Derik

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

    Баллы:
    76
    Имя в Minecraft:
    Derik
    Последнее редактирование: 17 июл 2016
  11. DiamondDen

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

    Баллы:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    upload_2016-7-18_6-7-41.png
    Зачем загружать каждый раз когда кого то убивают сделай в onEnable загрузку один раз
     
  12. Dereku

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

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    При использовании JavaPlugin#saveDefaultConfig() не нужно проверять наличие конфига. Так же не нужно использовать JavaPlugin#getConfig().options().copyDefaults(true) - оно не нужно в твоём случае.
    Регистрировать слушатели лучше после того, как ты закончил с нужной работой (тут - подгрузил конфиг).
    Как и сказал @DiamondDen - не нужно в слушателях дёргать конфиг, лучше в onEnable сохранять значения.
    И не жлобься использовать ChatColor.translateAlternateChatColor(char, String) - символ '§' может быть неверно воспринят сервером (потому что не умеем читать текстовые файлы) и в итоге будет грустно.

    Ну и по плагину - почему только шерсть? Медведь из шерсти одной состоит? Даёшь говядинки 1-3 штуки!
     
  13. Автор темы
    chief

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

    Баллы:
    76
    @DiamondDen @Dereku Пожалуйста, покажите как правильно. Я учу джава но без примера понять не могу
    Код:
    public class Main extends JavaPlugin implements Listener {
       Logger log = this.getLogger();
    
       public void onEnable() {
          Bukkit.getPluginManager().registerEvents(this, this);
          File config = new File(this.getDataFolder() + File.separator + "config.yml");
          if(!config.exists()) {
             this.getConfig().options().copyDefaults(true);
             this.saveDefaultConfig();
             this.log.info("Creating config file...");
          }
    
       }
    
       @EventHandler
       public void dropBear(EntityDeathEvent e) {
          EntityType type = e.getEntityType();
          int droprandom = this.getConfig().getInt("drop");
          int pcsmax = this.getConfig().getInt("pcsmax");
          String name = this.getConfig().getString("name");
          List<String> lore = this.getConfig().getStringList("lore");
          if(type == EntityType.POLAR_BEAR) {
             e.getDrops().clear();
             Random rng = new Random();
             int rand = rng.nextInt(pcsmax) + 1;
             int random = rng.nextInt(droprandom);
             if(random == 0) {
                ItemStack item = new ItemStack(Material.WOOL, rand);
                ItemMeta meta = item.getItemMeta();
                meta.setDisplayName(name);
                meta.setLore(lore);
                item.setItemMeta(meta);
                e.getDrops().add(item);
             }
    
          }
       }
    }

    Плотоядные животные несъедобны
     
  14. DiamondDen

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

    Баллы:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    Код:
    public class Main extends JavaPlugin implements Listener {
       Logger log = this.getLogger();
       int droprandom;
       int pcsmax;
       String name;
       List<String> lore;
       FileConfiguration config;
       public void onEnable() {
          saveDefaultConfig();
          config = getConfig();
          Bukkit.getPluginManager().registerEvents(this, this);
          droprandom = config.getInt("drop");
          pcsmax = config.getInt("pcsmax");
          name = config.getString("name");
          lore = config.getStringList("lore");
       }
       @EventHandler
       public void dropBear(EntityDeathEvent e) {
          EntityType type = e.getEntityType();
          if(type == EntityType.POLAR_BEAR) {
             e.getDrops().clear();
             Random rng = new Random();
             int rand = rng.nextInt(pcsmax) + 1;
             int random = rng.nextInt(droprandom);
             if(random == 0) {
                ItemStack item = new ItemStack(Material.WOOL, rand);
                ItemMeta meta = item.getItemMeta();
                meta.setDisplayName(name);
                meta.setLore(lore);
                item.setItemMeta(meta);
                e.getDrops().add(item);
             }
          }
       }
    }
    Кинь готовый config.yml в плагин (где plugin.yml находится ту даже)
     
    Последнее редактирование: 18 июл 2016
  15. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    Фу, говнокод.
    Код:
    public class Main
    extends JavaPlugin
    implements Listener
    {
       private static final Logger log = this.getLogger();
       private static final int droprandom;
       private static final int pcsmax;
       private static final String name;
       private static final List<String> lore;
       private static final Random random = new Random();
       private FileConfiguration config;
    
       @Override
       public void onEnable()
       {
          saveDefaultConfig();
          config = getConfig();
          Bukkit.getPluginManager().registerEvents(this, this);
          droprandom = config.getInt("drop");
          pcsmax = config.getInt("pcsmax");
          name = config.getString("name");
          lore = config.getStringList("lore");
       }
    
       @EventHandler
       public void dropBear(EntityDeathEvent event)
       {
           if (event.getType() == EntityType.POLAR_BEAR)
           {
              event.getDrops().clear();
              int rand = random.nextInt(pcsmax);
              int random = rng.nextInt(droprandom);
    
              if (random == 0)
              {
                   ItemStack item = new ItemStack(Material.WOOL, rand);
                   ItemMeta meta = item.getItemMeta();
                   meta.setDisplayName(name);
                   meta.setLore(lore);
                   item.setItemMeta(meta);
                   e.getDrops().add(item);
               }
           }
       }
    }
     
    Последнее редактирование: 18 июл 2016
  16. DiamondDen

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

    Баллы:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    Зачем static? это же всё в одном классе.
     
  17. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    Лол, не думал что ты такой тупой. Читай что такое static. Внимательно.
    И да, круто, когда при каждом вызове евента создаётся экземпляр класса Random.
    Код:
    public class Main
    extends JavaPlugin
    implements Listener
    {
       private static Logger log = this.getLogger();
       private static int droprandom;
       private static int pcsmax;
       private static String name;
       private static List<String> lore;
       private static Random random = new Random();
       private static FileConfiguration config;
    
       @Override
       public void onEnable()
       {
          saveDefaultConfig();
          config = getConfig();
    
          Bukkit.getPluginManager().registerEvents(this, this);
    
          droprandom = config.getInt("drop");
          pcsmax = config.getInt("pcsmax");
          name = config.getString("name");
          lore = config.getStringList("lore");
       }
    
       @EventHandler
       public void dropBear(EntityDeathEvent event)
       {
          if (event.getType() == EntityType.POLAR_BEAR)
          {
             event.getDrops().clear();
    
             int rand = random.nextInt(pcsmax);
             int rnd = random.nextInt(droprandom);
    
             if (random == 0)
             {
                  ItemStack item = new ItemStack(Material.WOOL, rand);
                  ItemMeta meta = item.getItemMeta();
                  meta.setDisplayName(name);
                  ArrayList<String> lores = Utils.setLore(lore);
                  meta.setLore(lores);
                  item.setItemMeta(meta);
    
                  event.getDrops().add(item);
             }
          }
       }
    }
    Utils.java
    Код:
    public class Utils
    {
        public static ArrayList<String> setLore(List<String> list)
        {
            ArrayList<String> lore = new ArrayList<String> ();
          
            for (String methodLore : list)
            {
                lore.add(ChatColor.translateAlternateColorCodes('&', methodLore);
            }
          
            return lore;
        }
    }
    
    Убрал final, дабы переменные небыли константами. Вдруг захочешь конфиг перезагрузить, а у тебя все поля финальные :)
    Написал нормальный, рабочий код, на костях кода diamondDen.
    Можешь использовать.
     
    Последнее редактирование: 18 июл 2016
  18. DiamondDen

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

    Баллы:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    Код:
    public class Main
    extends JavaPlugin
    implements Listener
    {
       private static Logger log = this.getLogger();
       private static int droprandom;
       private static int pcsmax;
       private static String name;
       private static List<String> lore;
       private static Random random = new Random();
       private static FileConfiguration config;
       @Override
       public void onEnable()
       {
          saveDefaultConfig();
          config = getConfig();
          Bukkit.getPluginManager().registerEvents(this, this);
          droprandom = config.getInt("drop");
          pcsmax = config.getInt("pcsmax");
          name = config.getString("name");
          lore = Utils.setLore(config.getStringList("lore"));
       }
       @EventHandler
       public void dropBear(EntityDeathEvent event)
       {
          if (event.getType() == EntityType.POLAR_BEAR)
          {
             event.getDrops().clear();
             int rand = random.nextInt(pcsmax);
             int rnd = random.nextInt(droprandom);
             if (random == 0)
             {
                  ItemStack item = new ItemStack(Material.WOOL, rand);
                  ItemMeta meta = item.getItemMeta();
                  meta.setDisplayName(name);
                  meta.setLore(lore);
                  item.setItemMeta(meta);
                  event.getDrops().add(item);
             }
          }
       }
    }
     
  19. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    Да ты нериально крут, чел. Просто перекопировать мой код - это достойно всех похвал.
    Только вот lore у тебя никогда цветным не будет, да.
     
  20. DiamondDen

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

    Баллы:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    upload_2016-7-18_16-35-19.png
    Зачем создавать несколько раз лист
     
Статус темы:
Закрыта.

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