Ошибка при открытии сундука

Версия Minecraft
1.7.10
214
12
60
Добрый день. Пишу свой сундук. Когда открываю его, ловлю ексепшн. Не могу разобраться, где обосрался уже битый час... Прошу

P.s. Когда перезагружаю сервер, блоки, что уже были поставлены до рестарта, работаю исправно
image.png

Консоль
Код:
[22:05:28] [Netty Client IO #7/ERROR] [FML]: NetworkDispatcher exception
java.lang.RuntimeException: Timeout waiting for client thread to catch up!
    at cpw.mods.fml.client.FMLClientHandler.waitForPlayClient(FMLClientHandler.java:877) ~[FMLClientHandler.class:?]
    at cpw.mods.fml.common.FMLCommonHandler.waitForPlayClient(FMLCommonHandler.java:585) ~[FMLCommonHandler.class:?]
    at cpw.mods.fml.common.network.handshake.NetworkDispatcher.clientListenForServerHandshake(NetworkDispatcher.java:171) [NetworkDispatcher.class:?]
    at cpw.mods.fml.common.network.handshake.FMLHandshakeClientState$1.accept(FMLHandshakeClientState.java:35) ~[FMLHandshakeClientState$1.class:?]
    at cpw.mods.fml.common.network.handshake.FMLHandshakeClientState$1.accept(FMLHandshakeClientState.java:29) ~[FMLHandshakeClientState$1.class:?]
    at cpw.mods.fml.common.network.handshake.HandshakeMessageHandler.userEventTriggered(HandshakeMessageHandler.java:40) ~[HandshakeMessageHandler.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.invokeUserEventTriggered(DefaultChannelHandlerContext.java:308) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.fireUserEventTriggered(DefaultChannelHandlerContext.java:294) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.ChannelInboundHandlerAdapter.userEventTriggered(ChannelInboundHandlerAdapter.java:108) ~[ChannelInboundHandlerAdapter.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.invokeUserEventTriggered(DefaultChannelHandlerContext.java:308) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.fireUserEventTriggered(DefaultChannelHandlerContext.java:294) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.ChannelInboundHandlerAdapter.userEventTriggered(ChannelInboundHandlerAdapter.java:108) ~[ChannelInboundHandlerAdapter.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.invokeUserEventTriggered(DefaultChannelHandlerContext.java:308) [DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.fireUserEventTriggered(DefaultChannelHandlerContext.java:294) [DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelPipeline.fireUserEventTriggered(DefaultChannelPipeline.java:779) ~[DefaultChannelPipeline.class:?]
    at cpw.mods.fml.common.network.handshake.NetworkDispatcher.handlerAdded(NetworkDispatcher.java:137) ~[NetworkDispatcher.class:?]
    at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:484) ~[DefaultChannelPipeline.class:?]
    at io.netty.channel.DefaultChannelPipeline.callHandlerAdded(DefaultChannelPipeline.java:479) ~[DefaultChannelPipeline.class:?]
    at io.netty.channel.DefaultChannelPipeline.addBefore0(DefaultChannelPipeline.java:178) ~[DefaultChannelPipeline.class:?]
    at io.netty.channel.DefaultChannelPipeline.addBefore(DefaultChannelPipeline.java:163) ~[DefaultChannelPipeline.class:?]
    at io.netty.channel.DefaultChannelPipeline.addBefore(DefaultChannelPipeline.java:153) ~[DefaultChannelPipeline.class:?]
    at cpw.mods.fml.common.network.handshake.NetworkDispatcher.insertIntoChannel(NetworkDispatcher.java:124) ~[NetworkDispatcher.class:?]
    at cpw.mods.fml.common.network.handshake.NetworkDispatcher.clientToServerHandshake(NetworkDispatcher.java:129) ~[NetworkDispatcher.class:?]
    at cpw.mods.fml.common.network.internal.FMLNetworkHandler.fmlClientHandshake(FMLNetworkHandler.java:66) ~[FMLNetworkHandler.class:?]
    at net.minecraft.client.network.NetHandlerLoginClient.handleLoginSuccess(NetHandlerLoginClient.java:107) ~[NetHandlerLoginClient.class:?]
    at net.minecraft.network.login.server.S02PacketLoginSuccess.processPacket(S02PacketLoginSuccess.java:49) ~[S02PacketLoginSuccess.class:?]
    at net.minecraft.network.login.server.S02PacketLoginSuccess.processPacket(S02PacketLoginSuccess.java:66) ~[S02PacketLoginSuccess.class:?]
    at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:124) ~[NetworkManager.class:?]
    at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:379) ~[NetworkManager.class:?]
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:98) ~[SimpleChannelInboundHandler.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:173) [ByteToMessageDecoder.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:173) [ByteToMessageDecoder.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?]
    at io.netty.handler.timeout.ReadTimeoutHandler.channelRead(ReadTimeoutHandler.java:149) [ReadTimeoutHandler.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:?]
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:100) [AbstractNioByteChannel$NioByteUnsafe.class:?]
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:480) [NioEventLoop.class:?]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:447) [NioEventLoop.class:?]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:341) [NioEventLoop.class:?]
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) [SingleThreadEventExecutor$2.class:?]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]
[22:05:28] [Netty Client IO #7/INFO] [FML]: Unexpected packet during modded negotiation - assuming vanilla or keepalives : net.minecraft.network.play.server.S00PacketKeepAlive
[22:05:28] [Netty Client IO #7/INFO] [FML]: Unexpected packet during modded negotiation - assuming vanilla or keepalives : net.minecraft.network.play.server.S00PacketKeepAlive


Код тайла
Код:
public class TileEntityChestCustom extends TileEntity implements IInventory {
 
    public EnumChestType type;
    private ItemStack[] inventory;
    private String customName;
    private int time;
 
    public TileEntityChestCustom(){
        this(null);
    }
 
    public TileEntityChestCustom(EnumChestType type) {
        this.inventory = new ItemStack[this.getSizeInventory()];
        this.customName = "Inventory";
        this.time = 0;
        this.type = type;
    }
 
    @Override
    public void readFromNBT(NBTTagCompound nbtTagCompound){
        super.readFromNBT(nbtTagCompound);
 
        NBTTagList tagList = nbtTagCompound.getTagList("Inventory", 10);
        for (int i = 0; i < tagList.tagCount(); i++){
            NBTTagCompound nbtTagCompound1 = (NBTTagCompound)tagList.getCompoundTagAt(i);
            byte slot = nbtTagCompound1.getByte("Slot");
            if(slot >= 0 && slot < inventory.length){
                inventory[slot] = ItemStack.loadItemStackFromNBT(nbtTagCompound1);
            }
        }
 
        time = nbtTagCompound.getInteger("time");
    }
 
    @Override
    public  void writeToNBT(NBTTagCompound nbtTagCompound){
        super.writeToNBT(nbtTagCompound);
 
        NBTTagList tagList = new NBTTagList();
        for(int i = 0; i < inventory.length; i++){
            ItemStack itemStack = inventory[i];
            if(itemStack != null){
                NBTTagCompound nbtTagCompound1 = new NBTTagCompound();
                nbtTagCompound1.setByte("Slot", (byte) i );
                itemStack.writeToNBT(nbtTagCompound1);
                tagList.appendTag(nbtTagCompound1);
            }
        }
        nbtTagCompound.setTag("Inventory", tagList);
 
        nbtTagCompound.setInteger("time", time);
    }
 
    public void clearInventory() {
        for (int i = 0; i < this.getSizeInventory(); i++) {
            this.inventory[i] = null;
        }
    }
 
    @Override
    public int getSizeInventory() {
        return 27;
    }
 
    @Override
    public ItemStack getStackInSlot(int index) {
        if (index < 0 || index >= this.getSizeInventory())
            return null;
        return this.inventory[index];
    }
 
    @Override
    public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_)
    {
        if (this.inventory[p_70298_1_] != null)
        {
            ItemStack itemstack;
 
            if (this.inventory[p_70298_1_].stackSize <= p_70298_2_)
            {
                itemstack = this.inventory[p_70298_1_];
                this.inventory[p_70298_1_] = null;
                this.markDirty();
                return itemstack;
            }
            else
            {
                itemstack = this.inventory[p_70298_1_].splitStack(p_70298_2_);
 
                if (this.inventory[p_70298_1_].stackSize == 0)
                {
                    this.inventory[p_70298_1_] = null;
                }
 
                this.markDirty();
                return itemstack;
            }
        }
        else
        {
            return null;
        }
    }
 
    @Override
    public ItemStack getStackInSlotOnClosing(int p_70304_1_)
    {
        if (this.inventory[p_70304_1_] != null)
        {
            ItemStack itemstack = this.inventory[p_70304_1_];
            this.inventory[p_70304_1_] = null;
            return itemstack;
        }
        else
        {
            return null;
        }
    }
 
    @Override
    public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_)
    {
        this.inventory[p_70299_1_] = p_70299_2_;
 
        if (p_70299_2_ != null && p_70299_2_.stackSize > this.getInventoryStackLimit())
        {
            p_70299_2_.stackSize = this.getInventoryStackLimit();
        }
 
        this.markDirty();
    }
 
    @Override
    public String getInventoryName() { return this.customName; }
 
    @Override
    public boolean hasCustomInventoryName() { return true; }
 
    @Override
    public int getInventoryStackLimit() { return 64; }
 
    @Override
    public boolean isUseableByPlayer(EntityPlayer player) {
        return worldObj.getTileEntity(xCoord, yCoord, zCoord) == this && player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64;
    }
 
    @Override
    public void closeInventory() {}
 
    @Override
    public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) {
        return true;
    }
 
    @Override
    public Packet getDescriptionPacket() {
        NBTTagCompound tag = new NBTTagCompound();
        writeToNBT(tag);
        return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, tag);
    }
 
    @Override
    public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
        readFromNBT(pkt.func_148857_g());
    }
 
    @Override
    public void openInventory() {
        System.out.println("open in tile");
    }
 
    @Override
    public void updateEntity() {
    }
}


