Jump to content

MagicHaze

Members
  • Posts

    6
  • Joined

  • Last visited

Converted

  • Gender
    Undisclosed
  • Personal Text
    I am new!

MagicHaze's Achievements

Tree Puncher

Tree Puncher (2/8)

0

Reputation

  1. Thanks for help, i got i now. I also figured out how to send packets from server to client. But directly got an other problem at the following code. If i change the meta from my tielentity (or i call any method which would do this) the displayOutputMessage wont get updated (only if the meta wasnt changed). If i use a field in my tielentity which stores if the block is locked (no redstonesignal) and use this field in my isProvidingStrongPower() method (method of the Block class - if i would call it from my tileentity the strings also wouldnt get updated) to change the meta and also directly provide power the fronticon only changes if my block is connected to a redstonewire or something else with can get a signal. if(buttonID == 10){ if(this.code.equals(code)){ isLocked = isLocked == true ? false : true; this.displayOutputMessage = isLocked == true ? "Signal enabled!" : "Signal disabled!"; } else{ this.displayOutputMessage = "Wrong Code!"; } } else if(buttonID == 11){ if(this.code.equals(code)){ this.isSignalStatic = this.isSignalStatic == true ? false : true; this.displayOutputMessage = this.isSignalStatic == true ? "Output: Long signal!" : "Output: Short signal!"; } else this.displayOutputMessage = "Wrong Code!"; } else if(buttonID == 12){ if(this.owner.equals(owner)){ this.code = code; this.displayOutputMessage = "Saved new code!"; } else if(this.owner == ""){ this.code = code; this.owner = owner; this.displayOutputMessage = "Saved new code!"; } else{ this.displayOutputMessage = "You are not allowed!"; } } if(!isLocked && worldObj.getBlockMetadata(xCoord, yCoord, zCoord) % 2 == 0){ worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, worldObj.getBlockMetadata(xCoord, yCoord, zCoord) + 1, 3); } else if (isLocked && worldObj.getBlockMetadata(xCoord, yCoord, zCoord) % 2 == 1){ worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, worldObj.getBlockMetadata(xCoord, yCoord, zCoord) - 1, 3); } //worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
  2. 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.
  3. Yeah, that question wasnt smart. I copied the code from the tutorial i read and changed it step by step (i had to change some code to get it work without the static String). But now i figured out how it to code it and it works well. There is only one more question, i have. Is it possible to realize it without a new packet handler? ATM i am comparing attributes of the tileentity in the gui class (here its the clientcopy of the fileentity, isnt it?) file and comparing/changing them in the packet handler (here its the tileentity of the server, isnt it?). I would like to remove the packethandler and handle the packets directly in the tileentity (looks better for me). Then i would just create a packethelper, that i just need to pass the data for the packet to the packethelper which sends them in a packet (so i wont need to write tons of code for every packet i want to send in the gui class file). Thank you guys, i am very happy that it works now and i think i figured out how sending packets (put the information in a packet, send it, get them on the server side, handle them and by the update method the client gets a copie of the server tileentity?) works.
  4. I copied this code to my project now. It sends packets, it writes/reads fromt the nbt but if i close minecraft and start it again he loads the right passwords from the nbt (i saw it in the console) but if i activate the block again the nbt entry for the password is null. Another problem is, that all blocks get the same password. If i change the password for any block all blocks get these password. Thank you for the link. Looks complicated but ill give it a try.
  5. Nice thank you very much. I read some tutorials about packethandler, but didn't figure out how to realize this in my special case (in the tutorials were send messages in chat). The problem is nearly solved, but if you know a tutorial how to send packages between GUI and tile entity I would be happy if you could post a link. greets MagicHaze
  6. I am trying to code a Mod that will add a codeLock (atm its just a block without a texture). In a GUI with buttons i want to change the password for the codeLock if no password was set. ATM it works until i unload the map. If i load it again the password is "" (so it wont save the password corretly). I read some tutorials about NBTTags but they didnt help me. I would be happy about some hints. Here is my code: (ATM i am changing the lockCode in my GUICodeLockBlock class file and i dont know if that is right - and yes, i registered the tileentity in my basemod class file)
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.