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

Как отправить ItemStack в чат?

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

  1. Автор темы
    Snowmaze

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

    Баллы:
    36
    У меня есть ItemStack и мне надо отправить его после текста. Как это сделать?
    Я пытался найти код в инете и нашёл, но почему-то не импорит CraftItemStack. Версия 1.12.2
    upload_2019-6-15_1-4-11.png
    upload_2019-6-15_1-6-32.png
     
  2. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Для "Craft" штук тебе нужно CraftBukkit как либу подтянуть.
     
  3. Автор темы
    Snowmaze

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

    Баллы:
    36
    upload_2019-6-15_1-49-51.png

    upload_2019-6-15_1-48-41.png
     
  4. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    CraftBukkit нельзя распространять публично, отсюда его нет там в репозитории.
    Ты должен забилдить ядро через BuildTools и подключить его как обычную библиотеку, без Maven.
    Либо создавай где то свой закрытый репозиторий и пихай туда скомпиленное ядро.
     
  5. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
  6. Автор темы
    Snowmaze

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

    Баллы:
    36
    Я уже забилдил ядро, теперь работает, спасибо!
    upload_2019-6-15_2-31-41.png

    А почему CraftBukkit нельзя распространять публично?
     
  7. Автор темы
    Snowmaze

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

    Баллы:
    36
    И ещё как сделать в 1 строке всё?
    http://rubukkit.org/threads/kak-otpravit-paket-v-odnoj-stroke-s-soobscheniem.100679/#post-1143373 есть тема, но я не понял, как это сделать
     
  8. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
  9. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Потому что там декомпильнутые исходники майна.
     
  10. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Почему?
     
  11. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ну оч ****ый пример использования рефлексии)
    Ну и к тому же в дефолтном TextComponent api есть показ предмета.
     
  12. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Прикол в том, что предмет нужно пихать в Json формате в TextComponent, ибо никак иначе.
     
  13. Автор темы
    Snowmaze

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

    Баллы:
    36
    А куда это всё пихать, чтобы в 1 пакете всё шло? 2019-06-15_12-16-58.png
     
  14. Автор темы
    Snowmaze

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

    Баллы:
    36
    Я сейчас чёт рандомно накликал и оно заработало XD
    Код:
    net.minecraft.server.v1_12_R1.ItemStack nms = CraftItemStack.asNMSCopy(clicked);
    IChatBaseComponent s = new ChatComponentText("§7Игрок " + player.getName() + " в " + player.getGameMode().name() + " кликнул на: ").addSibling(nms.C());
    PacketPlayOutChat packet = new PacketPlayOutChat(s);
    ((CraftPlayer) onLooker).getHandle().playerConnection.sendPacket(packet);
    Кликал на предложения IDE
     
  15. alexandrage

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

    Баллы:
    173
    Код:
        public static void send(Player sender, Player target, ItemStack item) {
            net.minecraft.server.v1_14_R1.ItemStack nms = CraftItemStack.asNMSCopy(item);
            IChatBaseComponent bc = new ChatComponentText("§6" + sender.getName() + "§5 показал вам: ");
            bc.addSibling(nms.B());
            PacketPlayOutChat packet = new PacketPlayOutChat(bc);
            ((CraftPlayer) target).getHandle().playerConnection.sendPacket(packet);
        }
     
  16. alexandrage

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

    Баллы:
    173
    Это круто, когда у самого итемстака нет апи на это.
     
  17. MurlikMurlik

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

    Баллы:
    96
    Код:
                        net.minecraft.server.v1_12_R1.ItemStack mcItem = CraftItemStack.asNMSCopy(ItemStack);
                        NBTTagCompound nbt = new NBTTagCompound();
                        mcItem.save(nbt);
                        ChatComponentText main = new ChatComponentText("item");
                        ChatModifier modifier = main.getChatModifier();
                        modifier.setChatHoverable(new ChatHoverable(ChatHoverable.EnumHoverAction.SHOW_ITEM, new ChatComponentText(nbt.toString())));
                        main.setChatModifier(modifier);
                        PlayerList playerList = MinecraftServer.getServer().getPlayerList();
                        EntityPlayer ep = playerList.getPlayer(playerName);
                        if (ep != null) {
                            ep.sendMessage(main);
                        }
    
    Вот такое должно работать.
     
  18. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ну рофл да)
    В любом случае там оч уе*ищная работа с рефлексией.
     
  19. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Кроме "супер пупер красоты" кода она ничем не отличается от использования ее через какой нибудь враппер.
    Показали напрямую, как что куда вызывается, чем плохо? Если кто захочет себе упростить, пусть пишет враппер и упрощает на свой вкус. У каждого он разный и у каждого будет свой подход.
     
  20. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ну так челик не сделает этого, он сделает все по тутору без кеширования и с этим уе*ищным юзлесс классом RefletionUtil, который почему-то все дауны везде суют. Надо делать по-нормальному, кэшируя и через MethodHandle, он намного быстрее.
     

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