Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

NotCopter

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

P.s. Не гоже теме без ответа лежать.
 
Как вариант от меняешь событие item pickup и сетаешь в нужный слот и тем, если занят, то предыдущий. Однако реализация так себе :D

P.s. Не гоже теме без ответа лежать.
Но тогда не будет анимации подбора предмета
 
Но тогда не будет анимации подбора предмета
Анимацию можно запустить самостоятельно:
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
 
Анимацию можно запустить самостоятельно:
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
Хорошо, сейчас попробую у себя что-то изобразить
 
Анимацию можно запустить самостоятельно:
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
Стоп, погодите-ка...
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());

        }
    }
}
 
Анимацию можно запустить самостоятельно:
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
Я наверное понял в чём прикол, у меня версия сервер 1.12.2, а ссылка на апи, видимо для 1.20
(https://jd.papermc.io/paper/1.20/org/bukkit/entity/LivingEntity.html#playPickupItemAnimation(org.bukkit.entity.Item,int))
 
Я наверное понял в чём прикол, у меня версия сервер 1.12.2, а ссылка на апи, видимо для 1.20
(https://jd.papermc.io/paper/1.20/org/bukkit/entity/LivingEntity.html#playPickupItemAnimation(org.bukkit.entity.Item,int))
Ну если 1.12.2, то земля пухом. Либо с хреновым визуалом делать, либо пакетом анимацию отправлять, либо вовсе городить костыль и с задержкой в 1 тик перемешать предметы в нужные слоты
 
Ну если 1.12.2, то земля пухом. Либо с хреновым визуалом делать, либо пакетом анимацию отправлять, либо вовсе городить костыль и с задержкой в 1 тик перемешать предметы в нужные слоты
А что за пакет-то? ProtocolLib стоит
 
А как сделать зависимость от 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/)
 
А как сделать зависимость от 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'а менял на другую, но вылетает это:
Посмотреть вложение 65789
Could not find artifact com.comphenix.packetwrapper: PacketWrapper: pom:3.0.0 in papermc-repo (https://repo.papermc.io/repository/maven-public/)
Не стоит подключить PacketWrapper зависимостью, лучше скопировать к себе в проект необходимые классы и подправить в соответствие с протоколом нужной версии (1.12). PacketWrapper делался под лохматую версию, поэтому многие пакеты оттуда не будут работать без дополнительных правок.

Да и на главной самого PacketWrapper указана рекомендация копировать классы:
You can use PacketWrapper as a dependency if you wish, although it is highly recommended that plugin authors simply copy and paste the classes they need into their project. This helps guard against future changes in PacketWrapper and makes it easier on the end user.


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

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

Назад
Верх