Код контейнера
Код:
public class ContainerChestCustom extends Container
{
    private IInventory lowerChestInventory;
    private InventoryPlayer playerInventory;
 
    public ContainerChestCustom(EntityPlayer p_i1806_1_, TileEntityChestCustom p_i1806_2_)
    {
        this.lowerChestInventory = p_i1806_2_;
        this.playerInventory = p_i1806_1_.inventory;
        p_i1806_2_.openInventory();
 
        for (int y = 0; y < 3; ++y) {
            for (int x = 0; x < 9; ++x) {
                this.addSlotToContainer(new Slot(p_i1806_2_, x + y * 9, 8 + x * 18, 17 + y * 18));
            }
        }
 
        // Player Inventory, Slot 9-35, Slot IDs 9-35
        for (int y = 0; y < 3; ++y) {
            for (int x = 0; x < 9; ++x) {
                this.addSlotToContainer(new Slot(p_i1806_1_.inventory, x + y * 9 + 9, 8 + x * 18, 84 + y * 18));
            }
        }
 
        // Player Inventory, Slot 0-8, Slot IDs 36-44
        for (int x = 0; x < 9; ++x) {
            this.addSlotToContainer(new Slot(p_i1806_1_.inventory, x, 8 + x * 18, 142));
        }
    }
 
