- 65
- 1
- 2
Проблема такова что 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();
}*/
}