EOFException выбивает при открытии инвентаря на подобии AppliedEnergetics.

Статус
В этой теме нельзя размещать новые ответы.

jopi

Попрошайка
1,421
30
260
Был както мусорный код да жил, работал нормально, решил его переместить в другой пакет, переместил, убрал ошибки(импортов которые именно сверху, сам код класса я не менял)
Ну значит я такой кеккъкъ и переместил, не проверил и забил. Написали что не работает сие пространственный инвентарь, после того как я разрешил классу выбивать IOException в try-catch'е через который отправлялись запросы на чтение пакета и читался пакет, я получил в лицо порцию какашек.
Суть: Инвентарь должен показывать предметы, но появляется EOFException, до этого с этим-же не измененным кодом такого не было, что могло пойти не так?
NetworkedIMEI:
package tchestplate.util;
import cpw.mods.fml.common.network.Player;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

import net.minecraft.network.packet.Packet;
import tchestplate.blocks.tile.TileBaseBlockME;
import tchestplate.packets.PacketLA_Inv;
import tchestplate.util.darknetwork.ILANetworkInventory;
import tchestplate.util.darknetwork.LAInternalInventory;
import tchestplate.util.darknetwork.LAItemStack;

public class NetworkedIMEI implements ILANetworkInventory {
    boolean isValid = false;
    public TileBaseBlockME realInv;
    public TileBaseBlockME machine;
    public Player targetPlayer;
    LAItemStack[] list1;

    public boolean checkValid() {
        return true;
    }

    void addPacket(PacketLA_Inv p) {
        try {
            ByteArrayInputStream bytes = new ByteArrayInputStream(p.data);
            DataInputStream data = new DataInputStream(bytes);
            this.isValid = data.readBoolean();
            byte items = data.readByte();
            if (this.isValid && items > 0) {
                DataInputStream idata = new DataInputStream(new GZIPInputStream(data));
                System.out.println("NETWORKEDIMEI: addPacket");
                for (int x = 0; x < items; ++x) {
                    byte slot = idata.readByte();
                    boolean flag = idata.readBoolean();
                    this.list1[slot] = flag ? LAItemStack.loadItemStackFromPacket(idata) : null;
                }
            }
        } catch (IOException var9) {
            var9.printStackTrace();
        }

    }

    public void readPacket(PacketLA_Inv p) {
        this.addPacket(p);
        System.out.println("NETWORKEDIMEI: readPacket");
    }

    public Packet getRequestPacket() throws IOException {
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        DataOutputStream data = new DataOutputStream(bytes);

        try {
            data.writeInt(1);
            //data.writeUTF("1");
            System.out.println("NETWORKEDIMEI: getRequestPacket");
        } catch (IOException var4) {
            var4.printStackTrace();
        }

        return (new PacketLA_Inv(bytes.toByteArray())).makePacket();
    }
    
    public Packet getDataPacketLA() throws IOException {
        LAInternalInventory realCell = this.realInv.provideCell();
        if (realCell == null) {
            System.out.println("NETWORKEDIMEI: getDataPacketLA - realCell = null");
            return null;
        } else {
            LAItemStack[] ll = realCell.getAvaleableLA();
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            DataOutputStream data = new DataOutputStream(bytes);

            try {
                data.writeBoolean(this.isValid = true);
                data.writeByte(ll.length);
                if (ll.length > 0) {
                    GZIPOutputStream var9 = new GZIPOutputStream(bytes);
                    DataOutputStream var10 = new DataOutputStream(var9);

                    for (int x = 0; x < ll.length; ++x) {
                        var10.writeByte(x);
                        if (ll[x] == null) {
                            var10.writeBoolean(false);
                        } else {
                            var10.writeBoolean(true);
                            ll[x].writeToPacket(var10);
                        }
                    }

                    var9.close();
                }
            } catch (IOException var8) {
                var8.printStackTrace();
            }

            byte[] var91 = bytes.toByteArray();
            Packet var101 = (new PacketLA_Inv(Arrays.copyOf(var91, var91.length))).makePacket();
            var101.isChunkDataPacket = false;
            return var101;
        }
    }

    public LAInternalInventory provideCell() {
        return !this.checkValid() ? null : (this.realInv != null ? this.realInv.provideCell() : null);
    }

    @SideOnly(Side.CLIENT)
    public LAItemStack[] getAvailableItemsLA() {
        LAItemStack[] is = new LAItemStack[this.realInv.provideCell().getSize()];
        if (this.list1 != null) {
            is = (LAItemStack[]) ((LAItemStack[]) ((LAItemStack[]) ((LAItemStack[]) ((LAItemStack[]) ((LAItemStack[]) ((LAItemStack[]) ((LAItemStack[]) ((LAItemStack[]) Arrays.copyOf(this.list1, this.list1.length)))))))));
        }

        return is;
    }

    public void setMETileBase(TileBaseBlockME te) {
        this.realInv = te;
        this.list1 = new LAItemStack[te.provideCell().getSize()];
    }

    public LAItemStack getStackInSlot(int var1) {
        return null;
    }

    public void setInventorySlotContents(int invSlot, LAItemStack current) {
    }

    public TileBaseBlockME getMETileBase() {
        return null;
    }
}
Java:
package tchestplate.blocks.container;

import cpw.mods.fml.common.network.PacketDispatcher;
import cpw.mods.fml.common.network.Player;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.IOException;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.IInventory;
import tchestplate.blocks.container.MEContainerBase;
import tchestplate.blocks.tile.TileBlockTraderController;
import tchestplate.slots.SlotME;
import tchestplate.slots.SlotPlayerHotBar;
import tchestplate.slots.SlotPlayerInv;
import tchestplate.util.NetworkedIMEI;
import tchestplate.util.darknetwork.TinyUtils;

