Перемещение предметов в графическом интерфейсе Minecraft ForgeJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Перемещение предметов в графическом интерфейсе Minecraft Forge

Сообщение Anonymous »

Я пытаюсь создать графический интерфейс, аналогичный интерфейсу плагина spigot в forge 1.20.2, для сайдмода Pixelmon. У меня есть весь код, все работает, но у меня возникла проблема, которую я не могу решить. Я создал графический интерфейс и прикрепил метод щелчка, который я переопределяю из его исходного класса AbstractContainerMenu. Обычно, когда вы нажимаете на элемент в графическом интерфейсе, он не позволяет вам захватить элемент, но если вы нажмете кнопку «Далее» или «Назад», он позволит вам захватить элемент. элемент кнопки и дублируйте его, а также полностью удалите то, что сейчас находится в инвентаре вашего игрока. Мне бы очень пригодилась помощь, поскольку я понятия не имею, где я ошибся.
public void clicked(int slotId, int dragType, ClickType clickType, Player playerEntity) {
if (!playerEntity.level().isClientSide) {
if (slotId >= this.container.getContainerSize())
return;
ItemStack clickedItem = this.container.getItem(slotId);
GUIConfigManager.GUIConfig guiConfig = this.guiConfigManager.guiConfigs.get(this.guiConfigKey);
ItemStack nextButtonItemStack = (guiConfig.nextButton != null) ? createButtonStack(guiConfig.nextButton) : ItemStack.EMPTY;
ItemStack backButtonItemStack = (guiConfig.backButton != null) ? createButtonStack(guiConfig.backButton) : ItemStack.EMPTY;
boolean isNextButton = (!nextButtonItemStack.isEmpty() && ItemStack.isSameItemSameTags(clickedItem, nextButtonItemStack) && this.currentPage < this.totalPages);
boolean isBackButton = (!backButtonItemStack.isEmpty() && ItemStack.isSameItemSameTags(clickedItem, backButtonItemStack) && this.currentPage > 1);
if (isNextButton) {
this.currentPage++;
displayPage(this.currentPage);
return;
}
if (isBackButton) {
this.currentPage--;
displayPage(this.currentPage);
return;
}
if (clickedItem.hasTag() && clickedItem.getTag().contains("SetIdentifier")) {
String setIdentifier = clickedItem.getTag().getString("SetIdentifier");
this.player.closeContainer();
SimpleMenuProvider simpleMenuProvider = new SimpleMenuProvider((id, inventory, player) -> new CustomSetChestMenu(id, inventory, this.player, this.guiConfigManager, this.setsConfigManager, setIdentifier), Component.literal(guiConfig.guiName));
this.player.openMenu(simpleMenuProvider);
return;
}
ItemStack mainMenuItemStack = (guiConfig.mainMenuItem != null) ? createMainMenuItemStack(guiConfig) : ItemStack.EMPTY;
boolean isMainMenuButton = (!mainMenuItemStack.isEmpty() && ItemStack.isSameItemSameTags(clickedItem, mainMenuItemStack));
if (isMainMenuButton) {
this.player.closeContainer();
SimpleMenuProvider simpleMenuProvider = new SimpleMenuProvider((id, inventory, player) -> new CustomChestMenu(id, inventory, this.player, this.guiConfigManager, this.setsConfigManager, "main"), Component.literal("Main GUI"));
this.player.openMenu(simpleMenuProvider);
return;
}
if (clickType == ClickType.PICKUP || clickType == ClickType.QUICK_MOVE)
return;
}
super.clicked(slotId, dragType, clickType, playerEntity);
}

public ItemStack quickMoveStack(Player player, int index) {
return ItemStack.EMPTY;
}

При необходимости я могу предоставить дополнительную часть кода из класса, но именно в этом методе возникает ошибка.
У меня также есть эта ошибка, происходит в консоли при нажатии на слот в инвентаре игрока или вообще на любой слот за пределами реального графического интерфейса.
[20Mar2024 00:42:16.385] [Server thread/ERROR] [net.minecraft.network.protocol.PacketUtils/]: Failed to handle packet net.minecraft.network.protocol.game.ServerboundContainerClickPacket@2c62ee95, suppressing error
java.lang.IndexOutOfBoundsException: Index 59 out of bounds for length 54
at jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) ~[?:?] {}
at jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) ~[?:?] {}
at jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266) ~[?:?] {}
at java.util.Objects.checkIndex(Objects.java:361) ~[?:?] {re:mixin}
at java.util.ArrayList.get(ArrayList.java:427) ~[?:?] {re:mixin,re:computing_frames}
at net.minecraft.core.NonNullList.get(NonNullList.java:47) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading}
at net.minecraft.world.inventory.AbstractContainerMenu.m_38853_(AbstractContainerMenuMixin.java:287) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixins.arclight.core.json:world.inventory.AbstractContainerMenuMixin,pl:mixin:A}
at net.minecraft.server.network.ServerGamePacketListenerImpl.m_5914_(ServerPlayNetHandlerMixin.java:3076) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixins.arclight.core.json:network.ServerPlayNetHandlerMixin,pl:mixin:APP:mixins.arclight.impl.forge.optimization.json:network.ServerGamePacketListenerImplMixin_Optimize,pl:mixin:A}
at net.minecraft.network.protocol.game.ServerboundContainerClickPacket.m_5797_(ServerboundContainerClickPacket.java:56) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading}
at net.minecraft.network.protocol.game.ServerboundContainerClickPacket.m_5797_(ServerboundContainerClickPacket.java:12) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading}
at net.minecraft.network.protocol.PacketUtils.md8880c7$lambda$ensureRunningOnSameThread$0$0(PacketThreadUtilMixin.java:537) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading,pl:mixin:APP:mixins.arclight.core.json:network.protocol.PacketThreadUtilMixin,pl:mixin:A}
at net.minecraft.server.TickTask.run(TickTask.java:18) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading}
at net.minecraft.util.thread.BlockableEventLoop.m_6367_(BlockableEventLoop.java:156) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading,pl:accesstransformer:B}
at net.minecraft.util.thread.ReentrantBlockableEventLoop.m_6367_(ReentrantBlockableEventLoop.java:23) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading}
at net.minecraft.server.MinecraftServer.m_6367_(MinecraftServerMixin.java:765) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixins.arclight.core.json:server.MinecraftServerMixin,pl:mixin:A}
at net.minecraft.server.MinecraftServer.m_6367_(MinecraftServerMixin.java:160) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixins.arclight.core.json:server.MinecraftServerMixin,pl:mixin:A}
at net.minecraft.util.thread.BlockableEventLoop.m_7245_(BlockableEventLoop.java:130) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading,pl:accesstransformer:B}
at net.minecraft.server.MinecraftServer.m_129961_(MinecraftServerMixin.java:748) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixins.arclight.core.json:server.MinecraftServerMixin,pl:mixin:A}
at net.minecraft.server.MinecraftServer.m_7245_(MinecraftServerMixin.java:742) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixins.arclight.core.json:server.MinecraftServerMixin,pl:mixin:A}
at net.minecraft.util.thread.BlockableEventLoop.m_18699_(BlockableEventLoop.java:115) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading,pl:accesstransformer:B}
at net.minecraft.server.MinecraftServer.m_130012_(MinecraftServerMixin.java:727) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixins.arclight.core.json:server.MinecraftServerMixin,pl:mixin:A}
at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServerMixin.java:2081) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixins.arclight.core.json:server.MinecraftServerMixin,pl:mixin:A}
at net.minecraft.server.MinecraftServer.m_206580_(MinecraftServerMixin.java:249) ~[server-1.20.2-20230921.100330-srg.jar%23167!/:?] {re:classloading,pl:accesstransformer:B,pl:mixin:APP:mixins.arclight.core.json:server.MinecraftServerMixin,pl:mixin:A}
at java.lang.Thread.run(Thread.java:840) ~[?:?] {re:mixin,re:mixin}


Подробнее здесь: https://stackoverflow.com/questions/781 ... m-movement
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»