Hey Guys,
since a few days i am trying to display some values of my TileEntity in my GUI but i don't get it work. I only get the new values if i reopen the gui.
I tried this in my TileEntity to send the new values to the client but it doesnt work.
public void syncWithGUI(){
ByteArrayOutputStream bos = new ByteArrayOutputStream(6);
DataOutputStream outputStream = new DataOutputStream(bos);
try{
outputStream.writeInt(displayMessageID);
outputStream.writeBoolean(isUnlocked);
outputStream.writeInt(xCoord);
outputStream.writeInt(yCoord);
outputStream.writeInt(zCoord);
}catch(Exception e){}
Packet250CustomPayload packet = new Packet250CustomPayload();
//This channel is also registered in my basemodclass
packet.channel = ModInformation.CHANNEL + "C";
packet.data = bos.toByteArray();
packet.length = bos.size();
PacketDispatcher.sendPacketToAllPlayers(packet);
}
After every change on the server TileEntity i call all of these methods:
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
worldObj.markBlockForRenderUpdate(xCoord, yCoord, zCoord);
worldObj.notifyBlockChange(xCoord, yCoord, zCoord, BlockInfo.CODELOCKBLOCK_ID);
updateEntity();
syncWithGUI();
And here is my packetHandler:
public class PacketHandler implements IPacketHandler {
@Override
public void onPacketData(INetworkManager manager,
Packet250CustomPayload packet, Player player) {
if(packet.channel == ModInformation.CHANNEL + "S")
handleServerPacket(packet,player);
else if(packet.channel == ModInformation.CHANNEL + "C")
handleClientPacket(packet, player);
}
private void handleServerPacket(Packet250CustomPayload packet,Player player) {
DataInputStream inputStream = new DataInputStream(new ByteArrayInputStream(packet.data));
String inputCode;
byte buttonId;
int xcoord;
int ycoord;
int zcoord;
Entity playerEntity = (Entity)player;
TileEntity thisTileEntity;
TileEntityCodeLock thisTileEntityCodeLock;
try {
buttonId = inputStream.readByte();
inputCode = inputStream.readUTF();
xcoord = inputStream.readInt();
ycoord = inputStream.readInt();
zcoord = inputStream.readInt();
}
catch (Exception e) {
ChatMessageComponent cMS = new ChatMessageComponent().setColor(EnumChatFormatting.GREEN);
cMS.addText("Failed to read inputstream!");
((EntityPlayer)player).sendChatToPlayer(cMS);
return;
}
thisTileEntity = playerEntity.worldObj.getBlockTileEntity(xcoord, ycoord, zcoord);
if (thisTileEntity != null) {
try{
thisTileEntityCodeLock = (TileEntityCodeLock) thisTileEntity;
switch(buttonId){
case 10:
if(!thisTileEntityCodeLock.hasCode())
thisTileEntityCodeLock.setCode(inputCode, (EntityPlayer)player);
else
thisTileEntityCodeLock.toogleLock(inputCode, (EntityPlayer)player);
break;
case 11:
thisTileEntityCodeLock.tooglePulseMode(inputCode, (EntityPlayer)player);
break;
case 12:
thisTileEntityCodeLock.setCode(inputCode, (EntityPlayer)player);
break;
}
}
catch(Exception e){
ChatMessageComponent cMS = new ChatMessageComponent().setColor(EnumChatFormatting.GREEN);
cMS.addText("Failed to handle packet!");
((EntityPlayer)player).sendChatToPlayer(cMS);
}
}
}
private void handleClientPacket(Packet250CustomPayload packet, Player player){
DataInputStream inputStream = new DataInputStream(new ByteArrayInputStream(packet.data));
int displayMessageID;
boolean isUnlocked;
int xCoord;
int yCoord;
int zCoord;
try{
displayMessageID = inputStream.readInt();
isUnlocked = inputStream.readBoolean();
xCoord = inputStream.readInt();
yCoord = inputStream.readInt();
zCoord = inputStream.readInt();
World world = (World) player;
TileEntityCodeLock thisTileEntityCodeLock = (TileEntityCodeLock)world.getBlockTileEntity(xCoord, yCoord, zCoord);
thisTileEntityCodeLock.displayMessageID = displayMessageID;
System.out.println("Angekommen");
}catch(Exception e){}
}
}
I read tons of tutorials but i dont get it. Can someone help me pls?
PS: In the handleClientPacket it fails at the try block, i think the problem is the (World) and the (TileEntityCodeLock) cast?
PSS: Short explenation: I send packets by the gui to the server tileentity which does some stuff and should update its fields on the client side that the gui can display the new values.