Improved diamond pipe client synch.

This commit is contained in:
SirSengir 2012-05-30 12:27:30 +02:00
parent f4a018c286
commit 9077e9dedf
5 changed files with 32 additions and 138 deletions

View file

@ -2,6 +2,7 @@ package net.minecraft.src.buildcraft.core;
import net.minecraft.src.Container; import net.minecraft.src.Container;
import net.minecraft.src.GuiContainer; import net.minecraft.src.GuiContainer;
import net.minecraft.src.IInventory;
import net.minecraft.src.ItemStack; import net.minecraft.src.ItemStack;
import net.minecraft.src.OpenGlHelper; import net.minecraft.src.OpenGlHelper;
import net.minecraft.src.RenderHelper; import net.minecraft.src.RenderHelper;
@ -84,6 +85,27 @@ public abstract class GuiAdvancedInterface extends GuiBuildCraft {
return stack; return stack;
} }
} }
/**
* More dynamic slot displaying an inventory stack at specified position in the passed IInventory
*/
public class IInventorySlot extends AdvancedSlot {
private IInventory tile;
private int slot;
public IInventorySlot(int x, int y, IInventory tile, int slot) {
super(x, y);
this.tile = tile;
this.slot = slot;
}
@Override
public ItemStack getItemStack() {
return tile.getStackInSlot(slot);
}
}
public AdvancedSlot[] slots; public AdvancedSlot[] slots;

View file

