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

Помогите Как при убийстве моба получать дроп словно с зачарованием заговор огня?

Тема в разделе "Разработка плагинов для новичков", создана пользователем Ильми, 17 май 2020.

Статус темы:
Закрыта.
  1. Автор темы
    Ильми

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

    Баллы:
    66
    Имя в Minecraft:
    IlmiGirafe
    Мне нужно каким-то образом сделать так, чтобы при убийстве (коровы) мне выпадала не сырая говядина, а уже готовый стейк, словно с зачарованием - заговор огня на мече.
    Код:
    public class handlerrr implements Listener {
        @EventHandler(priority = EventPriority.HIGHEST)
        public void mobDeathEvent(EntityDeathEvent e) {
        Monster m = (Monster) e.getEntity();
        Player p = m.getKiller();
        Location loc = m.getLocation();
        if(!p.hasPermission("gfpuse.furnacemob"))
            return;
        if(!p.hasPermission("gfpuse.furnacemobon"))
            return;
        if(m.getType() == EntityType.COW) {
     
    Последнее редактирование: 17 май 2020
  2. Lemar98

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

    Баллы:
    76
    Проверяй в начале энтити на корову. Чисти дроп и выкидывай готовый стейк
     
  3. CriticaMobslps

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

    Баллы:
    76
    Имя в Minecraft:
    CriticaMobs
    А не легче будет использовать, ItemSpawnEvent, проверять на то что это сырая говядина и изменять на жареную
     
  4. Автор темы
    Ильми

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

    Баллы:
    66
    Имя в Minecraft:
    IlmiGirafe
    А можно набросок, как я могу этот ивент использовать?
     
  5. CriticaMobslps

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

    Баллы:
    76
    Имя в Minecraft:
    CriticaMobs
    PHP:
        @EventHandler
        
    public void onSpawnItem(ItemSpawnEvent e)
        {
            
    /*Берём предмет который заспавнился в мире
            * Это может быть выкинутый предмет
            * Так же выпавший из раздатчика*/
            
    ItemStack itemStack e.getEntity ().getItemStack ();
            
    /*
            Проверяем предмет на мясо
             */
            
    if(itemStack.getType ().equals (Material.BEEF))
            {
                
    /*
                Отменяем его спавн
                 */
                
    e.setCancelled (true);
                
    /*
                Берём локацию и выкидываем уже обжаренные куски
                 */
                
    World w e.getLocation ().getWorld ();
                
    w.dropItemNaturally (e.getLocation (), new ItemStack (Material.COOKED_BEEFitemStack.getAmount ()));
            }
        }

        @
    EventHandler
        
    public void onEntityDamage(EntityDamageByEntityEvent e)
        {
            
    /*
            Проверяем получившего урон на корову
             */
            
    if(e.getEntity () instanceof Cow) {
                
    /*
                Создаём переменную что бы было проще работать
                 */
                
    Cow cow = (Cowe.getEntity ();
                
    /*
                Если урон больше или равен количеству хп
                 */
                
    if(e.getFinalDamage () >= cow.getHealth ())
                {
                    
    /*
                    Проверяем того кто ударил на игрока
                     */
                    
    if(e.getDamager () instanceof Player)
                    {
                        
    Player p = (Playere.getDamager ();
                        
    /*
                        Получаем права
                         */
                        
    if(!p.hasPermission("gfpuse.furnacemob")) return;
                        
    Location loc cow.getLocation ();
                        
    /*
                        Удаляем корову что-бы не выпал лут
                         */
                        
    cow.remove ();
                        
    /*
                        Спавним свой лут в виде жаренного мяса
                         */
                        
    loc.getWorld ().dropItemNaturally (loc, new ItemStack (Material.COOKED_BEEF));
                    }
                }
            }
        }
    Описал 2 варианта, так, я подумал и понял что если удалять корову то будет выглядеть не красиво, так что попробуй как-то заменить лут, там мне кажется уже в Bukkit такое есть
     
  6. Автор темы
    Ильми

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

    Баллы:
    66
    Имя в Minecraft:
    IlmiGirafe
    Всё идеально 0_0. Второй способ всё-равно лучше, чем первый, мне не нужны лишние проблемы из-за этого. Спасибо за помощь, я думаю, что исчезновение коровы - это ничего плохого, если она будет пропадать только у тех, кто имеет право ("gfpuse.furnacemob"), тем-более "плагин" этот я пишу под сервер, никуда я кидать свой парашный плагин на переплавку блоков и мобов не буду).
     
  7. CriticaMobslps

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

    Баллы:
    76
    Имя в Minecraft:
    CriticaMobs
    2 вариант мне кажется можно начиная с cow.remove() и до конца переделать, найти что то по типу cow.dropItems и переписать на своё
     
  8. Автор темы
    Ильми

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

    Баллы:
    66
    Имя в Minecraft:
    IlmiGirafe
    Слушай, можно просто отменить дроп и заново написать свой. Не подскажешь как написать шанс на выпадение айтема? К примеру, при 'убийстве' коровы она будет удаляться, но при этом лут от неё остаётся, поэтому мы его отключаем, после этого добавляем свой лут - кожу и стейки, на них мы ставим % выпадения, можно будет поискать процент выпадения при обычном убийстве коровы и подогнать под них. Теперь у меня есть вопрос, а можно ли поставить свои проценты на выпадение предмета? Если да, то это хорошо, если нет, то у меня проблемы). Сам если что не знаю такого ивента, который будет именно Заменять дроп и именно с Убитого игроком моба.
     
  9. alexandrage

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

    Баллы:
    173
    На сколько я помню, список дропа мобов спокойно меняется ивентом и без отмены и ручного дропа. Котел сервер не считаются, там это не работает. Там все ивенты через жопу реализованы.
     
  10. Автор темы
    Ильми

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

    Баллы:
    66
    Имя в Minecraft:
    IlmiGirafe
    Буду очень благодарен, если поможете с этим ивентом. Я уже писал вроде, что не знаю такого ивента, поэтому и собирался удалить дроп и полностью его переписать.
     
  11. CriticaMobslps

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

    Баллы:
    76
    Имя в Minecraft:
    CriticaMobs
    PHP:
    public void onEntityDeath(EntityDeathEvent event){
         if(
    event.getEntity() instanceof Cow)
         {
           
    //Проверь на убийцу сам(сорь без среды)
           
    List<ItemStackitems = new ArrayList<>();
           for(
    ItemStack item event.getDrops())
           {
                if(
    item.getType().equals(Material.BEEF)
                {
                     
    item = new ItemStack(Material.COOCKED_BEEFitem.getAmount());
                }
                
    items.add(item);
           }
           
    event.getDrops().clear();
           
    items.foreach(event.getDrops()::add);
         }
    }
     
  12. alexandrage

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

    Баллы:
    173
    Ну, как то так, на примере говядены.
    Код:
        @EventHandler
        public void onTest(EntityDeathEvent e) {
            e.getDrops().replaceAll(new UnaryOperator<ItemStack>() {
                @Override
                public ItemStack apply(ItemStack stack) {
                    if (stack.getType() == Material.BEEF) {
                        stack.setType(Material.COOKED_BEEF);
                    }
                    return stack;
                }
            });
        }
     
  13. alexandrage

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

    Баллы:
    173
  14. CriticaMobslps

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

    Баллы:
    76
    Имя в Minecraft:
    CriticaMobs
    Аж самому стыдно стало:oops:
     
    Последнее редактирование: 18 май 2020
  15. Автор темы
    Ильми

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

    Баллы:
    66
    Имя в Minecraft:
    IlmiGirafe
    Спасибо за помощь, всё-же я уже использую то, что написал @CriticaMobslps, спасибо, @alexandrage тоже спасибо за помощь, всё работает. Я закрываю вопрос.
    Код:
    public class handlerrr implements Listener {
        
        @EventHandler
        public void onEntityDeath(EntityDeathEvent event){
            if(event.getEntity () instanceof Cow) {
            Cow cow = (Cow) event.getEntity ();
            if(cow.getKiller() instanceof Player)
            {
                Player p = (Player) cow.getKiller();
                if(!p.hasPermission("gfpuse.furnacemob")) return;
            }
               List<ItemStack> items = new ArrayList<>();
               for(ItemStack item : event.getDrops())   
               {
                    if(item.getType().equals(Material.RAW_BEEF))
                    {
                         item = new ItemStack(Material.COOKED_BEEF, item.getAmount());
                    }
                    items.add(item);
               }
               event.getDrops().clear();
               items.forEach(event.getDrops()::add);
             }
    }
    }
     
Статус темы:
Закрыта.

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