Всем доброго.
Решил добавить аналог рюкзаков - предмет с инвентарем. Написал простенькие инвентарь, контейнер и гуи, чтобы проверить. При ПКМ предметом интерфейс открывается, мышка без предметов бегает по слотам нормально. Стоит навести курсор на слот, когда выбран предмет, и происходит падение игры. Все коды вместе с логом привел ниже. Нужна помощь.
Спасибо.
Инвентарь:
Метод "[font=Monaco, Consolas, Courier, monospace]EmUtils.inventory.decrStackSize(i, j, this.inventory);"[/font]
Контейнер:
Гуи:
Краш-лог:
Решил добавить аналог рюкзаков - предмет с инвентарем. Написал простенькие инвентарь, контейнер и гуи, чтобы проверить. При ПКМ предметом интерфейс открывается, мышка без предметов бегает по слотам нормально. Стоит навести курсор на слот, когда выбран предмет, и происходит падение игры. Все коды вместе с логом привел ниже. Нужна помощь.
Спасибо.
Инвентарь:
Код:
public class InventoryBag implements IInventory{
public int invSize = 72;
public ItemStack[] inventory = new ItemStack[invSize];
@Override
public int getSizeInventory()
{
return this.invSize;
}
@Override
public ItemStack getStackInSlot(int slot)
{
return this.inventory[slot];
}
@Override
public ItemStack decrStackSize(int i, int j)
{
return EmUtils.inventory.decrStackSize(i, j, this.inventory);
}
@Override
public ItemStack getStackInSlotOnClosing(int i)
{
return this.inventory[i];
}
@Override
public void setInventorySlotContents(int i, ItemStack itemstack)
{
this.inventory[i] = itemstack;
}
@Override
public String getInvName()
{
return EmUtils.chat.translateToLocal("inventory.bag.name");
}
@Override
public boolean isInvNameLocalized()
{
return true;
}
@Override
public int getInventoryStackLimit()
{
return 64;
}
@Override
public void onInventoryChanged()
{
}
@Override
public boolean isUseableByPlayer(EntityPlayer entityplayer)
{
return true;
}
@Override
public void openChest() {}
@Override
public void closeChest() {}
@Override
public boolean isStackValidForSlot(int i, ItemStack itemstack)
{
return true;
}
}
Метод "[font=Monaco, Consolas, Courier, monospace]EmUtils.inventory.decrStackSize(i, j, this.inventory);"[/font]
Код:
public static ItemStack decrStackSize(int par1, int par2, ItemStack[] inv)
{
if (inv[par1] != null)
{
ItemStack itemstack;
if (inv[par1].stackSize <= par2)
{
itemstack = inv[par1];
inv[par1] = null;
return itemstack;
}
else
{
itemstack = inv[par1].splitStack(par2);
if (inv[par1].stackSize == 0)
{
inv[par1] = null;
}
return itemstack;
}
}
else
{
return null;
}
}
Контейнер:
Код:
package ru.Wayfarer.MagicMod.container;
import ru.Wayfarer.MagicMod.inventory.InventoryBag;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.tileentity.TileEntityFurnace;
public class ContainerBag extends Container{
public InventoryBag inventory = new InventoryBag();
public ContainerBag(EntityPlayer player)
{
int yOffset = - 90; // Смещение слотов сумки по вертикали
int slotId = 0; // Используется для нумерации слотов сумки
// Добавляем 4 ряда слотов по 9 шт в каждом из нашей сумки
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 9; ++j)
{
this.addSlotToContainer(new Slot(inventory, slotId, 8 + j * 18, 84 + i * 18 + yOffset));
slotId ++;
}
}
// Стандартный инвентарь игрока
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 9; ++j)
{
this.addSlotToContainer(new Slot(player.inventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
}
}
for (int i = 0; i < 9; ++i)
{
this.addSlotToContainer(new Slot(player.inventory, i, 8 + i * 18, 142));
}
}
@Override
public boolean canInteractWith(EntityPlayer entityplayer) {
// TODO Auto-generated method stub
return false;
}
public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int slotId)
{
return null;
}
}
Гуи:
Код:
public class GuiBag extends GuiContainer{
public GuiBag(EntityPlayer player)
{
super(new ContainerBag(player));
}
@Override
protected void drawGuiContainerBackgroundLayer(float f, int i, int j)
{
}
}
Краш-лог:
Код:
2017-02-12 00:57:40 [INFO] [STDERR] net.minecraft.util.ReportedException: Ticking memory connection
2017-02-12 00:57:40 [INFO] [STDERR] at net.minecraft.network.NetworkListenThread.networkTick(NetworkListenThread.java:60)
2017-02-12 00:57:40 [INFO] [STDERR] at net.minecraft.server.integrated.IntegratedServerListenThread.networkTick(IntegratedServerListenThread.java:109)
2017-02-12 00:57:40 [INFO] [STDERR] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:677)
2017-02-12 00:57:40 [INFO] [STDERR] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:573)
2017-02-12 00:57:40 [INFO] [STDERR] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:127)
2017-02-12 00:57:40 [INFO] [STDERR] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:470)
2017-02-12 00:57:40 [INFO] [STDERR] at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16)
2017-02-12 00:57:40 [INFO] [STDERR] Caused by: java.lang.IndexOutOfBoundsException: Index: 56, Size: 45
2017-02-12 00:57:40 [INFO] [STDERR] at java.util.ArrayList.rangeCheck(ArrayList.java:635)
2017-02-12 00:57:40 [INFO] [STDERR] at java.util.ArrayList.get(ArrayList.java:411)
2017-02-12 00:57:40 [INFO] [STDERR] at net.minecraft.inventory.Container.slotClick(Container.java:302)
2017-02-12 00:57:40 [INFO] [STDERR] at net.minecraft.network.NetServerHandler.handleWindowClick(NetServerHandler.java:897)
2017-02-12 00:57:40 [INFO] [STDERR] at net.minecraft.network.packet.Packet102WindowClick.processPacket(Packet102WindowClick.java:46)
2017-02-12 00:57:40 [INFO] [STDERR] at net.minecraft.network.MemoryConnection.processReadPackets(MemoryConnection.java:89)
2017-02-12 00:57:40 [INFO] [STDERR] at net.minecraft.network.NetServerHandler.networkTick(NetServerHandler.java:134)
2017-02-12 00:57:40 [INFO] [STDERR] at net.minecraft.network.NetworkListenThread.networkTick(NetworkListenThread.java:53)
2017-02-12 00:57:40 [INFO] [STDERR] ... 6 more
2017-02-12 00:57:40 [SEVERE] [Minecraft-Server] Encountered an unexpected exception ReportedException
net.minecraft.util.ReportedException: Ticking memory connection
at net.minecraft.network.NetworkListenThread.networkTick(NetworkListenThread.java:60)
at net.minecraft.server.integrated.IntegratedServerListenThread.networkTick(IntegratedServerListenThread.java:109)
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:677)
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:573)
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:127)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:470)
at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16)
Caused by: java.lang.IndexOutOfBoundsException: Index: 56, Size: 45
at java.util.ArrayList.rangeCheck(ArrayList.java:635)
at java.util.ArrayList.get(ArrayList.java:411)
at net.minecraft.inventory.Container.slotClick(Container.java:302)
at net.minecraft.network.NetServerHandler.handleWindowClick(NetServerHandler.java:897)
at net.minecraft.network.packet.Packet102WindowClick.processPacket(Packet102WindowClick.java:46)
at net.minecraft.network.MemoryConnection.processReadPackets(MemoryConnection.java:89)
at net.minecraft.network.NetServerHandler.networkTick(NetServerHandler.java:134)
at net.minecraft.network.NetworkListenThread.networkTick(NetworkListenThread.java:53)
... 6 more
2017-02-12 00:57:40 [SEVERE] [Minecraft-Server] This crash report has been saved to: M:\Игры\Minecraft\1.5.2\.Моды и текстуры\forge-1.5.2-7.8.1.737-src2\forge\mcp\jars\.\crash-reports\crash-2017-02-12_00.57.40-server.txt
2017-02-12 00:57:40 [INFO] [Minecraft-Server] Stopping server
2017-02-12 00:57:40 [INFO] [Minecraft-Server] Saving players
2017-02-12 00:57:40 [INFO] [Minecraft-Server] Saving worlds
2017-02-12 00:57:40 [INFO] [Minecraft-Server] Saving chunks for level 'Новый мир'/Overworld
2017-02-12 00:57:41 [INFO] [Minecraft-Server] Saving chunks for level 'Новый мир'/Nether
2017-02-12 00:57:41 [INFO] [Minecraft-Server] Saving chunks for level 'Новый мир'/The End
2017-02-12 00:57:43 [INFO] [ForgeModLoader] Unloading dimension 0
2017-02-12 00:57:43 [INFO] [ForgeModLoader] Unloading dimension -1
2017-02-12 00:57:43 [INFO] [ForgeModLoader] Unloading dimension 1
2017-02-12 00:57:43 [INFO] [ForgeModLoader] The state engine was in incorrect state SERVER_STOPPING and forced into state SERVER_STOPPED. Errors may have been discarded.