@ -38,11 +38,7 @@ public class GuiDiamondPipe extends GuiAdvancedInterface {
for(int k = 0; k < 6; k++) for(int k = 0; k < 6; k++)
for(int j1 = 0; j1 < 9; j1++) { for(int j1 = 0; j1 < 9; j1++) {
int id = k * 9 + j1; int id = k * 9 + j1;
slots [id] = new ItemSlot(8 + j1 * 18, 18 + k * 18); slots [id] = new IInventorySlot(8 + j1 * 18, 18 + k * 18, filterInventory, j1 + k * 9);
ItemStack stack = filterInventory.getStackInSlot(j1 + k * 9);
if (stack != null)
((ItemSlot) slots[id]).stack = stack.copy();
} }
} }
@ -78,10 +74,10 @@ public class GuiDiamondPipe extends GuiAdvancedInterface {
int position = getSlotAtLocation (i - cornerX, j - cornerY); int position = getSlotAtLocation (i - cornerX, j - cornerY);
ItemSlot slot = null; IInventorySlot slot = null;
if (position != -1) if (position != -1)
slot = (ItemSlot) slots[position]; slot = (IInventorySlot) slots[position];
if (slot != null) { if (slot != null) {
ItemStack playerStack = mc.thePlayer.inventory.getItemStack(); ItemStack playerStack = mc.thePlayer.inventory.getItemStack();
@ -92,7 +88,6 @@ public class GuiDiamondPipe extends GuiAdvancedInterface {
else else
newStack = null; newStack = null;
slot.stack = newStack;
filterInventory.setInventorySlotContents(position, newStack); filterInventory.setInventorySlotContents(position, newStack);
if(APIProxy.isRemote()) { if(APIProxy.isRemote()) {

View file

@ -156,6 +156,7 @@ public class PacketHandler implements IPacketHandler {
* @param packet * @param packet
*/ */
private void onDiamondContents(PacketUpdate packet) { private void onDiamondContents(PacketUpdate packet) {
World world = ModLoader.getMinecraftInstance().theWorld; World world = ModLoader.getMinecraftInstance().theWorld;
if(!world.blockExists(packet.posX, packet.posY, packet.posZ)) if(!world.blockExists(packet.posX, packet.posY, packet.posZ))

View file

@ -65,6 +65,9 @@ public class TilePacketWrapper {
} }
} }
public PacketPayload toPayload(Object obj) {
return toPayload(0, 0, 0, new Object [] {obj});
}
public PacketPayload toPayload(int x, int y, int z, Object obj) { public PacketPayload toPayload(int x, int y, int z, Object obj) {
return toPayload(x, y, z, new Object [] {obj}); return toPayload(x, y, z, new Object [] {obj});
} }
@ -148,133 +151,4 @@ public class TilePacketWrapper {
} }
} }
/*
public Packet230ModLoader toPacket (TileEntity tile) {
Packet230ModLoader packet = new Packet230ModLoader();
packet.modId = mod_BuildCraftCore.instance.getId();
packet.isChunkDataPacket = true;
packet.packetType = packetType.ordinal();
int sizeF = 0, sizeS = 0;
for (int i = 0; i < rootMappings.length; ++i) {
int [] size = rootMappings [i].getSize();
sizeF += size [1];
sizeS += size [2];
}
packet.dataFloat = new float [sizeF];
packet.dataString = new String [sizeS];
ByteBuffer buf = new ByteBuffer();
buf.writeInt(tile.xCoord);
buf.writeInt(tile.yCoord);
buf.writeInt(tile.zCoord);
try {
rootMappings [0].setData(tile, buf, packet.dataFloat,
packet.dataString, new Indexes(0, 0));
packet.dataInt = buf.readIntArray();
return packet;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public Packet230ModLoader toPacket (int x, int y, int z, Object obj) {
return toPacket(x, y, z, new Object [] {obj});
}
public Packet230ModLoader toPacket (int x, int y, int z, Object [] obj) {
Packet230ModLoader packet = new Packet230ModLoader();
packet.modId = mod_BuildCraftCore.instance.getId();
packet.isChunkDataPacket = true;
packet.packetType = packetType.ordinal();
int sizeF = 0, sizeS = 0;
for (int i = 0; i < rootMappings.length; ++i) {
int [] size = rootMappings [i].getSize();
sizeF += size [1];
sizeS += size [2];
}
packet.dataFloat = new float [sizeF];
packet.dataString = new String [sizeS];
ByteBuffer buf = new ByteBuffer();
buf.writeInt(x);
buf.writeInt(y);
buf.writeInt(z);
try {
Indexes ind = new Indexes(0, 0);
for (int i = 0; i < rootMappings.length; ++i) {
rootMappings [i].setData(obj [i], buf, packet.dataFloat,
packet.dataString, ind);
}
packet.dataInt = buf.readIntArray();
return packet;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}*/
/*
public void updateFromPacket (Object obj, Packet230ModLoader packet) {
updateFromPacket(new Object [] {obj}, packet);
}
public void updateFromPacket (Object [] obj, Packet230ModLoader packet) {
try {
ByteBuffer buf = new ByteBuffer();
buf.writeIntArray(packet.dataInt);
buf.readInt();
buf.readInt();
buf.readInt();
Indexes ind = new Indexes(0, 0);
for (int i = 0; i < rootMappings.length; ++i)
rootMappings [i].updateFromData(obj [i], buf, packet.dataFloat,
packet.dataString, ind);
packet.dataInt = buf.readIntArray();
} catch (Exception e) {
e.printStackTrace();
}
}
public void updateFromPacket (TileEntity tile, Packet230ModLoader packet) {
try {
ByteBuffer buf = new ByteBuffer();
buf.writeIntArray(packet.dataInt);
buf.readInt();
buf.readInt();
buf.readInt();
rootMappings [0].updateFromData(tile, buf, packet.dataFloat,
packet.dataString, new Indexes(0, 0));
packet.dataInt = buf.readIntArray();
} catch (Exception e) {
e.printStackTrace();
}
}*/
} }

View file

@ -179,6 +179,7 @@ public class PipeLogicDiamond extends PipeLogic {
return null; return null;
} }
/** SERVER SIDE **/
public Packet getContentsPacket(int num) { public Packet getContentsPacket(int num) {
PacketStack stacks = new PacketStack(); PacketStack stacks = new PacketStack();
stacks.num = num; stacks.num = num;
@ -192,10 +193,11 @@ public class PipeLogicDiamond extends PipeLogic {
stacks.dmg [j] = items [j + num * 9].getItemDamage(); stacks.dmg [j] = items [j + num * 9].getItemDamage();
} }
return new PacketUpdate(PacketIds.DIAMOND_PIPE_CONTENTS, networkPacket.toPayload(xCoord, yCoord, zCoord, stacks)).getPacket(); return new PacketUpdate(PacketIds.DIAMOND_PIPE_CONTENTS, xCoord, yCoord, zCoord, networkPacket.toPayload(stacks)).getPacket();
} }
/** CLIENT SIDE **/
public void handleContentsPacket (PacketUpdate packet) { public void handleContentsPacket (PacketUpdate packet) {
PacketStack stacks = new PacketStack(); PacketStack stacks = new PacketStack();