public class ContainerTraderController extends MEContainerBase {
    public NetworkedIMEI imeiinv;
    TileBlockTraderController tileentity;
    private int dualCountConnected;

    public ContainerTraderController(IInventory inventoryPlayer, TileBlockTraderController tileentity) {
        super(((InventoryPlayer) inventoryPlayer).player, tileentity);
        this.tileentity = tileentity;
        InventoryPlayer iplayer = (InventoryPlayer) inventoryPlayer;
        this.imeiinv = new NetworkedIMEI();
        this.imeiinv.targetPlayer = (Player) ((InventoryPlayer) inventoryPlayer).player;
        this.imeiinv.setMETileBase(tileentity);
        int off = 0;

        for (int var71 = 0; var71 < 7; ++var71) {
            for (int j = 0; j < 9; ++j) {
                this.addSlotToContainer(new SlotME(this.imeiinv, off++, 8 + j * 18, var71 * 18 + 8 + 18));
            }
        }

        this.bindPlayerInventory(iplayer);
        if (TinyUtils.isClient()) {
            try {
                //Здесь отправляется быдло-пакет который ломается и кидает EOFException через imeiinv
                PacketDispatcher.sendPacketToServer(this.imeiinv.getRequestPacket());
            } catch (IOException var7) {
                var7.printStackTrace();
            }
        }

    }

    public boolean canInteractWith(EntityPlayer player) {
        return this.imeiinv.realInv.isUseableByPlayer(player);
    }

    protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) {
        int i;
        for (i = 0; i < 3; ++i) {
            for (int j = 0; j < 9; ++j) {
                this.addSlotToContainer(new SlotPlayerInv(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 166 + i * 18));
            }
        }

        for (i = 0; i < 9; ++i) {
            this.addSlotToContainer(new SlotPlayerHotBar(inventoryPlayer, i, 8 + i * 18, 224));
        }

    }

    public void updateClient() {
        try {
            PacketDispatcher.sendPacketToPlayer(this.imeiinv.getDataPacketLA(), (Player) this.getPlayer());
        } catch (IOException var2) {
            var2.printStackTrace();
        }

    }

    public void addCraftingToCrafters(ICrafting par1ICrafting) {
        super.addCraftingToCrafters(par1ICrafting);
        par1ICrafting.sendProgressBarUpdate(this, 0, this.tileentity.triggercount);
    }

    public void detectAndSendChanges() {
        super.detectAndSendChanges();

        for (int i = 0; i < super.crafters.size(); ++i) {
            ICrafting icrafting = (ICrafting) super.crafters.get(i);
            if (this.dualCountConnected != this.tileentity.triggercount) {
                icrafting.sendProgressBarUpdate(this, 0, this.tileentity.triggercount);
            }
        }

        this.dualCountConnected = this.tileentity.triggercount;
    }

    @SideOnly(Side.CLIENT)
    public void updateProgressBar(int par1, int par2) {
        if (par1 == 0) {
            this.tileentity.triggercount = par2;
        }

    }

    public NetworkedIMEI GetNetworkIME() {
        return this.imeiinv;
    }
}
Java:
package tchestplate.packets;

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;

import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteArrayDataOutput;

import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.common.network.PacketDispatcher;
import cpw.mods.fml.common.network.Player;
import cpw.mods.fml.relauncher.Side;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.Container;
import tchestplate.blocks.container.MEContainerBase;
import tchestplate.blocks.gui.LAGui;

public class PacketLA_Inv extends PacketBase {
    public byte[] data;
    private int len;

    public PacketLA_Inv() {
    }

    public PacketLA_Inv(byte[] data) {
        this.data = data;
    }

    protected void write(ByteArrayDataOutput out) {
        out.write(this.data);
    }

    protected void read(ByteArrayDataInput in) throws ProtocolException {
        in.readFully(this.data = new byte[this.len]);
    }

    protected void execute(EntityPlayer player, Side side) throws ProtocolException {
        if (side.isServer()) {
            EntityPlayerMP c211111 = (EntityPlayerMP) player;
            Container nmec = c211111.openContainer;
            if (nmec != null && nmec instanceof MEContainerBase) {
                DataInputStream stream = new DataInputStream(new ByteArrayInputStream(this.data));

                try {
                    int var71 = stream.readInt();
                    stream.readUTF();
                } catch (Exception var8) {
                    System.out.println("packetla_inv: execute - var71, var8 excepted");
                    //тут кстэ тоже ошибка вылетает
                    var8.printStackTrace();
                }

                try {
                    PacketDispatcher.sendPacketToPlayer(((MEContainerBase) nmec).GetNetworkIME().getDataPacketLA(), (Player) player);
                } catch (IOException var7) {
                    var7.printStackTrace();
                }
            } else {
                System.out.println("packetla_inv: execute - nmec = null | nmec !instanceof mecontainerbase.class");
            }
        } else {
            MEContainerBase c2111111 = this.getContainer();
            if (c2111111 != null && c2111111 instanceof MEContainerBase) {
                c2111111.GetNetworkIME().readPacket(this);
                c2111111.update();
            }
        }

    }

    public MEContainerBase getContainer() {
        GuiScreen gs = FMLClientHandler.instance().getClient().currentScreen;
        return gs != null && gs instanceof LAGui ? ((LAGui) gs).gci : null;
    }

    protected void length(int length) {
        this.len = length;
    }
}
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху