jopi
Попрошайка
- 1,421
- 30
- 260
Был както мусорный код да жил, работал нормально, решил его переместить в другой пакет, переместил, убрал ошибки(импортов которые именно сверху, сам код класса я не менял)
Ну значит я такой кеккъкъ и переместил, не проверил и забил. Написали что не работает сие пространственный инвентарь, после того как я разрешил классу выбивать IOException в try-catch'е через который отправлялись запросы на чтение пакета и читался пакет, я получил в лицо порцию какашек.
Суть: Инвентарь должен показывать предметы, но появляется EOFException, до этого с этим-же не измененным кодом такого не было, что могло пойти не так?
Ну значит я такой кеккъкъ и переместил, не проверил и забил. Написали что не работает сие пространственный инвентарь, после того как я разрешил классу выбивать 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;
}
}