Exemplo n.º 1
0
 @Override
 public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) {
   if (protocolVersion < ProtocolConstants.MINECRAFT_SNAPSHOT) {
     Item item = items[0]; // Only one at a time
     writeString(item.displayName, buf); // TODO: Server unique only!
     buf.writeBoolean(action != Action.REMOVE_PLAYER);
     buf.writeShort(item.ping);
   } else {
     DefinedPacket.writeVarInt(action.ordinal(), buf);
     DefinedPacket.writeVarInt(items.length, buf);
     for (Item item : items) {
       DefinedPacket.writeUUID(item.uuid, buf);
       switch (action) {
         case ADD_PLAYER:
           DefinedPacket.writeString(item.username, buf);
           DefinedPacket.writeVarInt(item.properties.length, buf);
           for (String[] prop : item.properties) {
             DefinedPacket.writeString(prop[0], buf);
             DefinedPacket.writeString(prop[1], buf);
             if (prop.length >= 3) {
               buf.writeBoolean(true);
               DefinedPacket.writeString(prop[2], buf);
             } else {
               buf.writeBoolean(false);
             }
           }
           DefinedPacket.writeVarInt(item.gamemode, buf);
           DefinedPacket.writeVarInt(item.ping, buf);
           buf.writeBoolean(item.displayName != null);
           if (item.displayName != null) {
             DefinedPacket.writeString(item.displayName, buf);
           }
           break;
         case UPDATE_GAMEMODE:
           DefinedPacket.writeVarInt(item.gamemode, buf);
           break;
         case UPDATE_LATENCY:
           DefinedPacket.writeVarInt(item.ping, buf);
           break;
         case UPDATE_DISPLAY_NAME:
           buf.writeBoolean(item.displayName != null);
           if (item.displayName != null) {
             DefinedPacket.writeString(item.displayName, buf);
           }
           break;
       }
     }
   }
 }