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

Помогите Бесконечный блок в инвентаре

Тема в разделе "Разработка плагинов для новичков", создана пользователем Henry436, 1 фев 2017.

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

    Henry436 Новичок

    Баллы:
    16
    Пытаюсь сделать подобие креатив-режима, чтобы при установке блока он ставился, но в инвентаре не пропадал

    Код:
    @EventHandler(priority=EventPriority.MONITOR)
    public void onPlace(BlockPlaceEvent event)
    {
        World spawn = Bukkit.getWorld(event.getPlayer().getWorld().getName());
        Player p = event.getPlayer();
        Block block = event.getBlockPlaced();
        Block newblock = spawn.getBlockAt(block.getLocation());
        newblock.setType(block.getType());
        event.setCancelled(true);
    }
    Работает не так, как нужно. Эвент отменяется, но блок не ставится.
    Однако если Location взять другой (например, на один блок выше), всё ставится замечательно. Но мне надо, чтобы ставился именно этот блок. Что не так-то?

    Костыли вроде "поставить блок, затем добавить его в инвентарь" или через таймер не предлагать
     
  2. Blc_Dragon

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

    Баллы:
    76
    ЕЕ, говнокод

    просто World spawn = event.getPlayer().getWorld() уже не?
    зачем вообще работать с миром, когда можно просто location.getBlock() ?

    почему оно у тебя не пашет вообще хз
     
  3. Mabus

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

    Баллы:
    76
    Skype:
    chervanenko
    Имя в Minecraft:
    Chervanenko
    Попробуй сначала отменить, а потом уже кастовать. Колдун. =)))))
    event.setCancelled(true); пиши в начале твоего "обработчика"
     
  4. Автор темы
    Henry436

    Henry436 Новичок

    Баллы:
    16
    Я уже по-всякому пробовал. Думал, мб ссылка где-то на блок сохраняется. Сейчас мне уже плевать на код, лишь бы работал
    Не помогает
    Вот так работает (на 1 блок выше):

    Код:
    int x=event.getBlockPlaced().getX();
    int y=event.getBlockPlaced().getY();
    int z=event.getBlockPlaced().getZ();
    event.setCancelled(true);
    Location loc = new Location(event.getPlayer().getWorld(), x, y+1, z);
    loc.getBlock().setType(Material.CHEST);
    А так - нет:

    Код:
    int x=event.getBlockPlaced().getX();
    int y=event.getBlockPlaced().getY();
    int z=event.getBlockPlaced().getZ();
    event.setCancelled(true);
    Location loc = new Location(event.getPlayer().getWorld(), x, y, z);
    loc.getBlock().setType(Material.CHEST);
    WTF?
     
  5. Mabus

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

    Баллы:
    76
    Skype:
    chervanenko
    Имя в Minecraft:
    Chervanenko
    Код:
    @EventHandler(priority=EventPriority.MONITOR)
    public void onPlace(BlockPlaceEvent event)
    {
        World spawn = Bukkit.getWorld(event.getPlayer().getWorld().getName());
        Player p = event.getPlayer();
        Block block = event.getBlockPlaced();
        event.setCancelled(true);
        Block newblock = spawn.getBlockAt(block.getLocation());
        newblock.setType(block.getType());
    }
    так не катит?
     
  6. Автор темы
    Henry436

    Henry436 Новичок

    Баллы:
    16
    Нет
     
  7. Mabus

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

    Баллы:
    76
    Skype:
    chervanenko
    Имя в Minecraft:
    Chervanenko
    Тогда я тоже хз. =))) Зря от таймера отказываешься, его можено разово после одного тика пускануть и будет ингейм усё ок.
     
  8. Автор темы
    Henry436

    Henry436 Новичок

    Баллы:
    16
    Сейчас мне хотя бы понять, какого чёрта я не могу в эвенте сетать этот же блок
    Если я правильно понимаю, сервер прежде чем ставить блок, просто пускает эвент и ставит, если он не отменён. Что же тогда помешать может сетнуть его?
    Если не будет другого способа починить это, то придётся таском делать, но это дико костыльно (
    Ядро Thermos последней версии, если это о чём-то говорит
     
  9. Mabus

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

    Баллы:
    76
    Skype:
    chervanenko
    Имя в Minecraft:
    Chervanenko
    может кто-то после того как ты его делаешь убирает... как знать. =)))
     
  10. Автор темы
    Henry436

    Henry436 Новичок

    Баллы:
    16
    Ну да, может быть во время пуска эвента сервер блокирует доступ к этому блоку, но мб есть способ обойти это?
     
  11. Blc_Dragon

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

    Баллы:
    76
    Не фонтан, но хотя бы работает
    Код:
    @EventHandler(priority=EventPriority.MONITOR)
    public void onPlace(BlockPlaceEvent e)    {
        e.getPlayer().getInventory().setItem(e.getPlayer().getInventory().getHeldItemSlot(), e.getPlayer().getInventory().getItemInMainHand().clone());
    }
     
  12. Mabus

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

    Баллы:
    76
    Skype:
    chervanenko
    Имя в Minecraft:
    Chervanenko
    Грац, чуваку с анимешной авой. Обожаю код в одну строку. =))) Так бы всё работало.... Эх мечты, мечты......
     
  13. Blc_Dragon

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

    Баллы:
    76
    обожаю короткий код.

    идеальная программа - это открывающая скобка, список подпрограмм и закрывающаяся скобка. (c) какой то чувак.
     
  14. Автор темы
    Henry436

    Henry436 Новичок

    Баллы:
    16
    Спасибо. Других вариантов походу нет, ладно...
    Другой вопрос - как сделать, чтобы блок ломался, как в креативе, а не просто исчезал, как происходит при работе такого кода:
    Код:
    if(event.getAction()==Action.LEFT_CLICK_BLOCK){
        event.setCancelled(true);
        event.getClickedBlock().setType(Material.AIR);
    }

    То есть чтобы звук был и частицы, но дропа не было
     
Статус темы:
Закрыта.

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