Перемещение предметов на сервере

Версия Minecraft
1.16.5
API
Forge
Проблема такова что setItemInHand при отдельном визове работает нормально но если он визиваетса через onTick то предмет не попадает в руки(но если открить инвентарь и вовремя закрить то код сработает как нужно)

ExampleMod:
public static void setItemInHand() {
        Minecraft.getInstance().setScreen(null);

        ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
        scheduler.schedule(() -> {
            Minecraft mc = Minecraft.getInstance();
            ClientPlayerEntity player = mc.player;

                // Получаем номер слота, представляющего руку
            int mainHandSlot = player.inventory.selected;
            if (player.getMainHandItem().getItem() == Items.BLAZE_ROD) {
                player.chat("/ah sell 160000");
            }
            for (int slot = player.inventory.items.size(); slot >= 0; slot--) {
                ItemStack stack = player.inventory.getItem(slot);
                Item item = stack.getItem();
                if (item == Items.BLAZE_ROD) {
                    System.out.println(player.inventory.items.size());
                    System.out.println(slot);
                    System.out.println(mainHandSlot);
                    ItemStack mainHandStack = player.getMainHandItem();
                    mc.gameMode.handleInventoryMouseClick(mc.player.containerMenu.containerId, slot, mainHandSlot, ClickType.SWAP, player);
                    Minecraft.getInstance().setScreen(null);
                    if (player.getMainHandItem().getItem() == Items.BLAZE_ROD) {
                        player.chat("/ah sell 160000");
                    }
                      

                    break;

                }
            }

            scheduler.shutdown();  // Завершаем scheduler после выполнения задачи
        }, 3, TimeUnit.SECONDS);
    }



    @SubscribeEvent
    public void onTick(TickEvent.ClientTickEvent e) {
        CompoundNBT nbt;
        if (e.phase == TickEvent.Phase.END) {
            return;
        }
        if (Enav == false) {
            return;
        }
        PlayerEntity player = f1mc.player;

        PlayerController controller = Minecraft.getInstance().gameMode;
        ClientWorld clientWorld = Minecraft.getInstance().level;
        if (controller == null || clientWorld == null) {
            return;
        }

        Screen screen = this.f1mc.screen;
        if (!(screen instanceof ContainerScreen) || (screen instanceof InventoryScreen)) {
            return;
        }
        String title = screen.getTitle().getString();
        Minecraft mc = Minecraft.getInstance();

        Container clientPlayer = ((ClientPlayerEntity) player).containerMenu;
        ClientPlayerEntity clientPlayer2 = ((ClientPlayerEntity) player);
        NonNullList<ItemStack> auctionInventory = clientPlayer.getItems();

// Получаем инвентарь игрока
        String playerInventory = clientPlayer.toString();
        String auc = "Аукционы";
        System.out.println(title);
        if (title.contains("[1/1]")) {

            System.out.println(12);
            int emptySlotsCount = 0;
            for (int i = sharedNumber; i >= 0; i--) {
                ItemStack itemStack = auctionInventory.get(i);

                // Проверяем, является ли предмет в слоте пустым
                if (itemStack.isEmpty()) {
                    emptySlotsCount++;
                }
            }
            if (emptySlotsCount == 0) {
                System.out.println(23);
            } else {

                //Minecraft.getInstance().setScreen(null);
                ITextComponent textComponent = new StringTextComponent(String.valueOf(emptySlotsCount));
                player.sendMessage(textComponent, player.getUUID());
                setItemInHand();

                }
                System.out.println(emptySlotsCount);

            } else if (title.contains(auc)) {
                System.out.println(1);
                ItemStack auctionItem = (ItemStack) auctionInventory.get(46);
                if (auctionItem.toString().endsWith("ender_chest")) {
                    System.out.println(12);
                    Minecraft.getInstance().gameMode.handleInventoryMouseClick(clientPlayer.containerId, 46, 0, ClickType.QUICK_MOVE, f1mc.player);

                }
            } else {
                
            }
        /*}else {
            setItemInHand();
        }*/
    }
 
Я прошу как бы прощения, но как моя твоя не понимать, почему CLIENTPLAYER?
Ну, либо я не догоняю, либо ты сам не видишь прикола =\

Возможно я ошибаюсь и на 1.16.5 так, но насколько я знаю, в контейнере никогда не используется клиент игрок
В контейнерах же всегда используется серверный
А ты достаешь контейнер через клиент игрока
 
59
3
29
Я прошу как бы прощения, но как моя твоя не понимать, почему CLIENTPLAYER?
Ну, либо я не догоняю, либо ты сам не видишь прикола =\

Возможно я ошибаюсь и на 1.16.5 так, но насколько я знаю, в контейнере никогда не используется клиент игрок
В контейнерах же всегда используется серверный
А ты достаешь контейнер через клиент игрока
Судя по тому что я вижу это скрипт для продажи шмотья
 
Мод должен продавать товар если его нету
При визове только setItemInHand он работает идеально
Но если визвать через onTick то он берьот предмет только визуально (ну вот ето мне и нужно исправить)

Что то ищо обяснить?
 
Сверху