Вопрос Баг с InventoryClickEvent

Версия Minecraft
1.16.X

1Love_Artix001

Пользователь
Сообщения
40
Разрешается выкладывание кода, файлов конфигураций, логов и т.д. только под BB-код CODE
Всем здравствуйте, у меня в плагине есть метод InventoryClickEvent который отвечает за запрет перемещения некоторых предметов (шалкеровых ящиков) в инвентаре. вот код:
if (backpacks.containsKey(uuid)) {
ItemStack item = openedShulkers.get(uuid); // Получаем шалкеровый ящик, который был открыт
if (!isBackpack(item) || (!player.getInventory().containsAtLeast(item, 1) && !player.getInventory().getItemInOffHand().equals(item))) {
event.setCancelled(true);
player.closeInventory();
backpacks.remove(uuid);
openedShulkers.remove(uuid); // Удаляем ссылку на шалкеровый ящик
} else {
ItemStack clickedItem = event.getCurrentItem();
if (isShulkerBox(clickedItem) || isShulkerBox(event.getCursor())) {
event.setCancelled(true);
}

// Проверка на -1 перед тем, как пытаться получить предмет из горячей клавиши
int hotbarButton = event.getHotbarButton();
if (hotbarButton != -1) {
ItemStack hotbarItem = player.getInventory().getItem(hotbarButton);
if (isShulkerBox(hotbarItem)) {
event.setCancelled(true);
}
}
}
}
}
проблема заключается в том, что когда игрок держит во 2 руке предмет, то этот метод попросту не работает.
 
Решение
Форматирование (BB-код):
    private static final Map<UUID, Boolean> air = new HashMap<UUID, Boolean>();


Форматирование (BB-код):
    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent event) {
        if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_AIR) {
            handleClick(event, event.getPlayer().getInventory().getItemInHand());
            handleClick(event, event.getPlayer().getInventory().getItemInOffHand());
        }
    }

    private void handleClick(PlayerInteractEvent event, ItemStack item) {
        Bukkit.getLogger().warning(event.getPlayer().getName());
        if (isBackpack(item)) {...
интересно. если я по блоку бью, он правило соблюдает, а по воздуху нет
всмысле?

о боже, каким то образом шалкер открывается также из второй руки. это сейчас постараюсь поправить
 
всмысле?

о боже, каким то образом шалкер открывается также из второй руки. это сейчас постараюсь поправить
держа шалкер в руке кликая по блоку, он не даёт передвигать шалкер, а если кликая по воздуху, то он даёт
 
держа шалкер в руке кликая по блоку, он не даёт передвигать шалкер, а если кликая по воздуху, то он даёт
хавхыаххыва, реально) я это даже не проверял. очень интересно
Объединено

держа шалкер в руке кликая по блоку, он не даёт передвигать шалкер, а если кликая по воздуху, то он даёт
кстати говоря, у меня есть проверка на то, есть ли в инвентаре игрока шалкеровый ящик (вторую руку не учитывает). тут та же самая пробелма, которую ты описал. если я открываю шалкер кликая по блоку, то он не закрывает меню. а если кликаю по воздуху, то закрывает
 
Последнее редактирование:
Форматирование (BB-код):
Inventory backpack = backpacks.computeIfAbsent(uuid, k -> Bukkit.createInventory(null, getInventorySize(level), "Рюкзак"));
->
Форматирование (BB-код):
Inventory backpack = backpacks.put(uuid, Bukkit.createInventory(null, getInventorySize(level), "Рюкзак"));

По какой-то причине это решает твою проблему
 
Форматирование (BB-код):
Inventory backpack = backpacks.computeIfAbsent(uuid, k -> Bukkit.createInventory(null, getInventorySize(level), "Рюкзак"));
->
Форматирование (BB-код):
Inventory backpack = backpacks.put(uuid, Bukkit.createInventory(null, getInventorySize(level), "Рюкзак"));

По какой-то причине это решает твою проблему
сейчас проверю
Объединено

Форматирование (BB-код):
Inventory backpack = backpacks.computeIfAbsent(uuid, k -> Bukkit.createInventory(null, getInventorySize(level), "Рюкзак"));
->
Форматирование (BB-код):
Inventory backpack = backpacks.put(uuid, Bukkit.createInventory(null, getInventorySize(level), "Рюкзак"));

По какой-то причине это решает твою проблему
[20:31:50 ERROR]: Could not pass event PlayerInteractEvent to ShulkerPacks v1.0
java.lang.NullPointerException: Cannot invoke "org.bukkit.inventory.Inventory.getSize()" because "inventory" is null
at me.artix001.shulkerpacks.BackPackInventory.loadItemsFromShulker(BackPackInventory.java:163) ~[?:?]
at me.artix001.shulkerpacks.BackPackInventory.openBackpack(BackPackInventory.java:54) ~[?:?]
at me.artix001.shulkerpacks.BackPackInventory.handleClick(BackPackInventory.java:44) ~[?:?]
at me.artix001.shulkerpacks.BackPackInventory.onPlayerInteract(BackPackInventory.java:31) ~[?:?]
at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor10.execute(Unknown Source) ~[?:?]
at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.16.5.jar:git-Paper-794]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:549) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:512) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:507) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:503) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:1766) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:32) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:9) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:35) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1271) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1264) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1225) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1139) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Paper-794]
at java.lang.Thread.run(Thread.java:840) [?:?]
ошибка в консоли
 
Последнее редактирование:
сейчас проверю
Объединено


[20:31:50 ERROR]: Could not pass event PlayerInteractEvent to ShulkerPacks v1.0
java.lang.NullPointerException: Cannot invoke "org.bukkit.inventory.Inventory.getSize()" because "inventory" is null
at me.artix001.shulkerpacks.BackPackInventory.loadItemsFromShulker(BackPackInventory.java:163) ~[?:?]
at me.artix001.shulkerpacks.BackPackInventory.openBackpack(BackPackInventory.java:54) ~[?:?]
at me.artix001.shulkerpacks.BackPackInventory.handleClick(BackPackInventory.java:44) ~[?:?]
at me.artix001.shulkerpacks.BackPackInventory.onPlayerInteract(BackPackInventory.java:31) ~[?:?]
at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor10.execute(Unknown Source) ~[?:?]
at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.16.5.jar:git-Paper-794]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:549) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:512) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:507) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:503) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:1766) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:32) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:9) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:35) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1271) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1264) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1225) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1139) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Paper-794]
at java.lang.Thread.run(Thread.java:840) [?:?]
ошибка в консоли
но работает. сейчас гляну почему так
 
но работает. сейчас гляну почему так
да кстати, это работает, но есть проблема! когда я загружаю предметы в рюкзак, и после закрываю - они сохраняются. но после того, как я пытаюсь открыть первый раз рюкзак не открывается, только на 2. ну и на 2 раз как раз таки рюкзак оказывается пустым, без содержимого которое я клал туда
 
да кстати, это работает, но есть проблема! когда я загружаю предметы в рюкзак, и после закрываю - они сохраняются. но после того, как я пытаюсь открыть первый раз рюкзак не открывается, только на 2. ну и на 2 раз как раз таки рюкзак оказывается пустым, без содержимого которое я клал туда
Я вижу это
Объединено

От того и ошибка
 
Назад
Сверху Снизу