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

Помогите Перемещение подобранного предмета

Тема в разделе "Разработка плагинов для новичков", создана пользователем NotCopter, 18 авг 2023.

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

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

    Баллы:
    31
    Доброго времени суток, я сделал небольшой плагин для БВ, он показывает кол-во каждого ресурса в инвентаре при подборе. Так вот: Как сделать перемещение подобранного предмета сразу в верхнюю строчку инвентаря? Вот так:
    upload_2023-8-18_23-52-56.png
     
  2. DestKoder

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

    Баллы:
    66
    Имя в Minecraft:
    DestKoder
    Как вариант от меняешь событие item pickup и сетаешь в нужный слот и тем, если занят, то предыдущий. Однако реализация так себе :D

    P.s. Не гоже теме без ответа лежать.
     
  3. Автор темы
    NotCopter

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

    Баллы:
    31
    Но тогда не будет анимации подбора предмета
     
  4. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Анимацию можно запустить самостоятельно:
    https://jd.papermc.io/paper/1.20/or...ckupItemAnimation(org.bukkit.entity.Item,int)

    Ещё возможно удобней будет использовать вот это событие:
    https://jd.papermc.io/paper/1.20/org/bukkit/event/player/PlayerAttemptPickupItemEvent.html
     
  5. Автор темы
    NotCopter

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

    Баллы:
    31
    Хорошо, сейчас попробую у себя что-то изобразить
     
  6. Автор темы
    NotCopter

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

    Баллы:
    31
    Стоп, погодите-ка...
    upload_2023-8-25_14-6-5.png

    Код:
    package com.notcopter.notbedwars.events;
    
    import org.bukkit.Bukkit;
    import org.bukkit.EntityEffect;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.LivingEntity;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerAttemptPickupItemEvent;
    
    public class ImprovedItemPickup implements Listener {
    
        @EventHandler
        public void PlayerAttemptPickupItemEvent(PlayerAttemptPickupItemEvent event) {
            if (event.getPlayer() == null) return;
    
            Entity livingEntity = (Entity) event.getPlayer();
            livingEntity.playPickupItemAnimation(event.getItem(), 1);
    
            event.getItem().remove();
            event.setCancelled(true);
    
            for (Player player : Bukkit.getOnlinePlayers()) {
                if (player.getLocation().distance(event.getItem().getLocation()) > 1) continue;
    
                player.getInventory().addItem(event.getItem().getItemStack());
    
            }
        }
    }
     
  7. Автор темы
    NotCopter

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

    Баллы:
    31
    Я наверное понял в чём прикол, у меня версия сервер 1.12.2, а ссылка на апи, видимо для 1.20
    (https://jd.papermc.io/paper/1.20/org/bukkit/entity/LivingEntity.html#playPickupItemAnimation(org.bukkit.entity.Item,int))
     
  8. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Ну если 1.12.2, то земля пухом. Либо с хреновым визуалом делать, либо пакетом анимацию отправлять, либо вовсе городить костыль и с задержкой в 1 тик перемешать предметы в нужные слоты
     
  9. Автор темы
    NotCopter

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

    Баллы:
    31
    А что за пакет-то? ProtocolLib стоит
     
  10. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
  11. Автор темы
    NotCopter

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

    Баллы:
    31
    А как сделать зависимость от PacketWrapper'а?

    HTML:
    <repositories>
            <repository>
                <id>papermc-repo</id>
                <url>https://repo.papermc.io/repository/maven-public/</url>
            </repository>
            <repository>
                <id>sonatype</id>
                <url>https://oss.sonatype.org/content/groups/public/</url>
            </repository>
            <repository>
                <id>enginehub-maven</id>
                <url>https://maven.enginehub.org/repo/</url>
            </repository>
            <repository>
                <id>dmulloy2-repo</id>
                <url>https://repo.dmulloy2.net/content/groups/public/</url>
            </repository>
        </repositories>
    
        <dependencies>
            <dependency>
                <groupId>com.destroystokyo.paper</groupId>
                <artifactId>paper-api</artifactId>
                <version>1.12.2-R0.1-SNAPSHOT</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>com.comphenix.protocol</groupId>
                <artifactId>ProtocolLib</artifactId>
                <version>4.8.0</version>
            </dependency>
            <dependency>
                <groupId>org.jetbrains</groupId>
                <artifactId>annotations</artifactId>
                <version>24.0.1</version>
            </dependency>
    <!--        Не работает-->
            <dependency>
                <groupId>com.comphenix.packetwrapper</groupId>
                <artifactId>PacketWrapper</artifactId>
                <version>1.15.2-R0.1-SNAPSHOT</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    

    Я даже версию PacketWrapper'а менял на другую, но вылетает это:
    upload_2023-8-26_14-32-21.png
    Could not find artifact com.comphenix.packetwrapper: PacketWrapper: pom:3.0.0 in papermc-repo (https://repo.papermc.io/repository/maven-public/)
     
  12. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Не стоит подключить PacketWrapper зависимостью, лучше скопировать к себе в проект необходимые классы и подправить в соответствие с протоколом нужной версии (1.12). PacketWrapper делался под лохматую версию, поэтому многие пакеты оттуда не будут работать без дополнительных правок.

    Да и на главной самого PacketWrapper указана рекомендация копировать классы:

    Вот тут подробно рассказал о том, как работать с пакетами и конкретно с врапперами: https://rubukkit.org/threads/kak-rabotat-s-paketami-na-ljuboj-versii.188968/
     

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