Помогите Как сделать пополнение при ломаний блока

CamedoZ

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
CamedoZ
Не могу понять как сделать ивент при ломаний арбуза, когда поднимешь сами кусочки арбуза, за 1 шт пополнялось по 30монет
 
Бери ItemPickupEvent(или как-то так) и мути то, что тебе нужно.
 
Не самый лучший вариант. Придется отслеживать от куда дроп идет.
Ну можно поговнокодить и заносить в мапу игрока, сломавшего блок арбуза, а при подборе этих семян выполнять то, что нужно и удалять его из мапы.
 
Не могу понять как сделать ивент при ломаний арбуза, когда поднимешь сами кусочки арбуза, за 1 шт пополнялось по 30монет
Кто-то пытается сделать режим с MaskMe сервера?
 
У меня свой вариант будет.
1. При ломании арбуза удалить весь дроп и заспавнить новый рандомно. (Это потому что нельзя получить конкретный дроп, который выпадет при ломании)
2. В этот дроп, который ты заспавнил, добавить MetaData с ключем, что надо деньгу дать.
3. При событии поднятия ломтиков, чекать этот ключ. Если есть такой, дать деньгу и удалить метадату.
 
1. При ломании арбуза удалить весь дроп и заспавнить новый рандомно. (Это потому что нельзя получить конкретный дроп, который выпадет при ломании)
С чего бы? Все там получается в бреак ивенте.
 
e.getBlock().getDrops(); Не?
Там можно взять лут стандартный с блока.
С блока руды угля например ты получишь ничего. А кирка на удачу 3 тебе даст не 1 уголь. Даже если ты его закинешь в этот же метод, где есть инструмент, тебе выдаст 1 уголь, а дропнется рандомно. При чем тот что ты получишь ItemStack не будет соответствовать тому, что дропнется, а значит ты никак не сможешь прикрепить метадату.
getDrops() - возвращает ст. дроп с блока при разрушении рукой
getDrops(ItemStack tool) - возвращает ст. дроп с блока при разрушении инструментом (не идет учет чар)
 
Код:
@EventHandler
    public void item(BlockBreakEvent e) {
        Player p = e.getPlayer();
        if() {
      
      
      
        }
Что вписать в if ?
PHP:
    @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
    public void on(BlockBreakEvent e) {
        if(e.getBlock().getType()==Material.MELON_BLOCK) {
            Collection<ItemStack> drop = e.getBlock().getDrops();
            e.setDropItems(false);
            //TODO
        }
    }
Как то так.
 
Последнее редактирование:
PHP:
    @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
    public void on(BlockBreakEvent e) {
        if(e.getBlock().getType()==Material.MELON_BLOCK) {
            Collection<ItemStack> drop = e.getBlock().getDrops();
            e.setDropItems(false);
            //TODO
        }
    }
Как то так.
Мне не нужно что бы просто арбузы не выподали, а из инвентаря менялись на деньги
 
Мне не нужно что бы просто арбузы не выподали, а из инвентаря менялись на деньги
У меня свой вариант будет.
1. При ломании арбуза удалить весь дроп и заспавнить новый рандомно. (Это потому что нельзя получить конкретный дроп, который выпадет при ломании)
2. В этот дроп, который ты заспавнил, добавить MetaData с ключем, что надо деньгу дать.
3. При событии поднятия ломтиков, чекать этот ключ. Если есть такой, дать деньгу и удалить метадату.
Пробовал?
 
Мне не нужно что бы просто арбузы не выподали, а из инвентаря менялись на деньги
Может так поймешь?
PHP:
    @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
    public void on(EntityPickupItemEvent e) {
        if (e.getEntityType() == EntityType.PLAYER && e.getItem().getItemStack().getType() == Material.MELON) {
            if (e.getItem().getCustomName().equals("coins")) {
                // TODO
            }
        }
    }

    @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
    public void on(BlockBreakEvent e) {
        if (e.getPlayer().getGameMode() != GameMode.CREATIVE) {
            if (e.getBlock().getType() == Material.MELON_BLOCK) {
                Collection<ItemStack> drop = e.getBlock().getDrops();
                e.setDropItems(false);
                for (ItemStack stack : drop) {
                    Item item = e.getBlock().getWorld()
                            .dropItemNaturally(e.getBlock().getLocation().add(new Vector(0.5, 0.5, 0.5)), stack);
                    // TODO
                    item.setCustomName("coins");
                }
            }
        }
    }
 
Последнее редактирование:
Может так поймешь?
PHP:
    @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
    public void on(EntityPickupItemEvent e) {
        if (e.getEntityType() == EntityType.PLAYER && e.getItem().getItemStack().getType() == Material.MELON) {
            if (e.getItem().getCustomName().equals("coins")) {
                // TODO
            }
        }
    }

    @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
    public void on(BlockBreakEvent e) {
        if (e.getPlayer().getGameMode() != GameMode.CREATIVE) {
            if (e.getBlock().getType() == Material.MELON_BLOCK) {
                Collection<ItemStack> drop = e.getBlock().getDrops();
                e.setDropItems(false);
                for (ItemStack stack : drop) {
                    Item item = e.getBlock().getWorld()
                            .dropItemNaturally(e.getBlock().getLocation().add(new Vector(0.5, 0.5, 0.5)), stack);
                    // TODO
                    item.setCustomName("coins");
                }
            }
        }
    }
Ивента EntityPickupItemEvent и действия e.setDropItems(false); нету
 
Назад
Верх