    @Override
    public ItemStack slotClick(int p_75144_1_, int p_75144_2_, int p_75144_3_, EntityPlayer p_75144_4_) {
        System.out.println("slot " + p_75144_1_);
        return super.slotClick(p_75144_1_, p_75144_2_, p_75144_3_, p_75144_4_);
    }
 
    public boolean canInteractWith(EntityPlayer p_75145_1_)
    {
        return this.lowerChestInventory.isUseableByPlayer(p_75145_1_);
    }
 
    /**
     * Called when a player shift-clicks on a slot. You must override this or you will crash when someone does that.
     */
    public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2)
    {
        ItemStack itemstack = null;
        Slot slot = (Slot)this.inventorySlots.get(par2);
 
        if (slot != null && slot.getHasStack())
        {
            ItemStack itemstack1 = slot.getStack();
            itemstack = itemstack1.copy();
 
            if (par2 < this.playerInventory.getSizeInventory())
            {
                if (!this.mergeItemStack(itemstack1, this.playerInventory.getSizeInventory(), this.inventorySlots.size(), true))
                {
                    return null;
                }
            }
            else if (this.getSlot(1).isItemValid(itemstack1) && !this.getSlot(1).getHasStack())
            {
                if (!this.mergeItemStack(itemstack1, 1, 2, false))
                {
                    return null;
                }
            }
            else if (this.getSlot(0).isItemValid(itemstack1))
            {
                if (!this.mergeItemStack(itemstack1, 0, 1, false))
                {
                    return null;
                }
            }
            else if (this.playerInventory.getSizeInventory() <= 2 || !this.mergeItemStack(itemstack1, 2, this.playerInventory.getSizeInventory(), false))
            {
                return null;
            }
 
            if (itemstack1.stackSize == 0)
            {
                slot.putStack((ItemStack)null);
            }
            else
            {
                slot.onSlotChanged();
            }
        }
 
        return itemstack;
    }
 
    /**
     * Called when the container is closed.
     */
    public void onContainerClosed(EntityPlayer p_75134_1_)
    {
        super.onContainerClosed(p_75134_1_);
        this.lowerChestInventory.closeInventory();
    }
 
    /**
     * Return this chest container's lower chest inventory.
     */
    public IInventory getLowerChestInventory()
    {
        return this.lowerChestInventory;
    }
}
 
Назад
Сверху