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

Помогите Убрать стандартный эффект эндер сундука

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

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

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

    Баллы:
    66
    Помогите пожалуйста, как можно убрать стандартный эффект эндер сундука, например пишу плагин на донат кейсы, выдаю себе командой сундук с определенным названием и описанием. Далее когда его ставлю координаты его записываются в файл. Затем при нажатии на эндер сундук, который находится в определенных координатах, выходит GUI и там уже показывается сам рандом.
    1)Так вот начал реализовывать, выдаю сундук, ставлю его, а там стандартные частицы вокруг летают и немного подсвечивается он. Как можно это все эффекты убрать? (при том что я в будущем хочу сделать там свои эффекты).
    2)Как поставить свои эффекты? =) Взрыв фейерверка интересует.
    3) И вообще нормальная ли логика получается у подобного кейса?
     
  2. Nikolai_Faint

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

    Баллы:
    96
    Можно отменять клик на сундук, и пакетами его открывать.
     
  3. Автор темы
    Alex555333222

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

    Баллы:
    66
    Что означает пакетами открывать, и как это вообще работает. И как это с эффектами связано, пока я не понимаю. Я ток новичок в этом деле, плохо разбираюсь.
     
  4. Автор темы
    Alex555333222

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

    Баллы:
    66
    Не эффект открытия сундука я хочу убрать, а эффект летающих фиолетовых частичек (как у эндерменов) от сундука и свет который он излучает
     
  5. Nightmare_JavaGod

    Nightmare_JavaGod Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    NotPlay
    Вы можете отправить пакет PacketPlayOutBlockAction игроку, чтобы они увидели, что грудь открыта или закрыта. Этот пакет используется для отображения частиц заметки, перемещений поршня и изменений состояния грудной клетки.

    Вам нужно будет создать BlockPosition и получить Block NMS (тип блока minecraft, в данном случае сундук), а также предоставить два байта данных. Первый байт не используется в случае анимации сундука, а второй байт представляет собой изменение состояния сундука, 0 для закрытия и 1 для открытия сундука. Ниже ваш метод переписан, чтобы также показать соответствующую анимацию.

    PHP:
    @SuppressWarnings("deprecation")
    public static 
    void changeChestState(Location locboolean open) {
        
    byte dataByte = (open) ? (byte0// The byte of data used for the note and animation packet (1 if true, 0 if false)
        
    for (Player player Bukkit.getOnlinePlayers()) {
            
    player.playNote(loc, (byte1dataByte); // Play the sound
            
    BlockPosition position = new BlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); // Create the block position using loc
            // Instantiate animation packet, get NMS Block using getById() and loc.getBlock() (deprecated), the server version may vary
            
    PacketPlayOutBlockAction blockActionPacket = new PacketPlayOutBlockAction(positionnet.minecraft.server.v1_8_R3.Block.getById(loc.getBlock().getTypeId()), (byte1dataByte);
            ((
    CraftPlayerplayer).getHandle().playerConnection.sendPacket(blockActionPacket); // Send animation packet to CraftPlayer
        
    }
    }
    PS: Автор не я.
     
  6. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Ребята, вы вообще не читаете тему ТС.
    Ему нужно убрать партиклы и свечение блока от эндерсундука.
     
  7. Nikolai_Faint

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

    Баллы:
    96
    Тогда проще юзать обычный сундук.
     
  8. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    Или блок камня, чего уж тут.
    Взрыв фейерверка -- не один эффект, нужно спавнить фейерверк, чтобы использовать его частицы.
    Используйте виртуальный блок, не устанавливая его, просто отправьте игроку новый блок, тогда сервер не будет спавнить частицы вокруг сундука, потому что для сервера это будет не сундук.
     
  9. Автор темы
    Alex555333222

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

    Баллы:
    66
    Можно маленький пример подобной реализации
     
  10. Ission

    Ission Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    lokivava
    Нам нужен вот этот метод -> sendBlockChange(Location loc, Material material, byte data) у Player'а
    Или его родственник -> sendBlockChange(Location loc, BlockData block).
    Далее что нужно сделать словами.
    При вызове события установки блока (BlockPlaceEvent), мы проверяем, что ставим ->getItemInHand(), оно должно совпадать с требуемым сундуком. Если всё совпало и событие не отменено другим плагином (мы же не хотим бить чужие защищённые области?), отменяем событие, уменьшаем количество предметов в руке игрока/уничтожаем последний предмет.
    Далее, устанавливаем обычный сундук туда, куда пытался поставить его игрок, не забываем его залочить (выставить поле Lock), а также изменить, например, имя, чтобы идентифицировать позже этот сундук. Это действие опционально, можно не ставить ничего, тогда ничего ни для кого не будет.
    Далее вызываем один из верхних методов, но в качестве типа используем уже сундук края. Этот метод нужно вызвать для всех игроков, которые должны увидеть сундук края, если не хотим, чтобы видели вообще все игроки, кроме установившего, то можно или отправить остальным воздух, или ничего не отправлять, если предыдущий пункт был опущен.
    Теперь нужно запавнить фейерверк в точке сундука, прописать ему нужные характеристики, после чего взорвать его на месте -> detonate(). Если есть желание повторять эффект множество раз, то следует использовать шедулеры (можно и без них, но для начала сойдёт).
    Теперь нужно по событию определить, PlayerInteractEvent нажал ли игрок по нашей пустоте/сундуку/чему_там_нужно. Определив то, что нужно, убирайте блок, эффект, игрока и открывайте ваш GUI.
     
  11. Автор темы
    Alex555333222

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

    Баллы:
    66
    @SuppressWarnings("deprecation")
    @EventHandler
    public void setEnder (BlockPlaceEvent e) {
    Player p = e.getPlayer();
    if (p.getInventory().getItemInHand().getType() != Material.ENDER_CHEST || e.isCancelled()) return;
    //e.setCancelled(true);
    p.getInventory().getItemInHand().setAmount(p.getInventory().getItemInHand().getAmount() - 1);
    e.getBlock().setType(Material.CHEST);
    p.sendBlockChange(e.getBlock().getLocation(), Material.ENDER_CHEST, (byte)0);

    }
    Примерно такое получилось.

    sendBlockChange вообще не работает при тестах.

    sendBlockChange(Location loc, BlockData block). такой метод эклипс вообще не знает (с такими параметрами).

    Если писать e.setCancelled(true), то вообще никакие действия не работают, с установкой блоков.

    e.getBlock().setType(Material.CHEST), этой строчкой вызывается ошибка в консоле, и не понятно как это влияет на процесс, хотя блок меняется. Вот ошибка: Block at 58,67,47 is CHEST but has net.minecraft.server.v1_8_R1.TileEntityEnderChest@7981090. Bukkit will attempt to fix this, but there may be additional damage that we cannot recover.

    Как заспавнить фейерверк вообще не понятно, пытался взять блок, взять локацию, нет методов там.

    Можно ли вообще небольшой пример реализации, как это пишется вообще. Уже ничего не помогает.
     
  12. Nikolai_Faint

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

    Баллы:
    96
    Закрываем тему.
     
  13. Автор темы
    Alex555333222

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

    Баллы:
    66
    Хорошее объяснение все так сразу стало понятно, спасибо большое за нулевую(бесполезную) информацию
     
  14. Nikolai_Faint

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

    Баллы:
    96
    Тебе дали доки 1.13.2
     
  15. Автор темы
    Alex555333222

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

    Баллы:
    66
    Ну так проблема то не решилась, альтернатив нет что ли. Ответ то по вопросу начальному получается так и не получен.
     
  16. Nikolai_Faint

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

    Баллы:
    96
    Тебе кинули ответ. Самый оптимальный вариант - переезд на новую версию, если хочешь на динозавре сидеть - юзай обычный сундук.
     
  17. Автор темы
    Alex555333222

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

    Баллы:
    66
    С каких пор 1.8 динозавр =) Люди до сих пор на 1.5.2 сидят. А про спавн фейерверка что можете посоветовать.
     
  18. Nikolai_Faint

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

    Баллы:
    96
    1.8 стал динозавром с выходом 1.9. По поводу феерверка - есть гугл.
     
Статус темы:
Закрыта.

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