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

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

Discussion in 'Запросы на разработку плагинов' started by chief, Jul 15, 2016.

Thread Status:
Not open for further replies.
  1. Автор темы
    chief

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

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

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

    Trophy Points:
    76
    Имя в Minecraft:
    Derik
    Запросто, ща чайку налью и сделаю.[DOUBLEPOST=1468611080,1468607838][/DOUBLEPOST]Cкачать - WoolFromBear
    Могу рыбу очистить, чтобы не падала.
     
    Last edited: Jul 15, 2016
  4. CoolBoy

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

    Trophy Points:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Чёт у тебя генератор имён для плагинов лагает.
    Рандомный медведь?
    Может хотя бы WoolFromBear?
     
  5. Derik

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

    Trophy Points:
    76
    Имя в Minecraft:
    Derik
    Исправил
     
    Last edited: Jul 15, 2016
  6. Автор темы
    chief

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

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

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

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

    Trophy Points:
    76
    Имя в Minecraft:
    Derik
  8. CoolBoy

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

    Trophy Points:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
  9. Derik

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

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

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

    Trophy Points:
    76
    Действительно. Эта идея интересная и оригинальная
     
  11. Derik

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

    Trophy Points:
    76
    Имя в Minecraft:
    Derik
    Last edited: Jul 17, 2016
  12. DiamondDen

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

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

    Dereku Старожил

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

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

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

    Trophy Points:
    76
    @DiamondDen @Dereku Пожалуйста, покажите как правильно. Я учу джава но без примера понять не могу
    Code:
    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);
             }
    
          }
       }
    }
    [DOUBLEPOST=1468825162,1468825093][/DOUBLEPOST]
    Плотоядные животные несъедобны
     
  15. DiamondDen

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

    Trophy Points:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    Code:
    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 находится ту даже)
     
    Last edited: Jul 18, 2016
  16. CoolBoy

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

    Trophy Points:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Фу, говнокод.[DOUBLEPOST=1468829593,1468829245][/DOUBLEPOST]
    Code:
    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);
               }
           }
       }
    }
     
    Last edited: Jul 18, 2016
  17. DiamondDen

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

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

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

    Trophy Points:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Лол, не думал что ты такой тупой. Читай что такое static. Внимательно.
    И да, круто, когда при каждом вызове евента создаётся экземпляр класса Random.[DOUBLEPOST=1468831990,1468830993][/DOUBLEPOST]
    Code:
    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
    Code:
    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.
    Можешь использовать.
     
    Last edited: Jul 18, 2016
  19. DiamondDen

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

    Trophy Points:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    Code:
    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);
             }
          }
       }
    }
     
  20. CoolBoy

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

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

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

    Trophy Points:
    76
    Skype:
    danil_20034
    Имя в Minecraft:
    DiamondDen
    upload_2016-7-18_16-35-19.png
    Зачем создавать несколько раз лист
     
Thread Status:
Not open for further replies.

Share This Page